Merge "API: Set HTMLForm when validating field in ApiOptions"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Thu, 14 May 2015 17:34:18 +0000 (17:34 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Thu, 14 May 2015 17:34:18 +0000 (17:34 +0000)
753 files changed:
.gitignore
RELEASE-NOTES-1.25
RELEASE-NOTES-1.26
api.php
api.php5
autoload.php
composer.json
docs/extension.schema.json
docs/hooks.txt
docs/kss/styleguide-template/index.html
docs/kss/styleguide-template/public/kss.less
img_auth.php
img_auth.php5
includes/Block.php
includes/CategoryFinder.php
includes/DefaultSettings.php
includes/GlobalFunctions.php
includes/Import.php
includes/Linker.php
includes/MediaWiki.php
includes/MovePage.php
includes/OutputPage.php
includes/Preferences.php
includes/Setup.php
includes/Status.php
includes/Title.php
includes/User.php
includes/WatchedItem.php
includes/WebRequest.php
includes/ZhConversion.php
includes/actions/HistoryAction.php
includes/actions/InfoAction.php
includes/api/ApiBase.php
includes/api/ApiBlock.php
includes/api/ApiContinuationManager.php
includes/api/ApiEditPage.php
includes/api/ApiExpandTemplates.php
includes/api/ApiFeedRecentChanges.php
includes/api/ApiFormatBase.php
includes/api/ApiFormatXml.php
includes/api/ApiHelp.php
includes/api/ApiImageRotate.php
includes/api/ApiImport.php
includes/api/ApiMain.php
includes/api/ApiManageTags.php
includes/api/ApiMove.php
includes/api/ApiOpenSearch.php
includes/api/ApiPageSet.php
includes/api/ApiParamInfo.php
includes/api/ApiParse.php
includes/api/ApiProtect.php
includes/api/ApiPurge.php
includes/api/ApiQuery.php
includes/api/ApiQueryAllCategories.php
includes/api/ApiQueryAllLinks.php
includes/api/ApiQueryAllMessages.php
includes/api/ApiQueryAllUsers.php
includes/api/ApiQueryBacklinks.php
includes/api/ApiQueryBacklinksprop.php
includes/api/ApiQueryBlocks.php
includes/api/ApiQueryCategories.php
includes/api/ApiQueryCategoryInfo.php
includes/api/ApiQueryCategoryMembers.php
includes/api/ApiQueryContributors.php
includes/api/ApiQueryDeletedRevisions.php
includes/api/ApiQueryDeletedrevs.php
includes/api/ApiQueryDuplicateFiles.php
includes/api/ApiQueryExtLinksUsage.php
includes/api/ApiQueryExternalLinks.php
includes/api/ApiQueryFileRepoInfo.php
includes/api/ApiQueryFilearchive.php
includes/api/ApiQueryIWBacklinks.php
includes/api/ApiQueryImageInfo.php
includes/api/ApiQueryImages.php
includes/api/ApiQueryInfo.php
includes/api/ApiQueryLangBacklinks.php
includes/api/ApiQueryLangLinks.php
includes/api/ApiQueryLinks.php
includes/api/ApiQueryLogEvents.php
includes/api/ApiQueryPageProps.php
includes/api/ApiQueryPagesWithProp.php
includes/api/ApiQueryPrefixSearch.php
includes/api/ApiQueryProtectedTitles.php
includes/api/ApiQueryQueryPage.php
includes/api/ApiQueryRecentChanges.php
includes/api/ApiQueryRevisions.php
includes/api/ApiQueryRevisionsBase.php
includes/api/ApiQuerySearch.php
includes/api/ApiQuerySiteinfo.php
includes/api/ApiQueryStashImageInfo.php
includes/api/ApiQueryTags.php
includes/api/ApiQueryTokens.php
includes/api/ApiQueryUserContributions.php
includes/api/ApiQueryUserInfo.php
includes/api/ApiQueryUsers.php
includes/api/ApiQueryWatchlist.php
includes/api/ApiResult.php
includes/api/ApiSetNotificationTimestamp.php
includes/api/ApiTokens.php
includes/api/ApiWatch.php
includes/api/i18n/ast.json [new file with mode: 0644]
includes/api/i18n/cs.json
includes/api/i18n/de.json
includes/api/i18n/en.json
includes/api/i18n/es.json
includes/api/i18n/fo.json [new file with mode: 0644]
includes/api/i18n/fr.json
includes/api/i18n/gl.json
includes/api/i18n/it.json
includes/api/i18n/ja.json
includes/api/i18n/ksh.json
includes/api/i18n/ku-latn.json
includes/api/i18n/lb.json
includes/api/i18n/mk.json
includes/api/i18n/oc.json
includes/api/i18n/pl.json
includes/api/i18n/qqq.json
includes/api/i18n/ta.json
includes/api/i18n/zh-hans.json
includes/api/i18n/zh-hant.json
includes/cache/MessageCache.php
includes/changetags/ChangeTags.php
includes/config/ConfigFactory.php
includes/content/ContentHandler.php
includes/context/IContextSource.php
includes/db/DBConnRef.php [new file with mode: 0644]
includes/db/Database.php
includes/db/DatabaseMysqlBase.php
includes/db/DatabaseMysqli.php
includes/db/DatabaseSqlite.php
includes/db/LoadBalancer.php
includes/db/LoadMonitor.php
includes/debug/logger/LegacyLogger.php
includes/diff/DifferenceEngine.php
includes/diff/TableDiffFormatter.php
includes/exception/BadTitleError.php
includes/filebackend/SwiftFileBackend.php
includes/filebackend/TempFSFile.php
includes/filerepo/LocalRepo.php
includes/filerepo/file/ArchivedFile.php
includes/filerepo/file/ForeignAPIFile.php
includes/filerepo/file/LocalFile.php
includes/htmlform/HTMLForm.php
includes/htmlform/HTMLFormField.php
includes/htmlform/HTMLTextField.php
includes/htmlform/VFormHTMLForm.php
includes/installer/WebInstallerOutput.php
includes/installer/i18n/ast.json
includes/installer/i18n/ce.json
includes/installer/i18n/cs.json
includes/installer/i18n/da.json
includes/installer/i18n/en-gb.json
includes/installer/i18n/es.json
includes/installer/i18n/fo.json
includes/installer/i18n/fr.json
includes/installer/i18n/id.json
includes/installer/i18n/ja.json
includes/installer/i18n/nb.json
includes/installer/i18n/nl.json
includes/installer/i18n/tr.json
includes/installer/i18n/vi.json
includes/interwiki/Interwiki.php
includes/jobqueue/JobQueue.php
includes/jobqueue/JobQueueDB.php
includes/jobqueue/JobQueueFederated.php
includes/jobqueue/JobQueueGroup.php
includes/jobqueue/JobQueueRedis.php
includes/jobqueue/JobRunner.php
includes/jobqueue/JobSpecification.php
includes/jobqueue/aggregator/JobQueueAggregatorRedis.php
includes/jobqueue/jobs/ActivityUpdateJob.php [new file with mode: 0644]
includes/jobqueue/jobs/EnqueueJob.php
includes/jobqueue/jobs/RecentChangesUpdateJob.php
includes/jobqueue/jobs/RefreshLinksJob.php
includes/libs/MapCacheLRU.php
includes/libs/MultiHttpClient.php
includes/libs/ProcessCacheLRU.php
includes/libs/eventrelayer/EventRelayer.php [new file with mode: 0755]
includes/libs/eventrelayer/EventRelayerMCRD.php [new file with mode: 0755]
includes/libs/objectcache/BagOStuff.php
includes/libs/objectcache/ReplicatedBagOStuff.php [new file with mode: 0644]
includes/libs/objectcache/WANObjectCache.php [new file with mode: 0755]
includes/libs/virtualrest/VirtualRESTServiceClient.php
includes/logging/LogEventsList.php
includes/logging/LogFormatter.php
includes/logging/LogPager.php
includes/media/DjVu.php
includes/media/FormatMetadata.php
includes/media/SVG.php
includes/objectcache/MemcachedBagOStuff.php
includes/objectcache/ObjectCache.php
includes/objectcache/RedisBagOStuff.php
includes/objectcache/ReplicatedBagOStuff.php [deleted file]
includes/page/Article.php
includes/page/WikiPage.php
includes/parser/Parser.php
includes/parser/ParserCache.php
includes/parser/StripState.php
includes/profiler/ProfileSection.php
includes/profiler/ProfilerSectionOnly.php [changed mode: 0755->0644]
includes/profiler/TransactionProfiler.php
includes/registration/ExtensionProcessor.php
includes/registration/ExtensionRegistry.php
includes/registration/Processor.php
includes/resourceloader/ResourceLoader.php
includes/resourceloader/ResourceLoaderImageModule.php
includes/resourceloader/ResourceLoaderModule.php
includes/resourceloader/ResourceLoaderSpecialCharacterDataModule.php
includes/search/SearchEngine.php
includes/search/SearchHighlighter.php
includes/site/SiteExporter.php
includes/skins/Skin.php
includes/skins/SkinTemplate.php
includes/specialpage/QueryPage.php
includes/specials/SpecialActiveusers.php
includes/specials/SpecialAllMessages.php
includes/specials/SpecialContributions.php
includes/specials/SpecialDeletedContributions.php
includes/specials/SpecialEditTags.php
includes/specials/SpecialImport.php
includes/specials/SpecialLinkSearch.php
includes/specials/SpecialLog.php
includes/specials/SpecialMergeHistory.php
includes/specials/SpecialRecentchanges.php
includes/specials/SpecialRevisiondelete.php
includes/specials/SpecialSearch.php
includes/specials/SpecialUserlogin.php
includes/specials/SpecialVersion.php
includes/title/MalformedTitleException.php
includes/title/MediaWikiTitleCodec.php
includes/title/TitleValue.php
includes/utils/UIDGenerator.php
index.php5
languages/Names.php
languages/i18n/aeb-arab.json [new file with mode: 0644]
languages/i18n/aeb-latn.json [new file with mode: 0644]
languages/i18n/aeb.json [deleted file]
languages/i18n/af.json
languages/i18n/am.json
languages/i18n/an.json
languages/i18n/ang.json
languages/i18n/ar.json
languages/i18n/arc.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/azb.json
languages/i18n/ba.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/bjn.json
languages/i18n/bn.json
languages/i18n/bpy.json
languages/i18n/br.json
languages/i18n/bs.json
languages/i18n/ca.json
languages/i18n/ce.json
languages/i18n/ckb.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/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/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/grc.json
languages/i18n/gsw.json
languages/i18n/gu.json
languages/i18n/gv.json
languages/i18n/he.json
languages/i18n/hi.json
languages/i18n/hif-latn.json
languages/i18n/hr.json
languages/i18n/hsb.json
languages/i18n/hu.json
languages/i18n/hy.json
languages/i18n/ia.json
languages/i18n/id.json
languages/i18n/ig.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/jv.json
languages/i18n/ka.json
languages/i18n/kab.json
languages/i18n/khw.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/ky.json
languages/i18n/la.json
languages/i18n/lb.json
languages/i18n/li.json
languages/i18n/lrc.json
languages/i18n/lt.json
languages/i18n/lv.json
languages/i18n/lzh.json
languages/i18n/mai.json
languages/i18n/mdf.json
languages/i18n/mg.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/myv.json
languages/i18n/mzn.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/oc.json
languages/i18n/or.json
languages/i18n/os.json
languages/i18n/pa.json
languages/i18n/pam.json
languages/i18n/pdc.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/ses.json
languages/i18n/sh.json
languages/i18n/si.json
languages/i18n/sk.json
languages/i18n/sl.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/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/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/vec.json
languages/i18n/vep.json
languages/i18n/vi.json
languages/i18n/vo.json
languages/i18n/vro.json
languages/i18n/war.json
languages/i18n/wuu.json
languages/i18n/xmf.json
languages/i18n/yi.json
languages/i18n/yo.json
languages/i18n/yue.json
languages/i18n/zh-hans.json
languages/i18n/zh-hant.json
languages/messages/MessagesAeb.php
languages/messages/MessagesAeb_arab.php [new file with mode: 0644]
languages/messages/MessagesAzb.php
languages/messages/MessagesBgn.php
languages/messages/MessagesBh.php [deleted file]
languages/messages/MessagesIt.php
languages/messages/MessagesSq.php
load.php5
maintenance/Maintenance.php
maintenance/benchmarks/benchmarkHooks.php
maintenance/checkUsernames.php
maintenance/cleanupRemovedModules.php
maintenance/cleanupTable.inc
maintenance/convertExtensionToRegistration.php
maintenance/eraseArchivedFile.php
maintenance/generateJsonI18n.php
maintenance/language/checkLanguage.inc
maintenance/language/languages.inc
maintenance/language/zhtable/Makefile.py
maintenance/language/zhtable/simp2trad.manual
maintenance/language/zhtable/simp2trad_noconvert.manual
maintenance/language/zhtable/simpphrases.manual
maintenance/language/zhtable/simpphrases_exclude.manual
maintenance/language/zhtable/symme_supp.manual
maintenance/language/zhtable/toCN.manual
maintenance/language/zhtable/toHK.manual
maintenance/language/zhtable/toSimp.manual
maintenance/language/zhtable/toTW.manual
maintenance/language/zhtable/toTrad.manual
maintenance/language/zhtable/trad2simp.manual
maintenance/language/zhtable/trad2simp_noconvert.manual
maintenance/language/zhtable/tradphrases.manual
maintenance/language/zhtable/tradphrases_exclude.manual
maintenance/mergeMessageFileList.php
maintenance/populateCategory.php
maintenance/purgeChangedFiles.php
maintenance/rebuildImages.php
maintenance/refreshLinks.php
maintenance/resources/update-oojs-ui.sh
maintenance/resources/update-oojs.sh
maintenance/runJobs.php
maintenance/update.php
maintenance/updateCollation.php
maintenance/waitForSlave.php
opensearch_desc.php
opensearch_desc.php5
package.json
profileinfo.php5
resources/Resources.php
resources/lib/jquery/jquery.js
resources/lib/oojs-ui/i18n/bn.json
resources/lib/oojs-ui/i18n/fo.json
resources/lib/oojs-ui/i18n/kn.json
resources/lib/oojs-ui/i18n/ku-latn.json [new file with mode: 0644]
resources/lib/oojs-ui/i18n/ps.json
resources/lib/oojs-ui/oojs-ui-mediawiki-icons-alerts.css [deleted file]
resources/lib/oojs-ui/oojs-ui-mediawiki-icons-content.css [deleted file]
resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-advanced.css [deleted file]
resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-core.css [deleted file]
resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-list.css [deleted file]
resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-styling.css [deleted file]
resources/lib/oojs-ui/oojs-ui-mediawiki-icons-interactions.css [deleted file]
resources/lib/oojs-ui/oojs-ui-mediawiki-icons-layout.css [deleted file]
resources/lib/oojs-ui/oojs-ui-mediawiki-icons-location.css [deleted file]
resources/lib/oojs-ui/oojs-ui-mediawiki-icons-media.css [deleted file]
resources/lib/oojs-ui/oojs-ui-mediawiki-icons-moderation.css [deleted file]
resources/lib/oojs-ui/oojs-ui-mediawiki-icons-movement.css [deleted file]
resources/lib/oojs-ui/oojs-ui-mediawiki-icons-user.css [deleted file]
resources/lib/oojs-ui/oojs-ui-mediawiki-icons-wikimedia.css [deleted file]
resources/lib/oojs-ui/oojs-ui-mediawiki-noimages.css
resources/lib/oojs-ui/oojs-ui-mediawiki.css [deleted file]
resources/lib/oojs-ui/oojs-ui-mediawiki.js
resources/lib/oojs-ui/oojs-ui.js
resources/lib/oojs-ui/themes/mediawiki/icons-alerts.json [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/icons-content.json [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/icons-editing-advanced.json [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/icons-editing-core.json [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/icons-editing-list.json [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/icons-editing-styling.json [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/icons-interactions.json [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/icons-layout.json [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/icons-location.json [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/icons-media.json [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/icons-moderation.json [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/icons-movement.json [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/icons-user.json [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/icons-wikimedia.json [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/icons.json [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/block-destructive.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/block-destructive.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/block-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/block-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/clear-invert.png [deleted file]
resources/lib/oojs-ui/themes/mediawiki/images/icons/clear-invert.svg [deleted file]
resources/lib/oojs-ui/themes/mediawiki/images/icons/clear.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/clear.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/closeInput.png [deleted file]
resources/lib/oojs-ui/themes/mediawiki/images/icons/closeInput.svg [deleted file]
resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-ltr-progressive.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-ltr-progressive.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl-progressive.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl-progressive.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/link-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/link-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-ltr-destructive.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-ltr-destructive.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-rtl-destructive.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-rtl-destructive.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/magnifyingGlass-ltr.png [deleted file]
resources/lib/oojs-ui/themes/mediawiki/images/icons/magnifyingGlass-ltr.svg [deleted file]
resources/lib/oojs-ui/themes/mediawiki/images/icons/magnifyingGlass-rtl.png [deleted file]
resources/lib/oojs-ui/themes/mediawiki/images/icons/magnifyingGlass-rtl.svg [deleted file]
resources/lib/oojs-ui/themes/mediawiki/images/icons/menu-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/menu-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/menu.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/menu.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/search-invert.png [deleted file]
resources/lib/oojs-ui/themes/mediawiki/images/icons/search-invert.svg [deleted file]
resources/lib/oojs-ui/themes/mediawiki/images/icons/search-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/search-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/search-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/search-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/search-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/search-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/search-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/search-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/search.png [deleted file]
resources/lib/oojs-ui/themes/mediawiki/images/icons/search.svg [deleted file]
resources/lib/oojs-ui/themes/mediawiki/images/icons/secure-link-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/secure-link-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/star-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/star-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSideMenu-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSideMenu-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-ltr-progressive.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-ltr-progressive.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-rtl-progressive.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-rtl-progressive.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-constructive.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-constructive.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-destructive.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-destructive.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-progressive.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-progressive.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-warning.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-warning.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/trash-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/trash-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-ltr-destructive.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-ltr-destructive.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-rtl-destructive.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-rtl-destructive.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/viewCompact-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/viewCompact-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/viewCompact.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/viewCompact.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/visionSimulator-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/visionSimulator-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/visionSimulator.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/visionSimulator.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down.png
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up.png
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/indicators.json [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/textures.json [new file with mode: 0644]
resources/lib/oojs/oojs.jquery.js
resources/src/dom-level2-skip.js [new file with mode: 0644]
resources/src/jquery/jquery.tablesorter.js
resources/src/mediawiki.action/mediawiki.action.edit.editWarning.js
resources/src/mediawiki.action/mediawiki.action.edit.preview.js
resources/src/mediawiki.action/mediawiki.action.view.categoryPage.less
resources/src/mediawiki.api/mediawiki.api.js
resources/src/mediawiki.language/specialcharacters.json
resources/src/mediawiki.legacy/wikibits.js
resources/src/mediawiki.less/mediawiki.mixins.less
resources/src/mediawiki.less/mediawiki.ui/variables.less
resources/src/mediawiki.special/mediawiki.special.changeslist.css
resources/src/mediawiki.special/mediawiki.special.preferences.js
resources/src/mediawiki.special/mediawiki.special.upload.js
resources/src/mediawiki.ui/components/icons.less
resources/src/mediawiki/mediawiki.confirmCloseWindow.js
resources/src/mediawiki/mediawiki.feedback.js
resources/src/mediawiki/mediawiki.js
resources/src/mediawiki/mediawiki.log.js
resources/src/mediawiki/mediawiki.notification.common.css [new file with mode: 0644]
resources/src/mediawiki/mediawiki.notification.css
resources/src/oojs-ui-local.css [new file with mode: 0644]
resources/src/polyfill-nodeTypes.js [new file with mode: 0644]
resources/src/startup.js
tests/TestsAutoLoader.php
tests/phpunit/Makefile
tests/phpunit/includes/FauxRequestTest.php
tests/phpunit/includes/TitleTest.php
tests/phpunit/includes/UserTest.php
tests/phpunit/includes/api/ApiContinuationManagerTest.php
tests/phpunit/includes/api/ApiErrorFormatterTest.php
tests/phpunit/includes/api/ApiResultTest.php
tests/phpunit/includes/api/format/ApiFormatTestBase.php
tests/phpunit/includes/api/format/ApiFormatXmlTest.php
tests/phpunit/includes/api/query/ApiQueryContinue2Test.php
tests/phpunit/includes/api/query/ApiQueryContinueTest.php
tests/phpunit/includes/changes/RecentChangeTest.php
tests/phpunit/includes/db/DatabaseSqliteTest.php
tests/phpunit/includes/libs/ArrayUtilsTest.php
tests/phpunit/includes/libs/ProcessCacheLRUTest.php
tests/phpunit/includes/logging/BlockLogFormatterTest.php [new file with mode: 0644]
tests/phpunit/includes/logging/DeleteLogFormatterTest.php [new file with mode: 0644]
tests/phpunit/includes/logging/LogFormatterTestCase.php [new file with mode: 0644]
tests/phpunit/includes/logging/MergeLogFormatterTest.php [new file with mode: 0644]
tests/phpunit/includes/logging/MoveLogFormatterTest.php [new file with mode: 0644]
tests/phpunit/includes/logging/NewUsersLogFormatterTest.php [new file with mode: 0644]
tests/phpunit/includes/logging/PageLangLogFormatterTest.php [new file with mode: 0644]
tests/phpunit/includes/logging/PatrolLogFormatterTest.php [new file with mode: 0644]
tests/phpunit/includes/logging/RightsLogFormatterTest.php [new file with mode: 0644]
tests/phpunit/includes/logging/UploadLogFormatterTest.php [new file with mode: 0644]
tests/phpunit/includes/media/FormatMetadataTest.php
tests/phpunit/includes/objectcache/WANObjectCacheTest.php [new file with mode: 0644]
tests/phpunit/includes/registration/ExtensionProcessorTest.php
tests/phpunit/includes/site/CachingSiteStoreTest.php
tests/phpunit/includes/site/SiteImporterTest.php
tests/phpunit/install-phpunit.sh [deleted file]
tests/qunit/data/testrunner.js
tests/qunit/suites/resources/jquery/jquery.textSelection.test.js
tests/qunit/suites/resources/mediawiki.api/mediawiki.api.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.track.test.js
tests/qunit/suites/resources/startup.test.js
thumb.php
thumb.php5
thumb_handler.php5

index b1649df..01a11bf 100644 (file)
@@ -26,6 +26,7 @@ sftp-config.json
 /docs/js
 /images/[0-9a-f]
 /images/archive
+/images/cache
 /images/deleted
 /images/lockdir
 /images/temp
index 13b01d9..3303f30 100644 (file)
@@ -47,6 +47,8 @@ production.
   be installed and running for any such queues to work.
 * $wgAutopromoteOnce no longer supports the 'view' event. For keeping some
   compatibility, any 'view' event triggers will still trigger on 'edit'.
+* $wgExtensionDirectory was added for when your extensions directory is somewhere
+  other than $IP/extensions (as $wgStyleDirectory does with the skins directory).
 
 === New features in 1.25 ===
 * (T64861) Updated plural rules to CLDR 26. Includes incompatible changes
@@ -84,7 +86,7 @@ production.
   this allows for pagination of prefix results. Extensions using this hook
   should implement supporting behavior. Not doing so can result in undefined
   behavior from API clients trying to continue through prefix results.
-* Update jQuery from v1.11.1 to v1.11.2.
+* Update jQuery from v1.11.1 to v1.11.3.
 * External libraries installed via composer will now be displayed
   on Special:Version in their own section. Extensions or skins that are
   installed via composer will not be shown in this section as it is assumed
@@ -268,6 +270,9 @@ production.
     as comma-separated lists.
   * merge events use new-style formatting.
   * delete/event and delete/revision events use new-style formatting.
+* The root node and various other nodes will now always be an object in formats
+  such as json that distinguish between arrays and objects.
+  * Except for action=opensearch where the spec requires an array.
 
 === Action API internal changes in 1.25 ===
 * ApiHelp has been rewritten to support i18n and paginated HTML output.
@@ -316,6 +321,10 @@ production.
   metadata isn't set.
 * (T35235) LogFormatter subclasses are now responsible for formatting log event
   parameters for the API.
+* Many modules have changed result data formats. While this shouldn't affect
+  clients not using the experimental formatversion=2015, code using
+  ApiResult::getResultData() and not using ApiResult::transformForBC() may need
+  updating.
 * The following methods have been deprecated and may be removed in a future
   release:
   * ApiBase::getDescription
@@ -369,6 +378,11 @@ MediaWiki supports over 350 languages. Many localisations are updated
 regularly. Below only new and removed languages are listed, as well as
 changes to languages because of Bugzilla reports.
 
+* Languages added:
+** awa (अवधी / Awadhi), thanks to translator 1AnuraagPandey;
+** bgn (بلوچی رخشانی / Western Balochi), thanks to translators
+   Baloch Afghanistan, Ibrahim khashrowdi and Rachitrali;
+** ses (Koyraboro Senni), thanks to translator Songhay.
 * (T66440) Kazakh (kk) wikis should no longer forcefully reset the user's
   interface language to kk where unexpected.
 * The Chinese conversion table was substantially updated to fix a lot of
@@ -475,8 +489,20 @@ changes to languages because of Bugzilla reports.
 * $wgResourceModuleSkinStyles no longer supports per-module local or remote paths. They
   can only be set for the entire skin.
 * Removed global function swap(). (deprecated since 1.24)
-* The global importScript and importStylesheet functions, as well as the loadedScripts object,
-  from wikibits.js (deprecated since 1.17) now emit warnings through mw.log.warn when accessed.
+* Deprecated the ".php5" file extension entry points and the $wgScriptExtension
+  configuration variable. Refer to the ".php" files instead. If you want
+  ".php5" URLs to continue to work, set up redirects. In Apache, this can be
+  done by enabling mod_rewrite and adding the following rules to your
+  configuration:
+
+    RewriteEngine On
+    RewriteBase /
+    RewriteRule ^(.*)\.php5 $1.php [R=301,L]
+
+* The global importScriptURI and importStylesheetURI functions, as well as the
+  loadedScripts object, from wikibits.js (deprecated since 1.17) now emit
+  warnings through mw.log.warn when accessed.
+
 
 == Compatibility ==
 
index eddfe30..3d6651f 100644 (file)
@@ -13,14 +13,21 @@ production.
 === New features in 1.26 ===
 * Change tags can now be hidden in the interface by disabling the associated
   "tag-<id>" interface message.
+* ':' (colon) is now invalid in usernames for new accounts. Existing accounts
+  are not affected.
 
 ==== External libraries ====
 
 === Bug fixes in 1.26 ===
+* (bug 51283) load.php sometimes sends 304 response without full headers
 
 === Action API changes in 1.26 ===
 * API action=query&list=tags: The displayname can now be boolean false if the
   tag is meant to be hidden from user interfaces.
+* action=import no longer allows both the namespace= and rootpage= parameters
+  to be set. If they are both set, the value of rootpage= will be ignored.
+* prop=revision output in enum mode is now sorted by timestamp rather than
+  revision ID. This usually won't make any difference.
 
 === Action API internal changes in 1.26 ===
 
@@ -30,6 +37,9 @@ MediaWiki supports over 350 languages. Many localisations are updated
 regularly. Below only new and removed languages are listed, as well as
 changes to languages because of Bugzilla reports.
 
+* BREAKING CHANGE (T91240): Language code "bh" is not valid in ISO 639 and
+  was removed, so it will no longer alias to "bho". If you used "bh" as your
+  wiki's $wgLanguageCode, you must update your configuration.
 
 === Other changes in 1.26 ===
 * ChangeTags::tagDescription() will return false if the interface message
@@ -42,6 +52,9 @@ by default for the ContentHandler base class and true for TextContentHandler
 and it's derivative classes (everything in core). For Content types that
 do not support direct editing, an alternative mechanism should be provided
 for editing, such as action overrides or specific api modules.
+* mediaWiki.confirmCloseWindow now returns an object of functions, instead of
+one function. The callback can't be called directly any more. The callback function
+is replaced with confirmCloseWindow.release().
 
 == Compatibility ==
 
diff --git a/api.php b/api.php
index ea2f60a..7775158 100644 (file)
--- a/api.php
+++ b/api.php
@@ -75,7 +75,7 @@ try {
        $processor = new ApiMain( RequestContext::getMain(), $wgEnableWriteAPI );
 
        // Last chance hook before executing the API
-       wfRunHooks( 'ApiBeforeMain', array( &$processor ) );
+       Hooks::run( 'ApiBeforeMain', array( &$processor ) );
        if ( !$processor instanceof ApiMain ) {
                throw new MWException( 'ApiBeforeMain hook set $processor to a non-ApiMain class' );
        }
index 524dfd5..7512cde 100644 (file)
--- a/api.php5
+++ b/api.php5
@@ -21,4 +21,6 @@
  * @file
  */
 
+define( 'MW_ENTRY_PHP5', true );
+
 require './api.php';
index ddd8254..d158481 100644 (file)
@@ -8,6 +8,7 @@ $wgAutoloadLocalClasses = array(
        'AbstractContent' => __DIR__ . '/includes/content/AbstractContent.php',
        'Action' => __DIR__ . '/includes/actions/Action.php',
        'ActiveUsersPager' => __DIR__ . '/includes/specials/SpecialActiveusers.php',
+       'ActivityUpdateJob' => __DIR__ . '/includes/jobqueue/jobs/ActivityUpdateJob.php',
        'AjaxDispatcher' => __DIR__ . '/includes/AjaxDispatcher.php',
        'AjaxResponse' => __DIR__ . '/includes/AjaxResponse.php',
        'AllMessagesTablePager' => __DIR__ . '/includes/specials/SpecialAllMessages.php',
@@ -278,7 +279,7 @@ $wgAutoloadLocalClasses = array(
        'CurlHttpRequest' => __DIR__ . '/includes/HttpFunctions.php',
        'DBAccessBase' => __DIR__ . '/includes/dao/DBAccessBase.php',
        'DBAccessError' => __DIR__ . '/includes/db/LBFactory.php',
-       'DBConnRef' => __DIR__ . '/includes/db/LoadBalancer.php',
+       'DBConnRef' => __DIR__ . '/includes/db/DBConnRef.php',
        'DBConnectionError' => __DIR__ . '/includes/db/DatabaseError.php',
        'DBError' => __DIR__ . '/includes/db/DatabaseError.php',
        'DBExpectedError' => __DIR__ . '/includes/db/DatabaseError.php',
@@ -382,6 +383,9 @@ $wgAutoloadLocalClasses = array(
        'EnqueueJob' => __DIR__ . '/includes/jobqueue/jobs/EnqueueJob.php',
        'EraseArchivedFile' => __DIR__ . '/maintenance/eraseArchivedFile.php',
        'ErrorPageError' => __DIR__ . '/includes/exception/ErrorPageError.php',
+       'EventRelayer' => __DIR__ . '/includes/libs/eventrelayer/EventRelayer.php',
+       'EventRelayerMCRD' => __DIR__ . '/includes/libs/eventrelayer/EventRelayerMCRD.php',
+       'EventRelayerNull' => __DIR__ . '/includes/libs/eventrelayer/EventRelayer.php',
        'Exif' => __DIR__ . '/includes/media/Exif.php',
        'ExifBitmapHandler' => __DIR__ . '/includes/media/ExifBitmap.php',
        'ExplodeIterator' => __DIR__ . '/includes/libs/ExplodeIterator.php',
@@ -990,7 +994,7 @@ $wgAutoloadLocalClasses = array(
        'RenderAction' => __DIR__ . '/includes/actions/RenderAction.php',
        'ReplacementArray' => __DIR__ . '/includes/libs/ReplacementArray.php',
        'Replacer' => __DIR__ . '/includes/libs/replacers/Replacer.php',
-       'ReplicatedBagOStuff' => __DIR__ . '/includes/objectcache/ReplicatedBagOStuff.php',
+       'ReplicatedBagOStuff' => __DIR__ . '/includes/libs/objectcache/ReplicatedBagOStuff.php',
        'RepoGroup' => __DIR__ . '/includes/filerepo/RepoGroup.php',
        'RequestContext' => __DIR__ . '/includes/context/RequestContext.php',
        'ResetUserTokens' => __DIR__ . '/maintenance/resetUserTokens.php',
@@ -1313,6 +1317,7 @@ $wgAutoloadLocalClasses = array(
        'ViewAction' => __DIR__ . '/includes/actions/ViewAction.php',
        'VirtualRESTService' => __DIR__ . '/includes/libs/virtualrest/VirtualRESTService.php',
        'VirtualRESTServiceClient' => __DIR__ . '/includes/libs/virtualrest/VirtualRESTServiceClient.php',
+       'WANObjectCache' => __DIR__ . '/includes/libs/objectcache/WANObjectCache.php',
        'WaitForSlave' => __DIR__ . '/maintenance/waitForSlave.php',
        'WantedCategoriesPage' => __DIR__ . '/includes/specials/SpecialWantedcategories.php',
        'WantedFilesPage' => __DIR__ . '/includes/specials/SpecialWantedfiles.php',
index d0c8f53..0789eee 100644 (file)
                "ext-iconv": "*",
                "leafo/lessphp": "0.5.0",
                "liuggio/statsd-php-client": "1.0.12",
-               "oojs/oojs-ui": "0.9.8",
+               "oojs/oojs-ui": "0.11.3",
                "php": ">=5.3.3",
                "psr/log": "1.0.0",
                "wikimedia/cdb": "1.0.1",
+               "wikimedia/assert": "0.2.2",
                "wikimedia/composer-merge-plugin": "1.0.0",
                "wikimedia/utfnormal": "1.0.2",
                "zordius/lightncandy": "0.18"
index d1b982c..8e8b23b 100644 (file)
                        "type": "object",
                        "description": "Flags (letter symbols) shown on RecentChanges pages"
                },
+               "MediaHandlers": {
+                       "type": "object",
+                       "description": "Plugins for media file type handling. Each entry in the array maps a MIME type to a PHP class name."
+               },
                "ExtensionFunctions": {
                        "type": [
                                "array",
                "config": {
                        "type": "object",
                        "description": "Configuration options for this extension"
+               },
+               "ParserTestFiles": {
+                       "type": "array",
+                       "description": "Parser test suite files to be run by parserTests.php when no specific filename is passed to it"
                }
        }
 }
index 6f59b2d..f03e38d 100644 (file)
@@ -420,6 +420,8 @@ $module: ApiBase Module object
 $module: ApiBase Module object
 &$help: Array of HTML strings to be joined for the output.
 $options: Array Options passed to ApiHelp::getHelp
+&$tocData: Array If a TOC is being generated, this array has keys as anchors in
+the page and values as for Linker::generateTOC().
 
 'ApiMain::moduleManager': Called when ApiMain has finished initializing its
 module manager. Can be used to conditionally register API modules.
@@ -2125,6 +2127,12 @@ the key.
 &$confstr: reference to a hash key string which can be modified
 $user: User (object) requesting the page
 
+'PageViewUpdate': Allow database (or other) changes to be made after a
+page view is seen by MediaWiki.  Note this does not capture views made
+via external caches such as Squid.
+$wikipage: WikiPage (object) for the page being viewed.
+$user: User (object) for the user who is viewing.
+
 'ParserAfterParse': Called from Parser::parse() just after the call to
 Parser::internalParse() returns.
 $parser: parser object
@@ -2141,6 +2149,10 @@ $stripState: stripState used (object)
 $parser: Parser object being used
 $text: text that will be returned
 
+'ParserAfterUnstrip': Called after the first unstripGeneral() in Parser::internalParseHalfParsed()
+$parser: Parser object being used
+$text: text that will be returned
+
 'ParserBeforeInternalParse': Called at the beginning of Parser::internalParse().
 $parser: Parser object
 $text: text to parse
index 933260e..d1ae26a 100644 (file)
                                        {{else}}
                                                {{#whenDepth 2}}
                                                <a name="section-{{ reference }}"></a>
-                                               <h2>{{ reference }} {{ header }}</h2>
+                                               <h2><a href="#section-{{ reference }}">{{ reference }} {{ header }}</a></h2>
                                                {{/whenDepth}}
                                                {{#whenDepth 3}}
-                                               <h3>{{ reference }} {{ header }}</h3>
+                                               <a name="section-{{ reference }}"></a>
+                                               <h3><a href="#section-{{ reference }}">{{ reference }} {{ header }}</a></h3>
                                                {{/whenDepth}}
                                        {{/whenDepth}}
                                        {{#ifAny markup modifiers}}
index eeea1a8..3727694 100644 (file)
@@ -106,6 +106,11 @@ nav {
 
        h1, h2, h3, h4, h5, h6, p {
                margin-left: 20px;
+
+               a {
+                       text-decoration: none;
+                       color: #000;
+               }
        }
 
        p {
index f44cac0..22fd401 100644 (file)
@@ -151,7 +151,7 @@ function wfImageAuthMain() {
                // Run hook for extension authorization plugins
                /** @var $result array */
                $result = null;
-               if ( !wfRunHooks( 'ImgAuthBeforeStream', array( &$title, &$path, &$name, &$result ) ) ) {
+               if ( !Hooks::run( 'ImgAuthBeforeStream', array( &$title, &$path, &$name, &$result ) ) ) {
                        wfForbidden( $result[0], $result[1], array_slice( $result, 2 ) );
                        return;
                }
index 7aee69a..456c4f2 100644 (file)
@@ -21,4 +21,6 @@
  * @file
  */
 
+define( 'MW_ENTRY_PHP5', true );
+
 require './img_auth.php';
index 7666751..d582201 100644 (file)
@@ -371,7 +371,7 @@ class Block {
                $this->mTimestamp = wfTimestamp( TS_MW, $row->ipb_timestamp );
                $this->mAuto = $row->ipb_auto;
                $this->mHideName = $row->ipb_deleted;
-               $this->mId = $row->ipb_id;
+               $this->mId = (int)$row->ipb_id;
                $this->mParentBlockId = $row->ipb_parent_block_id;
 
                // I wish I didn't have to do this
index 33de740..77c43bf 100644 (file)
@@ -27,7 +27,7 @@
  * articles are in one or all of a given subset of categories.
  *
  * Example use :
- * <code>
+ * @code
  *     # Determines whether the article with the page_id 12345 is in both
  *     # "Category 1" and "Category 2" or their subcategories, respectively
  *
@@ -39,7 +39,7 @@
  *     );
  *     $a = $cf->run();
  *     print implode( ',' , $a );
- * </code>
+ * @endcode
  *
  */
 class CategoryFinder {
index b08fe4d..857d69e 100644 (file)
@@ -154,12 +154,15 @@ $wgUsePathInfo = ( strpos( PHP_SAPI, 'cgi' ) === false ) &&
        ( strpos( PHP_SAPI, 'isapi' ) === false );
 
 /**
- * The extension to append to script names by default. This can either be .php
- * or .php5.
+ * The extension to append to script names by default.
+ *
+ * Some hosting providers used PHP 4 for *.php files, and PHP 5 for *.php5.
+ * This variable was provided to support those providers.
  *
- * Some hosting providers use PHP 4 for *.php files, and PHP 5 for *.php5. This
- * variable is provided to support those providers.
  * @since 1.11
+ * @deprecated since 1.25; support for '.php5' is being phased out of MediaWiki
+ *  proper. Backward-compatibility can be maintained by configuring your web
+ *  server to rewrite URLs. See RELEASE-NOTES for details.
  */
 $wgScriptExtension = '.php';
 
@@ -220,12 +223,19 @@ $wgLocalStylePath = false;
  */
 $wgExtensionAssetsPath = false;
 
+/**
+ * Filesystem extensions directory.
+ * Defaults to "{$IP}/extensions".
+ * @since 1.25
+ */
+$wgExtensionDirectory = "{$IP}/extensions";
+
 /**
  * Filesystem stylesheets directory.
  * Defaults to "{$IP}/skins".
  * @since 1.3
  */
-$wgStyleDirectory = false;
+$wgStyleDirectory = "{$IP}/skins";
 
 /**
  * The URL path for primary article page views. This path should contain $1,
@@ -1587,6 +1597,15 @@ $wgEnotifMaxRecips = 500;
  */
 $wgEnotifUseJobQ = false;
 
+/**
+ * Use the job queue for user activity updates like updating "last visited"
+ * fields for email notifications of page changes. This should only be enabled
+ * if the jobs have a dedicated runner to avoid update lag.
+ *
+ * @since 1.26
+ */
+$wgActivityUpdatesUseJobQueue = false;
+
 /**
  * Use real name instead of username in e-mail "from" field.
  */
@@ -1844,11 +1863,11 @@ $wgDBerrorLog = false;
  *
  * @par Examples:
  * @code
- * $wgLocaltimezone = 'UTC';
- * $wgLocaltimezone = 'GMT';
- * $wgLocaltimezone = 'PST8PDT';
- * $wgLocaltimezone = 'Europe/Sweden';
- * $wgLocaltimezone = 'CET';
+ * $wgDBerrorLogTZ = 'UTC';
+ * $wgDBerrorLogTZ = 'GMT';
+ * $wgDBerrorLogTZ = 'PST8PDT';
+ * $wgDBerrorLogTZ = 'Europe/Sweden';
+ * $wgDBerrorLogTZ = 'CET';
  * @endcode
  *
  * @since 1.20
@@ -2061,8 +2080,8 @@ $wgCacheDirectory = false;
 
 /**
  * Main cache type. This should be a cache with fast access, but it may have
- * limited space. By default, it is disabled, since the database is not fast
- * enough to make it worthwhile.
+ * limited space. By default, it is disabled, since the stock database cache
+ * is not fast enough to make it worthwhile.
  *
  * The options are:
  *
@@ -2140,6 +2159,52 @@ $wgObjectCaches = array(
        'hash' => array( 'class' => 'HashBagOStuff' ),
 );
 
+/**
+ * Main cache Wide-Area-Network cache type. This should be a cache with fast access,
+ * but it may have limited space. By default, it is disabled, since the basic stock
+ * cache is not fast enough to make it worthwhile. For single data-center setups, this can
+ * simply be pointed to a cache in $wgWANObjectCaches that uses a local $wgObjectCaches
+ * cache with a relayer of type EventRelayerNull.
+ *
+ * The options are:
+ *   - false:            Configure the cache using $wgMainCacheType, without using
+ *                       a relayer (only matters if there are multiple data-centers)
+ *   - CACHE_NONE:       Do not cache
+ *   - (other):          A string may be used which identifies a cache
+ *                       configuration in $wgWANObjectCaches.
+ */
+$wgMainWANCache = false;
+
+/**
+ * Advanced WAN object cache configuration.
+ *
+ * Each WAN cache wraps a registered object cache (for the local cluster)
+ * and it must also be configured to point to a PubSub instance. Subscribers
+ * must be configured to relay purges to the actual cache servers.
+ *
+ * The format is an associative array where the key is a cache identifier, and
+ * the value is an associative array of parameters. The "cacheId" parameter is
+ * a cache identifier from $wgObjectCaches. The "relayerConfig" parameter is an
+ * array used to construct an EventRelayer object. The "pool" parameter is a
+ * string that is used as a PubSub channel prefix.
+ */
+$wgWANObjectCaches = array(
+       CACHE_NONE => array(
+               'class'         => 'WANObjectCache',
+               'cacheId'       => CACHE_NONE,
+               'pool'          => 'mediawiki-main-none',
+               'relayerConfig' => array( 'class' => 'EventRelayerNull' )
+       )
+       /* Example of a simple single data-center cache:
+       'memcached-php' => array(
+               'class'         => 'WANObjectCache',
+               'cacheId'       => 'memcached-php',
+               'pool'          => 'mediawiki-main-memcached',
+               'relayerConfig' => array( 'class' => 'EventRelayerNull' )
+       )
+       */
+);
+
 /**
  * The expiry time for the parser cache, in seconds.
  * The default is 86400 (one day).
@@ -4373,7 +4438,7 @@ $wgHiddenPrefs = array();
  * This is used in a regular expression character class during
  * registration (regex metacharacters like / are escaped).
  */
-$wgInvalidUsernameCharacters = '@';
+$wgInvalidUsernameCharacters = '@:';
 
 /**
  * Character used as a delimiter when testing for interwiki userrights
@@ -5251,6 +5316,36 @@ $wgDebugDumpSql = false;
  */
 $wgDebugDumpSqlLength = 500;
 
+/**
+ * Performance expectations for DB usage
+ *
+ * @since 1.26
+ */
+$wgTrxProfilerLimits = array(
+       // Basic GET and POST requests
+       'GET' => array(
+               'masterConns' => 0,
+               'writes' => 0,
+               'readQueryTime' => 5
+       ),
+       'POST' => array(
+               'readQueryTime' => 5,
+               'writeQueryTime' => 1,
+               'maxAffected' => 500
+       ),
+       // Background job runner
+       'JobRunner' => array(
+               'readQueryTime' => 30,
+               'writeQueryTime' => 5,
+               'maxAffected' => 500
+       ),
+       // Command-line scripts
+       'Maintenance' => array(
+               'writeQueryTime' => 5,
+               'maxAffected' => 1000
+       )
+);
+
 /**
  * Map of string log group names to log destinations.
  *
@@ -6423,6 +6518,7 @@ $wgJobClasses = array(
        'ThumbnailRender' => 'ThumbnailRenderJob',
        'recentChangesUpdate' => 'RecentChangesUpdateJob',
        'refreshLinksPrioritized' => 'RefreshLinksJob', // for cascading protection
+       'activityUpdateJob' => 'ActivityUpdateJob',
        'enqueue' => 'EnqueueJob', // local queue for multi-DC setups
        'null' => 'NullJob'
 );
@@ -6451,6 +6547,21 @@ $wgJobTypesExcludedFromDefaultQueue = array( 'AssembleUploadChunks', 'PublishSta
  */
 $wgJobBackoffThrottling = array();
 
+/**
+ * Make job runners commit changes for slave-lag prone jobs one job at a time.
+ * This is useful if there are many job workers that race on slave lag checks.
+ * If set, jobs taking this many seconds of DB write time have serialized commits.
+ *
+ * Note that affected jobs may have worse lock contention. Also, if they affect
+ * several DBs at once they may have a smaller chance of being atomic due to the
+ * possibility of connection loss while queueing up to commit. Affected jobs may
+ * also fail due to the commit lock acquisition timeout.
+ *
+ * @var float|bool
+ * @since 1.26
+ */
+$wgJobSerialCommitThreshold = false;
+
 /**
  * Map of job types to configuration arrays.
  * This determines which queue class and storage system is used for each job type.
@@ -6474,8 +6585,7 @@ $wgJobQueueAggregator = array(
  * Expensive Querypages are already updated.
  */
 $wgSpecialPageCacheUpdates = array(
-       'Statistics' => array( 'SiteStatsUpdate', 'cacheUpdate' ),
-       'Activeusers' => array( 'SpecialActiveUsers', 'cacheUpdate' ),
+       'Statistics' => array( 'SiteStatsUpdate', 'cacheUpdate' )
 );
 
 /**
index 90460fd..8b3b959 100644 (file)
@@ -170,13 +170,13 @@ if ( !function_exists( 'hash_equals' ) ) {
  * This queues an extension to be loaded through
  * the ExtensionRegistry system.
  *
- * @param string $name Name of the extension to load
+ * @param string $ext Name of the extension to load
  * @param string|null $path Absolute path of where to find the extension.json file
  */
-function wfLoadExtension( $name, $path = null ) {
+function wfLoadExtension( $ext, $path = null ) {
        if ( !$path ) {
-               global $IP;
-               $path = "$IP/extensions/$name/extension.json";
+               global $wgExtensionDirectory;
+               $path = "$wgExtensionDirectory/$ext/extension.json";
        }
        ExtensionRegistry::getInstance()->queue( $path );
 }
@@ -194,10 +194,10 @@ function wfLoadExtension( $name, $path = null ) {
  * @param string[] $exts Array of extension names to load
  */
 function wfLoadExtensions( array $exts ) {
-       global $IP;
+       global $wgExtensionDirectory;
        $registry = ExtensionRegistry::getInstance();
        foreach ( $exts as $ext ) {
-               $registry->queue( "$IP/extensions/$ext/extension.json" );
+               $registry->queue( "$wgExtensionDirectory/$ext/extension.json" );
        }
 }
 
@@ -205,13 +205,13 @@ function wfLoadExtensions( array $exts ) {
  * Load a skin
  *
  * @see wfLoadExtension
- * @param string $name Name of the extension to load
+ * @param string $skin Name of the extension to load
  * @param string|null $path Absolute path of where to find the skin.json file
  */
-function wfLoadSkin( $name, $path = null ) {
+function wfLoadSkin( $skin, $path = null ) {
        if ( !$path ) {
-               global $IP;
-               $path = "$IP/skins/$name/skin.json";
+               global $wgStyleDirectory;
+               $path = "$wgStyleDirectory/$skin/skin.json";
        }
        ExtensionRegistry::getInstance()->queue( $path );
 }
@@ -223,10 +223,10 @@ function wfLoadSkin( $name, $path = null ) {
  * @param string[] $skins Array of extension names to load
  */
 function wfLoadSkins( array $skins ) {
-       global $IP;
+       global $wgStyleDirectory;
        $registry = ExtensionRegistry::getInstance();
        foreach ( $skins as $skin ) {
-               $registry->queue( "$IP/skins/$skin/skin.json" );
+               $registry->queue( "$wgStyleDirectory/$skin/skin.json" );
        }
 }
 
@@ -1346,9 +1346,14 @@ function wfReadOnlyReason() {
                }
                // Callers use this method to be aware that data presented to a user
                // may be very stale and thus allowing submissions can be problematic.
-               if ( $wgReadOnly === false && wfGetLB()->getLaggedSlaveMode() ) {
+               try {
+                       if ( $wgReadOnly === false && wfGetLB()->getLaggedSlaveMode() ) {
+                               $wgReadOnly = 'The database has been automatically locked ' .
+                                       'while the slave database servers catch up to the master';
+                       }
+               } catch ( DBConnectionError $e ) {
                        $wgReadOnly = 'The database has been automatically locked ' .
-                               'while the slave database servers catch up to the master';
+                               'until the slave database servers become available';
                }
        }
 
@@ -2459,7 +2464,7 @@ function wfTimestampNow() {
 function wfIsWindows() {
        static $isWindows = null;
        if ( $isWindows === null ) {
-               $isWindows = substr( php_uname(), 0, 7 ) == 'Windows';
+               $isWindows = strtoupper( substr( PHP_OS, 0, 3 ) ) === 'WIN';
        }
        return $isWindows;
 }
@@ -3348,7 +3353,7 @@ function wfBaseConvert( $input, $sourceBase, $destBase, $pad = 1,
                // Removing leading zeros works around broken base detection code in
                // some PHP versions (see <https://bugs.php.net/bug.php?id=50175> and
                // <https://bugs.php.net/bug.php?id=55398>).
-               $result = gmp_strval( gmp_init( ltrim( $input, '0' ), $sourceBase ), $destBase );
+               $result = gmp_strval( gmp_init( ltrim( $input, '0' ) ?: '0', $sourceBase ), $destBase );
        } elseif ( extension_loaded( 'bcmath' ) && ( $engine == 'auto' || $engine == 'bcmath' ) ) {
                $decimal = '0';
                foreach ( str_split( strtolower( $input ) ) as $char ) {
@@ -3750,6 +3755,7 @@ function wfWaitForSlaves(
        }
 
        // Figure out which clusters need to be checked
+       /** @var LoadBalancer[] $lbs */
        $lbs = array();
        if ( $cluster === '*' ) {
                wfGetLBFactory()->forEachLB( function ( LoadBalancer $lb ) use ( &$lbs ) {
index 1e0f8e2..c2fae30 100644 (file)
@@ -34,7 +34,7 @@ class WikiImporter {
        private $reader = null;
        private $foreignNamespaces = null;
        private $mLogItemCallback, $mUploadCallback, $mRevisionCallback, $mPageCallback;
-       private $mSiteInfoCallback, $mTargetNamespace, $mPageOutCallback;
+       private $mSiteInfoCallback, $mPageOutCallback;
        private $mNoticeCallback, $mDebug;
        private $mImportUploads, $mImageBasePath;
        private $mNoUpdates = false;
@@ -240,7 +240,6 @@ class WikiImporter {
        public function setTargetNamespace( $namespace ) {
                if ( is_null( $namespace ) ) {
                        // Don't override namespaces
-                       $this->mTargetNamespace = null;
                        $this->setImportTitleFactory( new NaiveImportTitleFactory() );
                        return true;
                } elseif (
@@ -248,7 +247,6 @@ class WikiImporter {
                        MWNamespace::exists( intval( $namespace ) )
                ) {
                        $namespace = intval( $namespace );
-                       $this->mTargetNamespace = $namespace;
                        $this->setImportTitleFactory( new NamespaceImportTitleFactory( $namespace ) );
                        return true;
                } else {
@@ -268,10 +266,7 @@ class WikiImporter {
                        $this->setImportTitleFactory( new NaiveImportTitleFactory() );
                } elseif ( $rootpage !== '' ) {
                        $rootpage = rtrim( $rootpage, '/' ); //avoid double slashes
-                       $title = Title::newFromText( $rootpage, !is_null( $this->mTargetNamespace )
-                               ? $this->mTargetNamespace
-                               : NS_MAIN
-                       );
+                       $title = Title::newFromText( $rootpage );
 
                        if ( !$title || $title->isExternal() ) {
                                $status->fatal( 'import-rootpage-invalid' );
index b58daba..4a1aa87 100644 (file)
@@ -1709,9 +1709,10 @@ class Linker {
         * Currently unused.
         *
         * @param array $tree Return value of ParserOutput::getSections()
+        * @param string|Language|bool $lang Language for the toc title, defaults to user language
         * @return string HTML fragment
         */
-       public static function generateTOC( $tree ) {
+       public static function generateTOC( $tree, $lang = false ) {
                $toc = '';
                $lastLevel = 0;
                foreach ( $tree as $section ) {
@@ -1730,7 +1731,7 @@ class Linker {
                        $lastLevel = $section['toclevel'];
                }
                $toc .= self::tocLineEnd();
-               return self::tocList( $toc );
+               return self::tocList( $toc, $lang );
        }
 
        /**
index ec2f40f..b1d0738 100644 (file)
@@ -51,6 +51,7 @@ class MediaWiki {
        /**
         * Parse the request to get the Title object
         *
+        * @throws MalformedTitleException If a title has been provided by the user, but is invalid.
         * @return Title Title object to be $wgTitle
         */
        private function parseTitle() {
@@ -110,7 +111,10 @@ class MediaWiki {
                }
 
                if ( $ret === null || ( $ret->getDBkey() == '' && !$ret->isExternal() ) ) {
-                       $ret = SpecialPage::getTitleFor( 'Badtitle' );
+                       // If we get here, we definitely don't have a valid title; throw an exception.
+                       // Try to get detailed invalid title exception first, fall back to MalformedTitleException.
+                       Title::newFromTextThrow( $title );
+                       throw new MalformedTitleException( null, $title );
                }
 
                return $ret;
@@ -122,7 +126,11 @@ class MediaWiki {
         */
        public function getTitle() {
                if ( !$this->context->hasTitle() ) {
-                       $this->context->setTitle( $this->parseTitle() );
+                       try {
+                               $this->context->setTitle( $this->parseTitle() );
+                       } catch ( MalformedTitleException $ex ) {
+                               $this->context->setTitle( SpecialPage::getTitleFor( 'Badtitle' ) );
+                       }
                }
                return $this->context->getTitle();
        }
@@ -174,6 +182,11 @@ class MediaWiki {
                        || $title->isSpecial( 'Badtitle' )
                ) {
                        $this->context->setTitle( SpecialPage::getTitleFor( 'Badtitle' ) );
+                       try {
+                               $this->parseTitle();
+                       } catch ( MalformedTitleException $ex ) {
+                               throw new BadTitleError( $ex );
+                       }
                        throw new BadTitleError();
                }
 
@@ -219,6 +232,11 @@ class MediaWiki {
                                $output->redirect( $url, 301 );
                        } else {
                                $this->context->setTitle( SpecialPage::getTitleFor( 'Badtitle' ) );
+                               try {
+                                       $this->parseTitle();
+                               } catch ( MalformedTitleException $ex ) {
+                                       throw new BadTitleError( $ex );
+                               }
                                throw new BadTitleError();
                        }
                // Redirect loops, no title in URL, $wgUsePathInfo URLs, and URLs with a variant
@@ -457,7 +475,7 @@ class MediaWiki {
        }
 
        private function main() {
-               global $wgTitle;
+               global $wgTitle, $wgTrxProfilerLimits;
 
                $request = $this->context->getRequest();
 
@@ -489,10 +507,9 @@ class MediaWiki {
                if ( !$request->wasPosted()
                        && in_array( $action, array( 'view', 'edit', 'history' ) )
                ) {
-                       $trxProfiler->setExpectation( 'masterConns', 0, __METHOD__ );
-                       $trxProfiler->setExpectation( 'writes', 0, __METHOD__ );
+                       $trxProfiler->setExpectations( $wgTrxProfilerLimits['GET'], __METHOD__ );
                } else {
-                       $trxProfiler->setExpectation( 'maxAffected', 500, __METHOD__ );
+                       $trxProfiler->setExpectations( $wgTrxProfilerLimits['POST'], __METHOD__ );
                }
 
                // If the user has forceHTTPS set to true, or if the user
index de7da3f..9891106 100644 (file)
@@ -64,21 +64,9 @@ class MovePage {
                        $status->fatal( 'spamprotectiontext' );
                }
 
-               # The move is allowed only if (1) the target doesn't exist, or
-               # (2) the target is a redirect to the source, and has no history
-               # (so we can undo bad moves right after they're done).
-
-               if ( $this->newTitle->getArticleID() ) { # Target exists; check for validity
-                       if ( !$this->isValidMoveTarget() ) {
-                               $status->fatal( 'articleexists' );
-                       }
-               } else {
-                       $tp = $this->newTitle->getTitleProtection();
-                       if ( $tp !== false ) {
-                               if ( !$user->isAllowed( $tp['permission'] ) ) {
-                                       $status->fatal( 'cantmove-titleprotected' );
-                               }
-                       }
+               $tp = $this->newTitle->getTitleProtection();
+               if ( $tp !== false && !$user->isAllowed( $tp['permission'] ) ) {
+                               $status->fatal( 'cantmove-titleprotected' );
                }
 
                Hooks::run( 'MovePageCheckPermissions',
@@ -125,6 +113,13 @@ class MovePage {
                        $status->fatal( 'badarticleerror' );
                }
 
+               # The move is allowed only if (1) the target doesn't exist, or
+               # (2) the target is a redirect to the source, and has no history
+               # (so we can undo bad moves right after they're done).
+               if ( $this->newTitle->getArticleID() && !$this->isValidMoveTarget() ) {
+                       $status->fatal( 'articleexists' );
+               }
+
                // Content model checks
                if ( !$wgContentHandlerUseDB &&
                        $this->oldTitle->getContentModel() !== $this->newTitle->getContentModel() ) {
index 28d55e4..8f9f9c6 100644 (file)
@@ -3909,6 +3909,11 @@ class OutputPage extends ContextSource {
        public function enableOOUI() {
                OOUI\Theme::setSingleton( new OOUI\MediaWikiTheme() );
                OOUI\Element::setDefaultDir( $this->getLanguage()->getDir() );
-               $this->addModuleStyles( 'oojs-ui.styles' );
+               $this->addModuleStyles( array(
+                       'oojs-ui.styles',
+                       'oojs-ui.styles.icons',
+                       'oojs-ui.styles.indicators',
+                       'oojs-ui.styles.textures',
+               ) );
        }
 }
index 74a917d..9b0ada8 100644 (file)
@@ -1098,7 +1098,7 @@ class Preferences {
                        $linkTools = array();
 
                        # Mark the default skin
-                       if ( $skinkey == $defaultSkin ) {
+                       if ( strcasecmp( $skinkey, $defaultSkin ) === 0 ) {
                                $linkTools[] = $context->msg( 'default' )->escaped();
                                $foundDefault = true;
                        }
index e281768..1324ed8 100644 (file)
@@ -74,9 +74,6 @@ if ( $wgStylePath === false ) {
 if ( $wgLocalStylePath === false ) {
        $wgLocalStylePath = "$wgScriptPath/skins";
 }
-if ( $wgStyleDirectory === false ) {
-       $wgStyleDirectory = "$IP/skins";
-}
 if ( $wgExtensionAssetsPath === false ) {
        $wgExtensionAssetsPath = "$wgScriptPath/extensions";
 }
@@ -488,6 +485,10 @@ require_once "$IP/includes/libs/normal/UtfNormalUtil.php";
 
 $ps_default2 = Profiler::instance()->scopedProfileIn( $fname . '-defaults2' );
 
+if ( $wgScriptExtension !== '.php' || defined( 'MW_ENTRY_PHP5' ) ) {
+       wfWarn( 'Script extensions other than ".php" are deprecated.' );
+}
+
 if ( $wgCanonicalServer === false ) {
        $wgCanonicalServer = wfExpandUrl( $wgServer, PROTO_HTTP );
 }
@@ -519,15 +520,25 @@ if ( $wgSecureLogin && substr( $wgServer, 0, 2 ) !== '//' ) {
 
 // Now that GlobalFunctions is loaded, set defaults that depend on it.
 if ( $wgTmpDirectory === false ) {
-       $ps_tmpdir = Profiler::instance()->scopedProfileIn( $fname . '-tempDir' );
        $wgTmpDirectory = wfTempDir();
-       Profiler::instance()->scopedProfileOut( $ps_tmpdir );
 }
 
 // We don't use counters anymore. Left here for extensions still
 // expecting this to exist. Should be removed sometime 1.26 or later.
 $wgDisableCounters = true;
 
+if ( $wgMainWANCache === false ) {
+       // Setup a WAN cache from $wgMainCacheType with no relayer.
+       // Sites using multiple datacenters can configure a relayer.
+       $wgMainWANCache = 'mediawiki-main-default';
+       $wgWANObjectCaches[$wgMainWANCache] = array(
+               'class'         => 'WANObjectCache',
+               'cacheId'       => $wgMainCacheType,
+               'pool'          => 'mediawiki-main-default',
+               'relayerConfig' => array( 'class' => 'EventRelayerNull' )
+       );
+}
+
 Profiler::instance()->scopedProfileOut( $ps_default2 );
 
 $ps_misc = Profiler::instance()->scopedProfileIn( $fname . '-misc1' );
@@ -551,6 +562,10 @@ if ( is_null( $wgLocalTZoffset ) ) {
        $wgLocalTZoffset = date( 'Z' ) / 60;
 }
 
+if ( !$wgDBerrorLogTZ ) {
+       $wgDBerrorLogTZ = $wgLocaltimezone;
+}
+
 // Useful debug output
 if ( $wgCommandLineMode ) {
        $wgRequest = new FauxRequest( array() );
index cd10258..fbb5daa 100644 (file)
@@ -69,9 +69,9 @@ class Status {
         * Succinct helper method to wrap a StatusValue
         *
         * This is is useful when formatting StatusValue objects:
-        * <code>
+        * @code
         *     $this->getOutput()->addHtml( Status::wrap( $sv )->getHTML() );
-        * </code>
+        * @endcode
         *
         * @param StatusValue|Status $sv
         * @return Status
index b0df15f..509fc27 100644 (file)
@@ -225,9 +225,11 @@ class Title {
        public static function newFromDBkey( $key ) {
                $t = new Title();
                $t->mDbkeyform = $key;
-               if ( $t->secureAndSplit() ) {
+
+               try {
+                       $t->secureAndSplit();
                        return $t;
-               } else {
+               } catch ( MalformedTitleException $ex ) {
                        return null;
                }
        }
@@ -266,6 +268,32 @@ class Title {
                        wfWarn( __METHOD__ . ': $text must be a string. This will throw an InvalidArgumentException in future.', 2 );
                }
 
+               try {
+                       return Title::newFromTextThrow( $text, $defaultNamespace );
+               } catch ( MalformedTitleException $ex ) {
+                       return null;
+               }
+       }
+
+       /**
+        * Like Title::newFromText(), but throws MalformedTitleException when the title is invalid,
+        * rather than returning null.
+        *
+        * The exception subclasses encode detailed information about why the title is invalid.
+        *
+        * @see Title::newFromText
+        *
+        * @since 1.25
+        * @param string $text Title text to check
+        * @param int $defaultNamespace
+        * @throws MalformedTitleException If the title is invalid
+        * @return Title
+        */
+       public static function newFromTextThrow( $text, $defaultNamespace = NS_MAIN ) {
+               if ( is_object( $text ) ) {
+                       throw new MWException( 'Title::newFromTextThrow given an object' );
+               }
+
                $cache = self::getTitleCache();
 
                /**
@@ -287,14 +315,11 @@ class Title {
                $t->mDbkeyform = str_replace( ' ', '_', $filteredText );
                $t->mDefaultNamespace = intval( $defaultNamespace );
 
-               if ( $t->secureAndSplit() ) {
-                       if ( $defaultNamespace == NS_MAIN ) {
-                               $cache->set( $text, $t );
-                       }
-                       return $t;
-               } else {
-                       return null;
+               $t->secureAndSplit();
+               if ( $defaultNamespace == NS_MAIN ) {
+                       $cache->set( $text, $t );
                }
+               return $t;
        }
 
        /**
@@ -323,9 +348,11 @@ class Title {
                }
 
                $t->mDbkeyform = str_replace( ' ', '_', $url );
-               if ( $t->secureAndSplit() ) {
+
+               try {
+                       $t->secureAndSplit();
                        return $t;
-               } else {
+               } catch ( MalformedTitleException $ex ) {
                        return null;
                }
        }
@@ -507,9 +534,11 @@ class Title {
 
                $t = new Title();
                $t->mDbkeyform = Title::makeName( $ns, $title, $fragment, $interwiki, true );
-               if ( $t->secureAndSplit() ) {
+
+               try {
+                       $t->secureAndSplit();
                        return $t;
-               } else {
+               } catch ( MalformedTitleException $ex ) {
                        return null;
                }
        }
@@ -940,7 +969,6 @@ class Title {
        /**
         * Get the page's content model id, see the CONTENT_MODEL_XXX constants.
         *
-        * @throws MWException
         * @param int $flags A bit field; may be Title::GAID_FOR_UPDATE to select for update
         * @return string Content model id
         */
@@ -955,10 +983,6 @@ class Title {
                        $this->mContentModel = ContentHandler::getDefaultModelFor( $this );
                }
 
-               if ( !$this->mContentModel ) {
-                       throw new MWException( 'Failed to determine content model!' );
-               }
-
                return $this->mContentModel;
        }
 
@@ -3310,6 +3334,7 @@ class Title {
         * namespace prefixes, sets the other forms, and canonicalizes
         * everything.
         *
+        * @throws MalformedTitleException On invalid titles
         * @return bool True on success
         */
        private function secureAndSplit() {
@@ -3320,15 +3345,12 @@ class Title {
 
                $dbkey = $this->mDbkeyform;
 
-               try {
-                       // @note: splitTitleString() is a temporary hack to allow MediaWikiTitleCodec to share
-                       //        the parsing code with Title, while avoiding massive refactoring.
-                       // @todo: get rid of secureAndSplit, refactor parsing code.
-                       $titleParser = self::getTitleParser();
-                       $parts = $titleParser->splitTitleString( $dbkey, $this->getDefaultNamespace() );
-               } catch ( MalformedTitleException $ex ) {
-                       return false;
-               }
+               // @note: splitTitleString() is a temporary hack to allow MediaWikiTitleCodec to share
+               //        the parsing code with Title, while avoiding massive refactoring.
+               // @todo: get rid of secureAndSplit, refactor parsing code.
+               $titleParser = self::getTitleParser();
+               // MalformedTitleException can be thrown here
+               $parts = $titleParser->splitTitleString( $dbkey, $this->getDefaultNamespace() );
 
                # Fill fields
                $this->setFragment( '#' . $parts['fragment'] );
@@ -4213,10 +4235,12 @@ class Title {
         * If you want to know if a title can be meaningfully viewed, you should
         * probably call the isKnown() method instead.
         *
+        * @param int $flags An optional bit field; may be Title::GAID_FOR_UPDATE to check
+        *   from master/for update
         * @return bool
         */
-       public function exists() {
-               $exists = $this->getArticleID() != 0;
+       public function exists( $flags = 0 ) {
+               $exists = $this->getArticleID( $flags ) != 0;
                Hooks::run( 'TitleExists', array( $this, &$exists ) );
                return $exists;
        }
index b122a9f..a2be2f0 100644 (file)
@@ -1431,37 +1431,85 @@ class User implements IDBAccessObject {
        public function addAutopromoteOnceGroups( $event ) {
                global $wgAutopromoteOnceLogInRC, $wgAuth;
 
-               $toPromote = array();
-               if ( !wfReadOnly() && $this->getId() ) {
-                       $toPromote = Autopromote::getAutopromoteOnceGroups( $this, $event );
-                       if ( count( $toPromote ) ) {
-                               $oldGroups = $this->getGroups(); // previous groups
-
-                               foreach ( $toPromote as $group ) {
-                                       $this->addGroup( $group );
-                               }
-                               // update groups in external authentication database
-                               $wgAuth->updateExternalDBGroups( $this, $toPromote );
+               if ( wfReadOnly() || !$this->getId() ) {
+                       return array();
+               }
 
-                               $newGroups = array_merge( $oldGroups, $toPromote ); // all groups
+               $toPromote = Autopromote::getAutopromoteOnceGroups( $this, $event );
+               if ( !count( $toPromote ) ) {
+                       return array();
+               }
 
-                               $logEntry = new ManualLogEntry( 'rights', 'autopromote' );
-                               $logEntry->setPerformer( $this );
-                               $logEntry->setTarget( $this->getUserPage() );
-                               $logEntry->setParameters( array(
-                                       '4::oldgroups' => $oldGroups,
-                                       '5::newgroups' => $newGroups,
-                               ) );
-                               $logid = $logEntry->insert();
-                               if ( $wgAutopromoteOnceLogInRC ) {
-                                       $logEntry->publish( $logid );
-                               }
-                       }
+               if ( !$this->checkAndSetTouched() ) {
+                       return array(); // raced out (bug T48834)
+               }
+
+               $oldGroups = $this->getGroups(); // previous groups
+               foreach ( $toPromote as $group ) {
+                       $this->addGroup( $group );
+               }
+
+               // update groups in external authentication database
+               $wgAuth->updateExternalDBGroups( $this, $toPromote );
+
+               $newGroups = array_merge( $oldGroups, $toPromote ); // all groups
+
+               $logEntry = new ManualLogEntry( 'rights', 'autopromote' );
+               $logEntry->setPerformer( $this );
+               $logEntry->setTarget( $this->getUserPage() );
+               $logEntry->setParameters( array(
+                       '4::oldgroups' => $oldGroups,
+                       '5::newgroups' => $newGroups,
+               ) );
+               $logid = $logEntry->insert();
+               if ( $wgAutopromoteOnceLogInRC ) {
+                       $logEntry->publish( $logid );
                }
 
                return $toPromote;
        }
 
+       /**
+        * Bump user_touched if it didn't change since this object was loaded
+        *
+        * On success, the mTouched field is updated.
+        * The user serialization cache is always cleared.
+        *
+        * @return bool Whether user_touched was actually updated
+        * @since 1.26
+        */
+       protected function checkAndSetTouched() {
+               $this->load();
+
+               if ( !$this->mId ) {
+                       return false; // anon
+               }
+
+               // Get a new user_touched that is higher than the old one
+               $oldTouched = $this->mTouched;
+               $newTouched = $this->newTouchedTimestamp();
+
+               $dbw = wfGetDB( DB_MASTER );
+               $dbw->update( 'user',
+                       array( 'user_touched' => $dbw->timestamp( $newTouched ) ),
+                       array(
+                               'user_id' => $this->mId,
+                               'user_touched' => $dbw->timestamp( $oldTouched ) // CAS check
+                       ),
+                       __METHOD__
+               );
+               $success = ( $dbw->affectedRows() > 0 );
+
+               if ( $success ) {
+                       $this->mTouched = $newTouched;
+               }
+
+               // Clears on failure too since that is desired if the cache is stale
+               $this->clearSharedCache();
+
+               return $success;
+       }
+
        /**
         * Clear various cached data stored in this object. The cache of the user table
         * data (i.e. self::$mCacheVars) is not cleared unless $reloadFrom is given.
@@ -2204,8 +2252,6 @@ class User implements IDBAccessObject {
         *   page. Ignored if null or !$val.
         */
        public function setNewtalk( $val, $curRev = null ) {
-               global $wgMemc;
-
                if ( wfReadOnly() ) {
                        return;
                }
@@ -2227,12 +2273,6 @@ class User implements IDBAccessObject {
                        $changed = $this->deleteNewtalk( $field, $id );
                }
 
-               if ( $this->isAnon() ) {
-                       // Anons have a separate memcached space, since
-                       // user records aren't kept for them.
-                       $key = wfMemcKey( 'newtalk', 'ip', $id );
-                       $wgMemc->set( $key, $val ? 1 : 0, 1800 );
-               }
                if ( $changed ) {
                        $this->invalidateCache();
                }
@@ -2293,15 +2333,14 @@ class User implements IDBAccessObject {
         * @since 1.25
         */
        public function touch() {
-               global $wgMemc;
-
                $this->load();
 
                if ( $this->mId ) {
+                       $this->mQuickTouched = $this->newTouchedTimestamp();
+
+                       $cache = ObjectCache::getMainWANInstance();
                        $key = wfMemcKey( 'user-quicktouched', 'id', $this->mId );
-                       $timestamp = $this->newTouchedTimestamp();
-                       $wgMemc->set( $key, $timestamp );
-                       $this->mQuickTouched = $timestamp;
+                       $cache->touchCheckKey( $key );
                }
        }
 
@@ -2319,16 +2358,16 @@ class User implements IDBAccessObject {
         * @return string TS_MW Timestamp
         */
        public function getTouched() {
-               global $wgMemc;
-
                $this->load();
 
                if ( $this->mId ) {
                        if ( $this->mQuickTouched === null ) {
+                               $cache = ObjectCache::getMainWANInstance();
                                $key = wfMemcKey( 'user-quicktouched', 'id', $this->mId );
-                               $timestamp = $wgMemc->get( $key );
+
+                               $timestamp = $cache->getCheckKeyTime( $key );
                                if ( $timestamp ) {
-                                       $this->mQuickTouched = $timestamp;
+                                       $this->mQuickTouched = wfTimestamp( TS_MW, $timestamp );
                                } else {
                                        # Set the timestamp to get HTTP 304 cache hits
                                        $this->touch();
@@ -2341,6 +2380,17 @@ class User implements IDBAccessObject {
                return $this->mTouched;
        }
 
+       /**
+        * Get the user_touched timestamp field (time of last DB updates)
+        * @return string TS_MW Timestamp
+        * @since 1.26
+        */
+       protected function getDBTouched() {
+               $this->load();
+
+               return $this->mTouched;
+       }
+
        /**
         * @return Password
         * @since 1.24
@@ -3396,7 +3446,9 @@ class User implements IDBAccessObject {
                        $force = 'force';
                }
 
-               $this->getWatchedItem( $title )->resetNotificationTimestamp( $force, $oldid );
+               $this->getWatchedItem( $title )->resetNotificationTimestamp(
+                       $force, $oldid, WatchedItem::DEFERRED
+               );
        }
 
        /**
index 524e701..73b0b93 100644 (file)
  * @ingroup Watchlist
  */
 class WatchedItem {
-       /**
-        * Constant to specify that user rights 'editmywatchlist' and
-        * 'viewmywatchlist' should not be checked.
-        * @since 1.22
-        */
-       const IGNORE_USER_RIGHTS = 0;
-
-       /**
-        * Constant to specify that user rights 'editmywatchlist' and
-        * 'viewmywatchlist' should be checked.
-        * @since 1.22
-        */
-       const CHECK_USER_RIGHTS = 1;
-
        /** @var Title */
        public $mTitle;
 
@@ -59,6 +45,31 @@ class WatchedItem {
        /** @var string */
        private $timestamp;
 
+       /**
+        * Constant to specify that user rights 'editmywatchlist' and
+        * 'viewmywatchlist' should not be checked.
+        * @since 1.22
+        */
+       const IGNORE_USER_RIGHTS = 0;
+
+       /**
+        * Constant to specify that user rights 'editmywatchlist' and
+        * 'viewmywatchlist' should be checked.
+        * @since 1.22
+        */
+       const CHECK_USER_RIGHTS = 1;
+
+       /**
+        * Do DB master updates right now
+        * @since 1.26
+        */
+       const IMMEDIATE = 0;
+       /**
+        * Do DB master updates via the job queue
+        * @since 1.26
+        */
+       const DEFERRED = 1;
+
        /**
         * Create a WatchedItem object with the given user and title
         * @since 1.22 $checkRights parameter added
@@ -208,8 +219,13 @@ class WatchedItem {
         * @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.
+        * @mode int $mode WatchedItem::DEFERRED/IMMEDIATE
         */
-       public function resetNotificationTimestamp( $force = '', $oldid = 0 ) {
+       public function resetNotificationTimestamp(
+               $force = '', $oldid = 0, $mode = self::IMMEDIATE
+       ) {
+               global $wgActivityUpdatesUseJobQueue;
+
                // Only loggedin user can have a watchlist
                if ( wfReadOnly() || $this->mUser->isAnon() || !$this->isAllowed( 'editmywatchlist' ) ) {
                        return;
@@ -258,11 +274,30 @@ class WatchedItem {
                        }
                }
 
-               // If the page is watched by the user (or may be watched), update the timestamp on any
-               // any matching rows
-               $dbw = wfGetDB( DB_MASTER );
-               $dbw->update( 'watchlist', array( 'wl_notificationtimestamp' => $notificationTimestamp ),
-                       $this->dbCond(), __METHOD__ );
+               // If the page is watched by the user (or may be watched), update the timestamp
+               if ( $mode === self::DEFERRED && $wgActivityUpdatesUseJobQueue ) {
+                       JobQueueGroup::singleton()->push(
+                               EnqueueJob::newFromLocalJobs( new JobSpecification(
+                                       'activityUpdateJob',
+                                       array(
+                                               'type'      => 'updateWatchlistNotification',
+                                               'userid'    => $this->getUserId(),
+                                               'notifTime' => $notificationTimestamp,
+                                               'curTime'   => time()
+                                       ),
+                                       array( 'removeDuplicates' => true ),
+                                       $title
+                               ) )
+                       );
+               } else {
+                       $dbw = wfGetDB( DB_MASTER );
+                       $dbw->update( 'watchlist',
+                               array( 'wl_notificationtimestamp' => $notificationTimestamp ),
+                               $this->dbCond(),
+                               __METHOD__
+                       );
+               }
+
                $this->timestamp = null;
        }
 
index 054eceb..a5fd9d8 100644 (file)
 class WebRequest {
        protected $data, $headers = array();
 
+       /**
+        * Flag to make WebRequest::getHeader return an array of values.
+        * @since 1.26
+        */
+       const GETHEADER_LIST = 1;
+
        /**
         * Lazy-init response object
         * @var WebResponse
@@ -894,19 +900,28 @@ class WebRequest {
        }
 
        /**
-        * Get a request header, or false if it isn't set
-        * @param string $name Case-insensitive header name
+        * Get a request header, or false if it isn't set.
         *
-        * @return string|bool False on failure
-        */
-       public function getHeader( $name ) {
+        * @param string $name Case-insensitive header name
+        * @param int $flags Bitwise combination of:
+        *   WebRequest::GETHEADER_LIST  Treat the header as a comma-separated list
+        *                               of values, as described in RFC 2616 § 4.2.
+        *                               (since 1.26).
+        * @return string|array|bool False if header is unset; otherwise the
+        *  header value(s) as either a string (the default) or an array, if
+        *  WebRequest::GETHEADER_LIST flag was set.
+        */
+       public function getHeader( $name, $flags = 0 ) {
                $this->initHeaders();
                $name = strtoupper( $name );
-               if ( isset( $this->headers[$name] ) ) {
-                       return $this->headers[$name];
-               } else {
+               if ( !isset( $this->headers[$name] ) ) {
                        return false;
                }
+               $value = $this->headers[$name];
+               if ( $flags & self::GETHEADER_LIST ) {
+                       $value = array_map( 'trim', explode( ',', $value ) );
+               }
+               return $value;
        }
 
        /**
@@ -1374,13 +1389,8 @@ class FauxRequest extends WebRequest {
                return $this->protocol;
        }
 
-       /**
-        * @param string $name The name of the header to get (case insensitive).
-        * @return bool|string
-        */
-       public function getHeader( $name ) {
-               $name = strtoupper( $name );
-               return isset( $this->headers[$name] ) ? $this->headers[$name] : false;
+       private function initHeaders() {
+               return;
        }
 
        /**
@@ -1488,8 +1498,8 @@ class DerivativeRequest extends FauxRequest {
                return $this->base->checkSessionCookie();
        }
 
-       public function getHeader( $name ) {
-               return $this->base->getHeader( $name );
+       public function getHeader( $name, $flags = 0 ) {
+               return $this->base->getHeader( $name, $flags );
        }
 
        public function getAllHeaders() {
index 4be2751..ba9f448 100644 (file)
@@ -375,6 +375,7 @@ $zh2Hant = array(
 '啰' => '囉',
 '啴' => '嘽',
 '啸' => '嘯',
+'喂' => '餵',
 '喷' => '噴',
 '喽' => '嘍',
 '喾' => '嚳',
@@ -415,7 +416,6 @@ $zh2Hant = array(
 '垭' => '埡',
 '垱' => '壋',
 '垲' => '塏',
-'垴' => '堖',
 '埘' => '塒',
 '埙' => '塤',
 '埚' => '堝',
@@ -504,7 +504,6 @@ $zh2Hant = array(
 '岖' => '嶇',
 '岗' => '崗',
 '岘' => '峴',
-'岙' => '嶴',
 '岚' => '嵐',
 '岛' => '島',
 '岭' => '嶺',
@@ -2889,7 +2888,6 @@ $zh2Hant = array(
 '𩧿' => '䮠',
 '𩨀' => '騔',
 '𩨁' => '䮞',
-'𩨂' => '驄',
 '𩨃' => '騝',
 '𩨄' => '騪',
 '𩨅' => '𩤸',
@@ -3002,8 +3000,8 @@ $zh2Hant = array(
 '𫛢' => '鸋',
 '𫛶' => '鶒',
 '𫛸' => '鶗',
-'0出現' => '0出現',
 '0出现' => '0出現',
+'0出現' => '0出現',
 '0出線' => '0出線',
 '0出线' => '0出線',
 '0只支持' => '0只支持',
@@ -3078,7 +3076,8 @@ $zh2Hant = array(
 '9只' => '9隻',
 '9余' => '9餘',
 '·范' => '·范',
-'’s' => '’s',
+'’s ' => '’s',
+'。个中' => '。箇中',
 '〇周后' => '〇周後',
 '〇年' => '〇年',
 '〇只' => '〇隻',
@@ -3116,6 +3115,7 @@ $zh2Hant = array(
 '一争两丑' => '一爭兩醜',
 '一物克一物' => '一物剋一物',
 '一目了然' => '一目了然',
+'一碗面' => '一碗麵',
 '一扎' => '一紮',
 '一冲' => '一衝',
 '一厘一毫' => '一釐一毫',
@@ -3208,8 +3208,8 @@ $zh2Hant = array(
 '不干她' => '不干她',
 '不干它' => '不干它',
 '不干我' => '不干我',
-'不干擾' => '不干擾',
 '不干扰' => '不干擾',
+'不干擾' => '不干擾',
 '不干涉' => '不干涉',
 '不干牠' => '不干牠',
 '不干犯' => '不干犯',
@@ -3219,8 +3219,8 @@ $zh2Hant = array(
 '不吊' => '不弔',
 '不卷' => '不捲',
 '不采' => '不採',
-'不斗膽' => '不斗膽',
 '不斗胆' => '不斗膽',
+'不斗膽' => '不斗膽',
 '不断发' => '不斷發',
 '不每只' => '不每只',
 '不谷' => '不穀',
@@ -3228,8 +3228,8 @@ $zh2Hant = array(
 '不负所托' => '不負所托',
 '不通吊庆' => '不通弔慶',
 '不丑' => '不醜',
-'不采聲' => '不采聲',
 '不采声' => '不采聲',
+'不采聲' => '不采聲',
 '不锈钢' => '不鏽鋼',
 '不食干腊' => '不食乾腊',
 '不斗' => '不鬥',
@@ -3260,6 +3260,7 @@ $zh2Hant = array(
 '中型钟表面' => '中型鐘表面',
 '中型钟表' => '中型鐘錶',
 '中型钟面' => '中型鐘面',
+'中境里' => '中境里',
 '中岳' => '中嶽',
 '中庄子' => '中庄子',
 '中文里' => '中文裡',
@@ -3275,31 +3276,36 @@ $zh2Hant = array(
 '中签订' => '中簽訂',
 '中签' => '中籤',
 '中风后' => '中風後',
-'丰儀' => '丰儀',
 '丰仪' => '丰儀',
+'丰儀' => '丰儀',
 '丰南' => '丰南',
 '丰姿' => '丰姿',
 '丰容' => '丰容',
-'丰度' => '丰度',
 '丰情' => '丰情',
 '丰标' => '丰標',
-'丰標不凡' => '丰標不凡',
 '丰标不凡' => '丰標不凡',
+'丰標不凡' => '丰標不凡',
 '丰神' => '丰神',
 '丰茸' => '丰茸',
 '丰采' => '丰采',
-'丰韻' => '丰韻',
 '丰韵' => '丰韻',
+'丰韻' => '丰韻',
+'丹棱' => '丹稜',
 '主仆' => '主僕',
 '主干' => '主幹',
 '主钟差' => '主鐘差',
 '主钟曲线' => '主鐘曲線',
 '乃系' => '乃係',
 '么么唱唱' => '么么唱唱',
+'么九' => '么九',
 '么儿' => '么兒',
+'么半' => '么半',
 '么喝' => '么喝',
+'么女' => '么女',
 '么妹' => '么妹',
+'么子' => '么子',
 '么弟' => '么弟',
+'么正' => '么正',
 '么爷' => '么爺',
 '么雞' => '么雞',
 '么么小丑' => '么麼小丑',
@@ -3321,12 +3327,8 @@ $zh2Hant = array(
 '九扎' => '九紮',
 '九只' => '九隻',
 '九余' => '九餘',
-'也斗了胆' => '也斗了膽',
-'干上' => '乾上',
 '干干' => '乾乾',
-'干干儿的' => '乾乾兒的',
 '干干净净' => '乾乾淨淨',
-'干了' => '乾了',
 '干井' => '乾井',
 '干个够' => '乾個夠',
 '干儿' => '乾兒',
@@ -3349,7 +3351,6 @@ $zh2Hant = array(
 '干回付' => '乾回付',
 '干圆洁净' => '乾圓潔淨',
 '干地' => '乾地',
-'干坤' => '乾坤',
 '干坞' => '乾塢',
 '干女' => '乾女',
 '干奴才' => '乾奴才',
@@ -3364,7 +3365,6 @@ $zh2Hant = array(
 '干巴' => '乾巴',
 '干式' => '乾式',
 '干弟' => '乾弟',
-'干得' => '乾得',
 '干急' => '乾急',
 '干性' => '乾性',
 '干打雷' => '乾打雷',
@@ -3464,13 +3464,14 @@ $zh2Hant = array(
 '干醋' => '乾醋',
 '干重' => '乾重',
 '干量' => '乾量',
+'干锅' => '乾鍋',
 '干阿奶' => '乾阿奶',
-'干隆' => '乾隆',
 '干雷' => '乾雷',
 '干电' => '乾電',
 '干霍乱' => '乾霍亂',
 '干颡' => '乾顙',
 '干台' => '乾颱',
+'干食' => '乾食',
 '干饭' => '乾飯',
 '干馆' => '乾館',
 '干糇' => '乾餱',
@@ -3484,10 +3485,8 @@ $zh2Hant = array(
 '乱哄' => '亂鬨',
 '乱哄不过来' => '亂鬨不過來',
 '了然后' => '了然後',
-'事情干脆' => '事情干脆',
 '事有斗巧' => '事有鬥巧',
 '事里' => '事裡',
-'事都干脆' => '事都干脆',
 '二不棱登' => '二不稜登',
 '二个' => '二個',
 '二只得' => '二只得',
@@ -3507,11 +3506,11 @@ $zh2Hant = array(
 '于仲文' => '于仲文',
 '于佳卉' => '于佳卉',
 '于来山' => '于來山',
-'于偉國' => '于偉國',
 '于伟国' => '于偉國',
+'于偉國' => '于偉國',
 '于光新' => '于光新',
-'于光遠' => '于光遠',
 '于光远' => '于光遠',
+'于光遠' => '于光遠',
 '于克-兰多县' => '于克-蘭多縣',
 '于克-蘭多縣' => '于克-蘭多縣',
 '于克勒' => '于克勒',
@@ -3530,12 +3529,12 @@ $zh2Hant = array(
 '于吉' => '于吉',
 '于和伟' => '于和偉',
 '于品海' => '于品海',
-'于國楨' => '于國楨',
 '于国桢' => '于國楨',
+'于國楨' => '于國楨',
 '于国治' => '于國治',
 '于國治' => '于國治',
-'于堅' => '于堅',
 '于坚' => '于堅',
+'于堅' => '于堅',
 '于大宝' => '于大寶',
 '于大寶' => '于大寶',
 '于天仁' => '于天仁',
@@ -3558,12 +3557,12 @@ $zh2Hant = array(
 '于小惠' => '于小惠',
 '于少保' => '于少保',
 '于山' => '于山',
-'于山國' => '于山國',
 '于山国' => '于山國',
+'于山國' => '于山國',
 '于帅' => '于帥',
 '于帥' => '于帥',
-'于幼軍' => '于幼軍',
 '于幼军' => '于幼軍',
+'于幼軍' => '于幼軍',
 '于康震' => '于康震',
 '于广洲' => '于廣洲',
 '于廣洲' => '于廣洲',
@@ -3571,14 +3570,14 @@ $zh2Hant = array(
 '于从濂' => '于從濂',
 '于從濂' => '于從濂',
 '于德海' => '于德海',
-'于志寧' => '于志寧',
 '于志宁' => '于志寧',
+'于志寧' => '于志寧',
 '于忠肃集' => '于忠肅集',
 '于思' => '于思',
 '于慎行' => '于慎行',
 '于慧' => '于慧',
-'于成龙' => '于成龍',
 '于成龍' => '于成龍',
+'于成龙' => '于成龍',
 '于振' => '于振',
 '于振武' => '于振武',
 '于敏' => '于敏',
@@ -3587,24 +3586,24 @@ $zh2Hant = array(
 '于斯塔德' => '于斯塔德',
 '于斯納爾斯貝里' => '于斯納爾斯貝里',
 '于斯纳尔斯贝里' => '于斯納爾斯貝里',
-'于斯達爾' => '于斯達爾',
 '于斯达尔' => '于斯達爾',
-'äº\8eæ\98\8e濤' => 'äº\8eæ\98\8e濤',
+'äº\8eæ\96¯é\81\94ç\88¾' => 'äº\8eæ\96¯é\81\94ç\88¾',
 '于明涛' => '于明濤',
+'于明濤' => '于明濤',
 '于是之' => '于是之',
 '于晨楠' => '于晨楠',
 '于晴' => '于晴',
 '于会泳' => '于會泳',
 '于會泳' => '于會泳',
-'于根偉' => '于根偉',
 '于根伟' => '于根偉',
+'于根偉' => '于根偉',
 '于格' => '于格',
 '于枫' => '于楓',
 '于楓' => '于楓',
 '于荣光' => '于榮光',
 '于樂' => '于樂',
-'于樹潔' => '于樹潔',
 '于树洁' => '于樹潔',
+'于樹潔' => '于樹潔',
 '于欣' => '于欣',
 '于欣源' => '于欣源',
 '于正昇' => '于正昇',
@@ -3615,18 +3614,18 @@ $zh2Hant = array(
 '于江震' => '于江震',
 '于波' => '于波',
 '于洋' => '于洋',
-'于洪區' => '于洪區',
 '于洪区' => '于洪區',
+'于洪區' => '于洪區',
 '于浩威' => '于浩威',
 '于海' => '于海',
 '于海洋' => '于海洋',
-'于湘蘭' => '于湘蘭',
 '于湘兰' => '于湘蘭',
-'äº\8eæ¼¢è¶\85' => 'äº\8eæ¼¢è¶\85',
+'äº\8eæ¹\98è\98­' => 'äº\8eæ¹\98è\98­',
 '于汉超' => '于漢超',
+'于漢超' => '于漢超',
 '于澄' => '于澄',
-'于澤爾' => '于澤爾',
 '于泽尔' => '于澤爾',
+'于澤爾' => '于澤爾',
 '于涛' => '于濤',
 '于濤' => '于濤',
 '于熙珍' => '于熙珍',
@@ -3655,8 +3654,8 @@ $zh2Hant = array(
 '于谨' => '于謹',
 '于貝爾' => '于貝爾',
 '于贝尔' => '于貝爾',
-'于赠' => '于贈',
 '于贈' => '于贈',
+'于赠' => '于贈',
 '于越' => '于越',
 '于军' => '于軍',
 '于軍' => '于軍',
@@ -3679,23 +3678,24 @@ $zh2Hant = array(
 '于非闇' => '于非闇',
 '于韋斯屈萊' => '于韋斯屈萊',
 '于韦斯屈莱' => '于韋斯屈萊',
-'于风政' => '于風政',
 '于風政' => '于風政',
+'于风政' => '于風政',
 '于飞' => '于飛',
 '于飛島' => '于飛島',
 '于飞岛' => '于飛島',
 '于余曲折' => '于餘曲折',
 '于鬯' => '于鬯',
 '于魁智' => '于魁智',
-'于鳳桐' => '于鳳桐',
 '于凤桐' => '于鳳桐',
-'于鳳至' => '于鳳至',
+'于鳳桐' => '于鳳桐',
 '于凤至' => '于鳳至',
-'äº\8eé»\98奧' => 'äº\8eé»\98奧',
+'äº\8eé³³è\87³' => 'äº\8eé³³è\87³',
 '于默奥' => '于默奧',
+'于默奧' => '于默奧',
 '云乎' => '云乎',
 '云云' => '云云',
 '云何' => '云何',
+'云敞' => '云敞',
 '云为' => '云為',
 '云為' => '云為',
 '云然' => '云然',
@@ -3704,6 +3704,7 @@ $zh2Hant = array(
 '五个' => '五個',
 '五周后' => '五周後',
 '五天后' => '五天後',
+'五峰县' => '五峯縣',
 '五岳' => '五嶽',
 '五年' => '五年',
 '五谷' => '五穀',
@@ -3715,7 +3716,6 @@ $zh2Hant = array(
 '五只' => '五隻',
 '五余' => '五餘',
 '井干' => '井幹',
-'井干摧败' => '井榦摧敗',
 '井里' => '井裡',
 '亚于' => '亞於',
 '亚美尼亚历' => '亞美尼亞曆',
@@ -3723,6 +3723,7 @@ $zh2Hant = array(
 '交游' => '交遊',
 '交哄' => '交鬨',
 '亦云' => '亦云',
+'京沈' => '京瀋',
 '亮丑' => '亮醜',
 '亮钟' => '亮鐘',
 '人云' => '人云',
@@ -3739,6 +3740,7 @@ $zh2Hant = array(
 '付托' => '付託',
 '仙后' => '仙后',
 '仙后座' => '仙后座',
+'仙游' => '仙遊',
 '代数里' => '代數裡',
 '代理发行' => '代理發行',
 '代码表' => '代碼表',
@@ -3767,6 +3769,7 @@ $zh2Hant = array(
 '伊郁' => '伊鬱',
 '伏几' => '伏几',
 '伐罪吊民' => '伐罪弔民',
+'休克期' => '休克期',
 '休征' => '休徵',
 '伙头' => '伙頭',
 '伴游' => '伴遊',
@@ -3793,13 +3796,12 @@ $zh2Hant = array(
 '作品里' => '作品裡',
 '作奸犯科' => '作姦犯科',
 '作准' => '作準',
-'你斗了胆' => '你斗了膽',
 '你夸' => '你誇',
 '佣金' => '佣金',
 '佣鈿' => '佣鈿',
 '佣钿' => '佣鈿',
-'佣钱' => '佣錢',
 '佣錢' => '佣錢',
+'佣钱' => '佣錢',
 '佳肴' => '佳肴',
 '佳里鎮' => '佳里鎮',
 '并一不二' => '併一不二',
@@ -3808,7 +3810,7 @@ $zh2Hant = array(
 '并到' => '併到',
 '并合' => '併合',
 '并名' => '併名',
-'并吞' => '併吞',
+'并吞下' => '併吞下',
 '并拢' => '併攏',
 '并案' => '併案',
 '并流' => '併流',
@@ -3846,7 +3848,6 @@ $zh2Hant = array(
 '个里' => '個裡',
 '个钟' => '個鐘',
 '个钟表' => '個鐘錶',
-'们斗了胆' => '們斗了膽',
 '幸免' => '倖免',
 '幸存' => '倖存',
 '幸幸' => '倖幸',
@@ -3870,11 +3871,12 @@ $zh2Hant = array(
 '佣仆' => '傭僕',
 '傲游' => '傲遊',
 '傲霜斗雪' => '傲霜鬥雪',
-'傳位于四太子' => '傳位于四太子',
 '传位于四太子' => '傳位于四太子',
+'傳位于四太子' => '傳位于四太子',
 '传于' => '傳於',
 '债累累' => '債纍纍',
 '傻里傻气' => '傻裡傻氣',
+'仅余' => '僅餘',
 '仆人' => '僕人',
 '仆使' => '僕使',
 '仆仆' => '僕僕',
@@ -3956,14 +3958,15 @@ $zh2Hant = array(
 '凶险' => '兇險',
 '先采' => '先採',
 '光致致' => '光緻緻',
+'克期间' => '克期間',
 '免征' => '免徵',
 '党太尉' => '党太尉',
 '党姓' => '党姓',
 '党家' => '党家',
 '党怀英' => '党懷英',
 '党进' => '党進',
-'党项' => '党項',
 '党項' => '党項',
+'党项' => '党項',
 '内脏' => '內臟',
 '内制' => '內製',
 '内面包' => '內面包',
@@ -4032,10 +4035,10 @@ $zh2Hant = array(
 '冷面相' => '冷面相',
 '冷面' => '冷麵',
 '准三后' => '准三后',
-'准保護' => '准保護',
 '准保护' => '准保護',
-'准保釋' => '准保釋',
+'准保護' => '准保護',
 '准保释' => '准保釋',
+'准保釋' => '准保釋',
 '凌蒙初' => '凌濛初',
 '凝炼' => '凝鍊',
 '几上' => '几上',
@@ -4074,8 +4077,8 @@ $zh2Hant = array(
 '划不來' => '划不來',
 '划不来' => '划不來',
 '划了一会' => '划了一會',
-'划来划去' => '划來划去',
 '划來划去' => '划來划去',
+'划来划去' => '划來划去',
 '划具' => '划具',
 '划到岸' => '划到岸',
 '划到江心' => '划到江心',
@@ -4086,22 +4089,24 @@ $zh2Hant = array(
 '划得來' => '划得來',
 '划得来' => '划得來',
 '划拳' => '划拳',
-'划槳' => '划槳',
 '划桨' => '划槳',
+'划槳' => '划槳',
 '划水' => '划水',
+'划着独木舟' => '划着獨木舟',
+'划着竹筏' => '划着竹筏',
+'划着船' => '划着船',
 '划算' => '划算',
 '划船' => '划船',
 '划艇' => '划艇',
-'划著' => '划著',
 '划行' => '划行',
 '划走' => '划走',
 '划起' => '划起',
-'划進' => '划進',
 '划进' => '划進',
+'划進' => '划進',
 '划过' => '划過',
 '划過' => '划過',
-'划龙舟' => '划龍舟',
 '划龍舟' => '划龍舟',
+'划龙舟' => '划龍舟',
 '判断发' => '判斷發',
 '别辟' => '別闢',
 '利欲' => '利慾',
@@ -4136,7 +4141,6 @@ $zh2Hant = array(
 '剥制' => '剝製',
 '剩余' => '剩餘',
 '剪其发' => '剪其髮',
-'剪牡丹喂牛' => '剪牡丹喂牛',
 '剪发' => '剪髮',
 '割舍' => '割捨',
 '创获' => '創穫',
@@ -4148,8 +4152,9 @@ $zh2Hant = array(
 '铲头' => '剷頭',
 '划入' => '劃入',
 '划为' => '劃為',
-'å\8a\89ä½³æ\80\9c' => 'å\8a\89ä½³æ\80\9c',
+'å\88\92è\91\97' => 'å\8a\83è\91\97å\90\8d',
 '刘佳怜' => '劉佳怜',
+'劉佳怜' => '劉佳怜',
 '刘芸后' => '劉芸后',
 '力拼' => '力拚',
 '力拼众敌' => '力拼眾敵',
@@ -4157,7 +4162,6 @@ $zh2Hant = array(
 '功勋' => '功勳',
 '功致' => '功緻',
 '加氢精制' => '加氫精制',
-'加注' => '加註',
 '劣于' => '劣於',
 '助于' => '助於',
 '劫余' => '劫餘',
@@ -4179,6 +4183,7 @@ $zh2Hant = array(
 '包扎' => '包紮',
 '匏系' => '匏繫',
 '北山索面' => '北山索麵',
+'北仑河' => '北崙河',
 '北岳' => '北嶽',
 '北回线' => '北迴線',
 '北回铁路' => '北迴鐵路',
@@ -4230,7 +4235,6 @@ $zh2Hant = array(
 '南回线' => '南迴線',
 '南回铁路' => '南迴鐵路',
 '南游' => '南遊',
-'博汇' => '博彙',
 '博采' => '博採',
 '博尔术' => '博爾朮',
 '卜云吉' => '卜云吉',
@@ -4241,7 +4245,6 @@ $zh2Hant = array(
 '印鉴' => '印鑑',
 '危于' => '危於',
 '卵与石斗' => '卵與石鬥',
-'卷发' => '卷髮',
 '卷须' => '卷鬚',
 '厂部' => '厂部',
 '厝薪于火' => '厝薪於火',
@@ -4254,8 +4257,8 @@ $zh2Hant = array(
 '反朴' => '反樸',
 '反冲' => '反衝',
 '反复制' => '反複製',
-'反覆' => '反覆',
 '反复' => '反覆',
+'反覆' => '反覆',
 '取舍' => '取捨',
 '受雇' => '受僱',
 '受托' => '受託',
@@ -4270,12 +4273,13 @@ $zh2Hant = array(
 '口腹之欲' => '口腹之慾',
 '口里' => '口裡',
 '口钟' => '口鐘',
-'古書云' => '古書云',
+'古人有云' => '古人有云',
 '古书云' => '古書云',
+'古書云' => '古書云',
 '古柯咸' => '古柯鹹',
 '古朴' => '古樸',
-'古语云' => '古語云',
 '古語云' => '古語云',
+'古语云' => '古語云',
 '古迹' => '古蹟',
 '古钟' => '古鐘',
 '古钟表' => '古鐘錶',
@@ -4294,8 +4298,8 @@ $zh2Hant = array(
 '只身上有' => '只身上有',
 '只身上沒' => '只身上沒',
 '只身上没' => '只身上沒',
-'只身上無' => '只身上無',
 '只身上无' => '只身上無',
+'只身上無' => '只身上無',
 '只身上的' => '只身上的',
 '只身世' => '只身世',
 '只身份' => '只身份',
@@ -4304,19 +4308,19 @@ $zh2Hant = array(
 '只身子' => '只身子',
 '只身形' => '只身形',
 '只身影' => '只身影',
-'只身後' => '只身後',
 '只身后' => '只身後',
+'只身後' => '只身後',
 '只身心' => '只身心',
 '只身旁' => '只身旁',
 '只身材' => '只身材',
 '只身段' => '只身段',
 '只身为' => '只身為',
 '只身為' => '只身為',
-'只身邊' => '只身邊',
 '只身边' => '只身邊',
+'只身邊' => '只身邊',
 '只身首' => '只身首',
-'只身體' => '只身體',
 '只身体' => '只身體',
+'只身體' => '只身體',
 '只身高' => '只身高',
 '只采声' => '只采聲',
 '叮叮当当' => '叮叮噹噹',
@@ -4339,6 +4343,7 @@ $zh2Hant = array(
 '叶音' => '叶音',
 '叶韵' => '叶韻',
 '吃板刀面' => '吃板刀麵',
+'吃碗面' => '吃碗麵',
 '吃姜' => '吃薑',
 '吃里扒外' => '吃裡扒外',
 '吃里爬外' => '吃裡爬外',
@@ -4359,6 +4364,7 @@ $zh2Hant = array(
 '同伙' => '同夥',
 '同于' => '同於',
 '同余' => '同餘',
+'名单于' => '名單於',
 '后冠' => '后冠',
 '后北街' => '后北街',
 '后土' => '后土',
@@ -4369,19 +4375,19 @@ $zh2Hant = array(
 '后庄' => '后庄',
 '后座' => '后座',
 '后母戊' => '后母戊',
-'后海灣' => '后海灣',
 '后海湾' => '后海灣',
+'后海灣' => '后海灣',
 '后瑞站' => '后瑞站',
 '后稷' => '后稷',
 '后綜' => '后綜',
 '后羿' => '后羿',
 '后街' => '后街',
 '后角' => '后角',
-'后豐' => '后豐',
 '后丰' => '后豐',
+'后豐' => '后豐',
 '后里' => '后里',
-'后髮FK型星' => '后髮FK型星',
 '后发FK型星' => '后髮FK型星',
+'后髮FK型星' => '后髮FK型星',
 '后发座' => '后髮座',
 '后髮座' => '后髮座',
 '后发星系团' => '后髮星系團',
@@ -4406,12 +4412,14 @@ $zh2Hant = array(
 '呆致致' => '呆緻緻',
 '呆里呆气' => '呆裡呆氣',
 '告札' => '告劄',
+'呦喂' => '呦喂',
 '周后' => '周后',
+'周惠后' => '周惠后',
 '周历' => '周曆',
-'周杰倫' => '周杰倫',
-'周杰伦' => '周杰倫',
+'周杰' => '周杰',
 '周历史' => '周歷史',
-'周游' => '周遊',
+'周游列国' => '周遊列國',
+'呵喂' => '呵喂',
 '呼吁' => '呼籲',
 '命中注定' => '命中注定',
 '和奸' => '和姦',
@@ -4422,7 +4430,6 @@ $zh2Hant = array(
 '咯当' => '咯噹',
 '哀吊' => '哀弔',
 '哀挽' => '哀輓',
-'品汇' => '品彙',
 '品鉴' => '品鑑',
 '哄堂大笑' => '哄堂大笑',
 '員山庄' => '員山庄',
@@ -4437,9 +4444,14 @@ $zh2Hant = array(
 '商历' => '商曆',
 '商标准许' => '商標准許',
 '商历史' => '商歷史',
+'啊喂' => '啊喂',
 '启发式' => '啟發式',
 '啷当' => '啷噹',
 '喂了一声' => '喂了一聲',
+'喂喂' => '喂喂',
+'喂哟' => '喂喲',
+'喂!' => '喂!',
+'喂,' => '喂,',
 '善于' => '善於',
 '喜向往' => '喜向往',
 '喜欢表' => '喜歡錶',
@@ -4450,11 +4462,13 @@ $zh2Hant = array(
 '喧哄' => '喧鬨',
 '丧钟' => '喪鐘',
 '乔岳' => '喬嶽',
-'單于' => '單于',
 '单于' => '單于',
+'單于' => '單于',
 '单单于' => '單單於',
 '单干' => '單幹',
 '单打独斗' => '單打獨鬥',
+'哟喂' => '喲喂',
+'喲喂' => '喲喂',
 '嘉谷' => '嘉穀',
 '嘉肴' => '嘉肴',
 '嘴里' => '嘴裡',
@@ -4570,12 +4584,14 @@ $zh2Hant = array(
 '堡子里' => '堡子里',
 '场里' => '場裡',
 '塞耳盗钟' => '塞耳盜鐘',
+'境里' => '境裡',
+'境里程' => '境里程',
 '墓志铭' => '墓志銘',
 '墓志' => '墓誌',
 '增辟' => '增闢',
 '墨子里' => '墨子里',
-'墨沈' => '墨沈',
-'墨沈未干' => '墨瀋未乾',
+'墨沈沈' => '墨沈沈',
+'墨沈' => '墨瀋',
 '垦辟' => '墾闢',
 '壮游' => '壯遊',
 '壮面' => '壯麵',
@@ -4597,16 +4613,16 @@ $zh2Hant = array(
 '多只含' => '多只含',
 '多只在' => '多只在',
 '多只是' => '多只是',
-'多只會' => '多只會',
 '多只会' => '多只會',
+'多只會' => '多只會',
 '多只有' => '多只有',
 '多只比' => '多只比',
 '多只用' => '多只用',
 '多只能' => '多只能',
 '多只限' => '多只限',
 '多只需' => '多只需',
-'多只须' => '多只須',
 '多只須' => '多只須',
+'多只须' => '多只須',
 '多周后' => '多周後',
 '多天后' => '多天後',
 '多于' => '多於',
@@ -4665,7 +4681,6 @@ $zh2Hant = array(
 '大钟' => '大鐘',
 '大只' => '大隻',
 '大风后' => '大風後',
-'大曲酒' => '大麴酒',
 '天克地冲' => '天克地衝',
 '天后' => '天后',
 '天后宫' => '天后宮',
@@ -4692,14 +4707,10 @@ $zh2Hant = array(
 '太丑' => '太醜',
 '太阁' => '太閤',
 '夯干' => '夯幹',
-'夸人' => '夸人',
 '夸克' => '夸克',
-'夸姣' => '夸姣',
-'夸容' => '夸容',
 '夸父' => '夸父',
 '夸特' => '夸特',
 '夸脱' => '夸脫',
-'夸丽' => '夸麗',
 '奇勋' => '奇勳',
 '奇迹' => '奇蹟',
 '奇丑' => '奇醜',
@@ -4710,7 +4721,6 @@ $zh2Hant = array(
 '女仆' => '女僕',
 '奴仆' => '奴僕',
 '奸淫掳掠' => '奸淫擄掠',
-'好干' => '好乾',
 '好家伙' => '好傢夥',
 '好凶' => '好兇',
 '好勇斗狠' => '好勇鬥狠',
@@ -4734,7 +4744,6 @@ $zh2Hant = array(
 '始于' => '始於',
 '委托' => '委託',
 '委托书' => '委託書',
-'姜文杰' => '姜文杰',
 '奸夫' => '姦夫',
 '奸妇' => '姦婦',
 '奸宄' => '姦宄',
@@ -4765,7 +4774,9 @@ $zh2Hant = array(
 '存折' => '存摺',
 '存于' => '存於',
 '孛里海' => '孛里海',
-'孤寡不谷' => '孤寡不穀',
+'孝惠后' => '孝惠后',
+'孙杰' => '孫杰',
+'孫杰' => '孫杰',
 '学家' => '學家',
 '学里' => '學裡',
 '宇宙志' => '宇宙誌',
@@ -4894,24 +4905,27 @@ $zh2Hant = array(
 '山里的' => '山裡的',
 '山谷道' => '山谷道',
 '山重水复' => '山重水複',
+'岫岩' => '岫巖',
 '岱岳' => '岱嶽',
 '峇里海' => '峇里海',
 '峰回' => '峰迴',
 '峻岭' => '峻岭',
-'昆剧' => '崑劇',
 '崑剧' => '崑劇',
+'昆剧' => '崑劇',
 '崑山' => '崑山',
 '昆山' => '崑山',
 '昆冈' => '崑岡',
 '昆仑' => '崑崙',
+'昆嵛' => '崑嵛',
+'昆承湖' => '崑承湖',
 '崑曲' => '崑曲',
 '昆曲' => '崑曲',
-'昆腔' => '崑腔',
 '崑腔' => '崑腔',
-'æ\98\86è\8b\8f' => 'å´\91è\98\87',
+'æ\98\86è\85\94' => 'å´\91è\85\94',
 '崑苏' => '崑蘇',
-'æ\98\86è°\83' => 'å´\91調',
+'æ\98\86è\8b\8f' => 'å´\91è\98\87',
 '崑调' => '崑調',
+'昆调' => '崑調',
 '崖广' => '崖广',
 '嶒棱' => '嶒稜',
 '岳岳' => '嶽嶽',
@@ -4948,6 +4962,7 @@ $zh2Hant = array(
 '师范' => '師範',
 '席卷' => '席捲',
 '带征' => '帶徵',
+'带余' => '帶餘',
 '带发修行' => '帶髮修行',
 '幅图里' => '幅圖裡',
 '干系' => '干係',
@@ -4960,15 +4975,18 @@ $zh2Hant = array(
 '年里' => '年裡',
 '年鉴' => '年鑑',
 '并力' => '并力',
+'并吞' => '并吞',
 '并州' => '并州',
 '并日而食' => '并日而食',
 '并迭' => '并迭',
 '幸免于难' => '幸免於難',
 '幸于' => '幸於',
 '幸运胡' => '幸運鬍',
+'干上' => '幹上',
 '干下去' => '幹下去',
 '干不了' => '幹不了',
 '干不成' => '幹不成',
+'干了' => '幹了',
 '干事' => '幹事',
 '干些' => '幹些',
 '干人' => '幹人',
@@ -4983,8 +5001,7 @@ $zh2Hant = array(
 '干坏事' => '幹壞事',
 '干完' => '幹完',
 '干家' => '幹家',
-'干将' => '幹將',
-'干得了' => '幹得了',
+'干得' => '幹得',
 '干性油' => '幹性油',
 '干才' => '幹才',
 '干掉' => '幹掉',
@@ -5027,8 +5044,8 @@ $zh2Hant = array(
 '床席' => '床蓆',
 '店里' => '店裡',
 '府干卿' => '府干卿',
-'府干擾' => '府干擾',
 '府干扰' => '府干擾',
+'府干擾' => '府干擾',
 '府干政' => '府干政',
 '府干涉' => '府干涉',
 '府干犯' => '府干犯',
@@ -5041,8 +5058,8 @@ $zh2Hant = array(
 '厨余' => '廚餘',
 '厮斗' => '廝鬥',
 '庙里' => '廟裡',
-'廢后' => '廢后',
 '废后' => '廢后',
+'廢后' => '廢后',
 '广征' => '廣徵',
 '广舍' => '廣捨',
 '延历' => '延曆',
@@ -5093,9 +5110,11 @@ $zh2Hant = array(
 '弘历史' => '弘歷史',
 '弱于' => '弱於',
 '弱水三千只取一瓢' => '弱水三千只取一瓢',
-'張三丰' => '張三丰',
 '张三丰' => '張三丰',
+'張三丰' => '張三丰',
 '张勋' => '張勳',
+'张杰' => '張杰',
+'張杰' => '張杰',
 '张乐于张徐' => '張樂于張徐',
 '强制作用' => '強制作用',
 '强奸' => '強姦',
@@ -5109,13 +5128,9 @@ $zh2Hant = array(
 '弹子台' => '彈子檯',
 '弹珠台' => '彈珠檯',
 '汇刊' => '彙刊',
-'汇报' => '彙報',
-'汇整' => '彙整',
 '汇算' => '彙算',
-'汇编' => '彙編',
 '汇纂' => '彙纂',
 '汇辑' => '彙輯',
-'汇集' => '彙集',
 '形单影只' => '形單影隻',
 '形于' => '形於',
 '彭于晏' => '彭于晏',
@@ -5133,11 +5148,13 @@ $zh2Hant = array(
 '后印' => '後印',
 '后台老板' => '後台老板',
 '后天' => '後天',
+'後庄' => '後庄',
 '后面店' => '後面店',
 '徐干' => '徐幹',
 '徒杠' => '徒杠',
 '徒托空言' => '徒託空言',
 '得到回复' => '得到回覆',
+'得力干将' => '得力幹將',
 '从仆' => '從僕',
 '从图里' => '從圖裡',
 '从山里' => '從山裡',
@@ -5326,7 +5343,7 @@ $zh2Hant = array(
 '忠人之托' => '忠人之托',
 '忠仆' => '忠僕',
 '忠于' => '忠於',
-'快干' => '快',
+'快干' => '快',
 '快快当当' => '快快當當',
 '快冲' => '快衝',
 '怒于' => '怒於',
@@ -5381,6 +5398,7 @@ $zh2Hant = array(
 '愿而恭' => '愿而恭',
 '栗冽' => '慄冽',
 '栗栗' => '慄慄',
+'慈溪' => '慈谿',
 '慌里慌张' => '慌裡慌張',
 '惨淡' => '慘澹',
 '庆吊' => '慶弔',
@@ -5406,9 +5424,8 @@ $zh2Hant = array(
 '应征' => '應徵',
 '应钟' => '應鐘',
 '懔栗' => '懍慄',
-'蒙懂' => '懞懂',
-'蒙蒙懂懂' => '懞懞懂懂',
-'蒙直' => '懞直',
+'懞懞懂懂' => '懞懞懂懂',
+'懞直' => '懞直',
 '惩忿窒欲' => '懲忿窒欲',
 '怀里' => '懷裡',
 '怀钟' => '懷鐘',
@@ -5437,20 +5454,19 @@ $zh2Hant = array(
 '所占算' => '所占算',
 '所托' => '所託',
 '扁拟谷盗虫' => '扁擬穀盜蟲',
-'手冢治虫' => '手塚治虫',
 '手塚治虫' => '手塚治虫',
 '手折' => '手摺',
-'手表態' => '手表態',
 '手表态' => '手表態',
+'手表態' => '手表態',
 '手表明' => '手表明',
-'手表決' => '手表決',
 '手表决' => '手表決',
+'手表決' => '手表決',
 '手表演' => '手表演',
-'手表現' => '手表現',
 '手表现' => '手表現',
+'手表現' => '手表現',
 '手表示' => '手表示',
-'手表達' => '手表達',
 '手表达' => '手表達',
+'手表達' => '手表達',
 '手表露' => '手表露',
 '手表面' => '手表面',
 '手里剑' => '手裏劍',
@@ -5484,7 +5500,6 @@ $zh2Hant = array(
 '打斗' => '打鬥',
 '托管国' => '托管國',
 '扛大梁' => '扛大樑',
-'捍御' => '扞禦',
 '扯面' => '扯麵',
 '扶余' => '扶餘',
 '批准的' => '批准的',
@@ -5573,6 +5588,7 @@ $zh2Hant = array(
 '捉奸党' => '捉奸黨',
 '捉奸' => '捉姦',
 '捉发' => '捉髮',
+'捍御' => '捍禦',
 '捏面人' => '捏麵人',
 '舍不得' => '捨不得',
 '舍入' => '捨入',
@@ -5620,7 +5636,6 @@ $zh2Hant = array(
 '卷纸' => '捲紙',
 '卷缩' => '捲縮',
 '卷舌' => '捲舌',
-'卷铺盖' => '捲舖蓋',
 '卷烟' => '捲菸',
 '卷叶蛾' => '捲葉蛾',
 '卷袖' => '捲袖',
@@ -5628,9 +5643,10 @@ $zh2Hant = array(
 '卷起' => '捲起',
 '卷轴' => '捲軸',
 '卷逃' => '捲逃',
+'卷铺盖' => '捲鋪蓋',
 '卷云' => '捲雲',
 '卷风' => '捲風',
-'卷发器' => '捲髮器',
+'卷发' => '捲髮',
 '捵面' => '捵麵',
 '捶炼' => '捶鍊',
 '扫荡' => '掃蕩',
@@ -5686,8 +5702,8 @@ $zh2Hant = array(
 '采种' => '採種',
 '采空区' => '採空區',
 '采空采穗' => '採空採穗',
-'采纳' => '採納',
 '采納' => '採納',
+'采纳' => '採納',
 '采给' => '採給',
 '采花' => '採花',
 '采芹人' => '採芹人',
@@ -5734,8 +5750,8 @@ $zh2Hant = array(
 '揪发' => '揪髮',
 '揪须' => '揪鬚',
 '揭丑' => '揭醜',
-'揮手表' => '揮手表',
 '挥手表' => '揮手表',
+'揮手表' => '揮手表',
 '搋面' => '搋麵',
 '损于' => '損於',
 '搏斗' => '搏鬥',
@@ -5773,7 +5789,8 @@ $zh2Hant = array(
 '撩斗' => '撩鬥',
 '播于' => '播於',
 '扑冬' => '撲鼕',
-'扑冬冬' => '撲鼕鼕',
+'扑咚' => '撲鼕',
+'扑咚咚' => '撲鼕鼕',
 '擀面' => '擀麵',
 '击扑' => '擊扑',
 '击钟' => '擊鐘',
@@ -5781,7 +5798,6 @@ $zh2Hant = array(
 '担仔面' => '擔仔麵',
 '担担面' => '擔擔麵',
 '据云' => '據云',
-'据干而窥井底' => '據榦而窺井底',
 '擢发' => '擢髮',
 '擦干' => '擦乾',
 '擦干净' => '擦乾淨',
@@ -5793,7 +5809,7 @@ $zh2Hant = array(
 '收获' => '收穫',
 '改征' => '改徵',
 '改采' => '改採',
-'放挣' => '放懞掙',
+'放挣' => '放懞掙',
 '放荡' => '放蕩',
 '放松' => '放鬆',
 '政斗' => '政鬥',
@@ -5840,14 +5856,15 @@ $zh2Hant = array(
 '数与虏确' => '數與虜确',
 '数只' => '數隻',
 '文丑' => '文丑',
-'文汇报' => '文匯報',
 '文学志' => '文學誌',
 '文征明' => '文徵明',
 '文思泉涌' => '文思泉湧',
+'文杰' => '文杰',
 '文采郁郁' => '文采郁郁',
 '斗牛星' => '斗牛星',
 '斫雕为朴' => '斫雕為樸',
 '新井里美' => '新井里美',
+'新干县' => '新幹縣',
 '新历' => '新曆',
 '新历史' => '新歷史',
 '新扎' => '新紮',
@@ -5855,12 +5872,10 @@ $zh2Hant = array(
 '断发' => '斷髮',
 '断发文身' => '斷髮文身',
 '方便面' => '方便麵',
-'方几' => '方几',
 '方向往' => '方向往',
 '方志恒' => '方志恒',
 '方法里' => '方法裡',
 '方志' => '方誌',
-'方面' => '方面',
 '于0' => '於0',
 '于1' => '於1',
 '于2' => '於2',
@@ -5964,14 +5979,13 @@ $zh2Hant = array(
 '于陆' => '於陸',
 '于震中' => '於震中',
 '于震前' => '於震前',
-'äº\8eé\9c\87å\90\8e' => 'æ\96¼é\9c\87å\90\8e',
+'äº\8eé\9c\87å\90\8e' => 'æ\96¼é\9c\87å¾\8c',
 '施舍' => '施捨',
 '施于' => '施於',
 '施舍之道' => '施舍之道',
 '旁征博引' => '旁徵博引',
 '旁注' => '旁註',
 '旅游' => '旅遊',
-'旋干转坤' => '旋乾轉坤',
 '旋回' => '旋迴',
 '族里' => '族裡',
 '日心历表' => '日心曆表',
@@ -5991,11 +6005,13 @@ $zh2Hant = array(
 '明范' => '明範',
 '明鉴' => '明鑑',
 '易于' => '易於',
+'昔人有云' => '昔人有云',
 '星历' => '星曆',
 '星期后' => '星期後',
 '星历史' => '星歷史',
 '春游' => '春遊',
 '春香斗学' => '春香鬥學',
+'昭惠后' => '昭惠后',
 '是发小' => '是髮小',
 '时钟' => '時鐘',
 '时间不准' => '時間不準',
@@ -6004,7 +6020,7 @@ $zh2Hant = array(
 '晚钟' => '晚鐘',
 '晞发' => '晞髮',
 '晨钟' => '晨鐘',
-'æ\99®å\86¬å\86¬' => '普鼕鼕',
+'æ\99®å\92\9aå\92\9a' => '普鼕鼕',
 '晾干' => '晾乾',
 '暗地里' => '暗地裡',
 '暗沟里' => '暗溝裡',
@@ -6030,7 +6046,6 @@ $zh2Hant = array(
 '晒谷' => '曬穀',
 '曰云' => '曰云',
 '更仆难数' => '更僕難數',
-'更加注' => '更加注',
 '更签' => '更籤',
 '更钟' => '更鐘',
 '书签' => '書籤',
@@ -6040,8 +6055,8 @@ $zh2Hant = array(
 '曾朴' => '曾樸',
 '最多' => '最多',
 '最多只' => '最多只',
-'會干擾' => '會干擾',
 '会干扰' => '會干擾',
+'會干擾' => '會干擾',
 '会干' => '會幹',
 '会吊' => '會弔',
 '会里' => '會裡',
@@ -6056,8 +6071,8 @@ $zh2Hant = array(
 '有只不' => '有只不',
 '有只允' => '有只允',
 '有只容' => '有只容',
-'有只采' => '有只採',
 '有只採' => '有只採',
+'有只采' => '有只採',
 '有只是' => '有只是',
 '有只用' => '有只用',
 '有回复' => '有回覆',
@@ -6066,8 +6081,8 @@ $zh2Hant = array(
 '有征战' => '有征戰',
 '有征戰' => '有征戰',
 '有征服' => '有征服',
-'有征讨' => '有征討',
 '有征討' => '有征討',
+'有征讨' => '有征討',
 '有征' => '有徵',
 '有恒街' => '有恒街',
 '有栖川' => '有栖川',
@@ -6101,6 +6116,7 @@ $zh2Hant = array(
 '朱理安历史' => '朱理安歷史',
 '朴子里' => '朴子里',
 '李志喜' => '李志喜',
+'李适' => '李适',
 '李连杰' => '李連杰',
 '李連杰' => '李連杰',
 '材干' => '材幹',
@@ -6113,20 +6129,22 @@ $zh2Hant = array(
 '束发' => '束髮',
 '杠人' => '杠人',
 '杠梁' => '杠梁',
-'杠轂' => '杠轂',
 '杠毂' => '杠轂',
+'杠轂' => '杠轂',
 '杯干' => '杯乾',
 '杯面' => '杯麵',
 '杰伦' => '杰倫',
-'æ\9d°å¨\81ç\88¾é\9f³æ¨\82' => 'æ\9d°å¨\81ç\88¾é\9f³æ¨\82',
-'杰威尔音乐' => '杰威爾音樂',
-'杰特' => '杰特',
+'æ\9d°å\80«' => 'æ\9d°å\80«',
+'杰威尔' => '杰威爾',
+'杰威爾' => '杰威爾',
 '东周钟' => '東周鐘',
 '东岳' => '東嶽',
 '東湖里' => '東湖里',
 '东冲西突' => '東衝西突',
 '东游' => '東遊',
+'松口镇' => '松口鎮',
 '松山庄' => '松山庄',
+'松溪县' => '松谿縣',
 '板荡' => '板蕩',
 '林宏岳' => '林宏嶽',
 '林杰樑' => '林杰樑',
@@ -6147,6 +6165,7 @@ $zh2Hant = array(
 '柜子' => '柜子',
 '柜柳' => '柜柳',
 '柱梁' => '柱樑',
+'柳斌杰' => '柳斌杰',
 '柳诒征' => '柳詒徵',
 '栖栖皇皇' => '栖栖皇皇',
 '栗栖溪' => '栗栖溪',
@@ -6160,6 +6179,7 @@ $zh2Hant = array(
 '格里高利历' => '格里高利曆',
 '格斗' => '格鬥',
 '桂圆干' => '桂圓乾',
+'框里' => '框裡',
 '桌几' => '桌几',
 '桌历' => '桌曆',
 '桌历史' => '桌歷史',
@@ -6185,14 +6205,15 @@ $zh2Hant = array(
 '植发' => '植髮',
 '椒面' => '椒麵',
 '椰枣干' => '椰棗乾',
-'楊雅筑' => '楊雅筑',
 '杨雅筑' => '楊雅筑',
+'楊雅筑' => '楊雅筑',
 '桢干' => '楨幹',
 '业余' => '業餘',
 '榨干' => '榨乾',
 '枪杆' => '槍桿',
 '杠杆' => '槓桿',
 '乐器钟' => '樂器鐘',
+'乐游原' => '樂遊原',
 '樊于期' => '樊於期',
 '梁上' => '樑上',
 '梁柱' => '樑柱',
@@ -6208,8 +6229,8 @@ $zh2Hant = array(
 '模范14棒' => '模范14棒',
 '模范21棒' => '模范21棒',
 '模范七棒' => '模范七棒',
-'模范三軍' => '模范三軍',
 '模范三军' => '模范三軍',
+'模范三軍' => '模范三軍',
 '模范棒棒堂' => '模范棒棒堂',
 '模制' => '模製',
 '样范' => '樣範',
@@ -6233,8 +6254,8 @@ $zh2Hant = array(
 '朴陋' => '樸陋',
 '朴马' => '樸馬',
 '朴鲁' => '樸魯',
-'树干' => '樹幹',
 '树林里' => '樹林裡',
+'树干' => '樹榦',
 '树梁' => '樹樑',
 '桥梁' => '橋樑',
 '机械系' => '機械系',
@@ -6242,6 +6263,7 @@ $zh2Hant = array(
 '机械表' => '機械錶',
 '机械钟' => '機械鐘',
 '机械钟表' => '機械鐘錶',
+'横峰县' => '橫峯縣',
 '横征暴敛' => '橫徵暴斂',
 '横梁' => '橫樑',
 '横冲' => '橫衝',
@@ -6250,6 +6272,7 @@ $zh2Hant = array(
 '台灯' => '檯燈',
 '台球' => '檯球',
 '台面上' => '檯面上',
+'台面化' => '檯面化',
 '柜台' => '櫃檯',
 '栉发工' => '櫛髮工',
 '欲海难填' => '欲海難填',
@@ -6259,6 +6282,7 @@ $zh2Hant = array(
 '欧游' => '歐遊',
 '止于' => '止於',
 '正官庄' => '正官庄',
+'正杰' => '正杰',
 '武丑' => '武丑',
 '武后' => '武后',
 '武斗' => '武鬥',
@@ -6299,6 +6323,7 @@ $zh2Hant = array(
 '水来汤里去' => '水來湯裡去',
 '水准' => '水準',
 '水无怜奈' => '水無怜奈',
+'水表面' => '水表面',
 '水里' => '水裡',
 '水里商工' => '水里商工',
 '水里溪' => '水里溪',
@@ -6313,8 +6338,8 @@ $zh2Hant = array(
 '求知欲' => '求知慾',
 '求签' => '求籤',
 '求道于盲' => '求道於盲',
-'污蔑' => '汙衊',
 '池里' => '池裡',
+'污蔑' => '污衊',
 '汤卤' => '汤滷',
 '汲于' => '汲於',
 '决斗' => '決鬥',
@@ -6327,15 +6352,14 @@ $zh2Hant = array(
 '没事干' => '沒事幹',
 '没干' => '沒幹',
 '没折至' => '沒摺至',
-'没梢干' => '沒梢幹',
 '没样范' => '沒樣範',
 '没准' => '沒準',
 '冲冠发怒' => '沖冠髮怒',
 '冲天' => '沖天',
+'沙琅' => '沙瑯',
 '沙羡' => '沙羡',
 '沙里淘金' => '沙裡淘金',
 '河岳' => '河嶽',
-'河流汇集' => '河流匯集',
 '河里' => '河裡',
 '油泼面' => '油潑麵',
 '油斗' => '油鬥',
@@ -6356,7 +6380,7 @@ $zh2Hant = array(
 '泱郁' => '泱鬱',
 '泳气钟' => '泳氣鐘',
 '洄游' => '洄遊',
-'æ´\8b河大æ\9b²' => 'æ´\8b河大麴',
+'æ´\8b河大æ\9b²' => 'æ´\8b河大麯',
 '洒家' => '洒家',
 '洒扫' => '洒掃',
 '洒水' => '洒水',
@@ -6391,8 +6415,8 @@ $zh2Hant = array(
 '浮夸' => '浮誇',
 '浮松' => '浮鬆',
 '海干' => '海乾',
-'海淀山後' => '海淀山後',
 '海淀山后' => '海淀山後',
+'海淀山後' => '海淀山後',
 '浸卤' => '浸滷',
 '涂善妮' => '涂善妮',
 '涂坤' => '涂坤',
@@ -6413,8 +6437,8 @@ $zh2Hant = array(
 '涂醒哲' => '涂醒哲',
 '涂長望' => '涂長望',
 '涂长望' => '涂長望',
-'涂鸿钦' => '涂鴻欽',
 '涂鴻欽' => '涂鴻欽',
+'涂鸿钦' => '涂鴻欽',
 '涳蒙' => '涳濛',
 '涸干' => '涸乾',
 '凉席' => '涼蓆',
@@ -6425,7 +6449,6 @@ $zh2Hant = array(
 '泪如泉涌' => '淚如泉湧',
 '淡于' => '淡於',
 '淡蒙蒙' => '淡濛濛',
-'淡朱' => '淡硃',
 '净余' => '淨餘',
 '净发' => '淨髮',
 '淫欲' => '淫慾',
@@ -6495,8 +6518,10 @@ $zh2Hant = array(
 '准军事' => '準軍事',
 '准头' => '準頭',
 '准点' => '準點',
+'沟大曲' => '溝大麯',
 '溟蒙' => '溟濛',
 '溢于' => '溢於',
+'温洛克期' => '溫洛克期',
 '溲面' => '溲麵',
 '溺于' => '溺於',
 '滃郁' => '滃鬱',
@@ -6542,6 +6567,7 @@ $zh2Hant = array(
 '潮涌' => '潮湧',
 '溃于' => '潰於',
 '涩谷区' => '澀谷區',
+'澄江县' => '澂江縣',
 '澄澹精致' => '澄澹精致',
 '澒蒙' => '澒濛',
 '泽渗漓而下降' => '澤滲灕而下降',
@@ -6560,11 +6586,20 @@ $zh2Hant = array(
 '蒙汜' => '濛汜',
 '蒙蒙细雨' => '濛濛細雨',
 '蒙雾' => '濛霧',
-'蒙松雨' => '濛鬆雨',
 '蒙鸿' => '濛鴻',
+'浚州' => '濬州',
+'浚县' => '濬縣',
 '滨田里佳子' => '濱田里佳子',
-'沈吉线' => '瀋吉線',
+'沈丹客运' => '瀋丹客運',
+'沈丹线' => '瀋丹線',
+'沈丹铁路' => '瀋丹鐵路',
+'沈北' => '瀋北',
+'沈吉' => '瀋吉',
+'沈大线' => '瀋大線',
+'沈大铁路' => '瀋大鐵路',
+'沈大高速' => '瀋大高速',
 '沈山线' => '瀋山線',
+'沈山铁路' => '瀋山鐵路',
 '沈州' => '瀋州',
 '沈抚' => '瀋撫',
 '沈水' => '瀋水',
@@ -6613,6 +6648,7 @@ $zh2Hant = array(
 '炼制' => '煉製',
 '煎面' => '煎麵',
 '烟卷' => '煙捲',
+'烟台' => '煙臺',
 '照入签' => '照入籤',
 '照相干片' => '照相乾片',
 '煨干' => '煨乾',
@@ -6701,6 +6737,7 @@ $zh2Hant = array(
 '理次发' => '理次髮',
 '理发' => '理髮',
 '琴钟' => '琴鐘',
+'珐琅' => '琺瑯',
 '瑞城里' => '瑞城里',
 '瑞征' => '瑞徵',
 '瑶签' => '瑤籤',
@@ -6736,6 +6773,7 @@ $zh2Hant = array(
 '男仆' => '男僕',
 '界里' => '界裡',
 '畏于' => '畏於',
+'留长发' => '留長髮',
 '留发' => '留髮',
 '毕于' => '畢於',
 '毕业于' => '畢業於',
@@ -6785,11 +6823,11 @@ $zh2Hant = array(
 '白霉' => '白黴',
 '百个' => '百個',
 '百只可' => '百只可',
-'百只夠' => '百只夠',
 '百只够' => '百只夠',
+'百只夠' => '百只夠',
 '百只怕' => '百只怕',
-'百只足夠' => '百只足夠',
 '百只足够' => '百只足夠',
+'百只足夠' => '百只足夠',
 '百周后' => '百周後',
 '百天后' => '百天後',
 '百年' => '百年',
@@ -6805,6 +6843,8 @@ $zh2Hant = array(
 '的回复' => '的回覆',
 '的图里' => '的圖裡',
 '的山里' => '的山裡',
+'的干将' => '的幹將',
+'的个中' => '的箇中',
 '的钟' => '的鐘',
 '的长发' => '的長髮',
 '的发小' => '的髮小',
@@ -6877,6 +6917,7 @@ $zh2Hant = array(
 '瞳蒙' => '瞳矇',
 '蒙事' => '矇事',
 '蒙昧无知' => '矇昧無知',
+'蒙松雨' => '矇松雨',
 '蒙混' => '矇混',
 '蒙瞍' => '矇瞍',
 '蒙眬' => '矇矓',
@@ -6887,6 +6928,7 @@ $zh2Hant = array(
 '矜夸' => '矜誇',
 '短几' => '短几',
 '短于' => '短於',
+'短发生' => '短發生',
 '短发' => '短髮',
 '矮几' => '矮几',
 '石几' => '石几',
@@ -6895,20 +6937,14 @@ $zh2Hant = array(
 '石英钟' => '石英鐘',
 '石英钟表' => '石英鐘錶',
 '石钟' => '石鐘',
-'石钟山' => '石鐘山',
 '研制' => '研製',
 '砰当' => '砰噹',
 '破鉴' => '破鑑',
-'朱唇皓齿' => '硃唇皓齒',
-'朱批' => '硃批',
 '朱砂' => '硃砂',
-'朱笔' => '硃筆',
-'朱红色' => '硃紅色',
-'朱色' => '硃色',
-'朱谕' => '硃諭',
 '硬干' => '硬幹',
 '确瘠' => '确瘠',
 '碑志' => '碑誌',
+'碗里' => '碗裡',
 '碰钟' => '碰鐘',
 '确系' => '確係',
 '码表' => '碼錶',
@@ -6952,7 +6988,6 @@ $zh2Hant = array(
 '私欲' => '私慾',
 '私斗' => '私鬥',
 '秋游' => '秋遊',
-'秋阴入井干' => '秋陰入井幹',
 '秋发' => '秋髮',
 '种丹妮' => '种丹妮',
 '种师中' => '种師中',
@@ -6965,6 +7000,7 @@ $zh2Hant = array(
 '秒表示' => '秒表示',
 '秒钟' => '秒鐘',
 '秤杆' => '秤桿',
+'秦沈客运' => '秦瀋客運',
 '移祸于' => '移禍於',
 '稀松' => '稀鬆',
 '棱台' => '稜台',
@@ -7010,6 +7046,7 @@ $zh2Hant = array(
 '谷雨' => '穀雨',
 '谷类' => '穀類',
 '谷食' => '穀食',
+'穆棱' => '穆稜',
 '穆罕默德历' => '穆罕默德曆',
 '穆罕默德历史' => '穆罕默德歷史',
 '积淀' => '積澱',
@@ -7035,7 +7072,6 @@ $zh2Hant = array(
 '窃钟掩耳' => '竊鐘掩耳',
 '立于' => '立於',
 '立范' => '立範',
-'站干岸儿' => '站乾岸兒',
 '童仆' => '童僕',
 '竞斗' => '競鬥',
 '竹几' => '竹几',
@@ -7043,6 +7079,7 @@ $zh2Hant = array(
 '竹签' => '竹籤',
 '竹席' => '竹蓆',
 '竹制' => '竹製',
+'竹溪县' => '竹谿縣',
 '笑里藏刀' => '笑裡藏刀',
 '第一出现' => '第一出現',
 '第一出現' => '第一出現',
@@ -7053,8 +7090,8 @@ $zh2Hant = array(
 '第三出局' => '第三出局',
 '第三出' => '第三齣',
 '第九出' => '第九齣',
-'第二出线' => '第二出線',
 '第二出線' => '第二出線',
+'第二出线' => '第二出線',
 '第二出' => '第二齣',
 '第五出局' => '第五出局',
 '第五出' => '第五齣',
@@ -7076,21 +7113,19 @@ $zh2Hant = array(
 '筑肥' => '筑肥',
 '筑西' => '筑西',
 '筑邦' => '筑邦',
-'筑陽' => '筑陽',
 '筑阳' => '筑陽',
+'筑陽' => '筑陽',
 '答复' => '答覆',
 '筵几' => '筵几',
 '个中原因' => '箇中原因',
-'个中奥妙' => '箇中奧妙',
-'个中奥秘' => '箇中奧秘',
+'个中奥' => '箇中奧',
 '个中好手' => '箇中好手',
 '个中强手' => '箇中強手',
-'个中消息' => '箇中消息',
 '个中滋味' => '箇中滋味',
 '个中玄机' => '箇中玄機',
 '个中理由' => '箇中理由',
-'个中讯息' => '箇中訊息',
-'个中资讯' => '箇中資訊',
+'个中翘楚' => '箇中翹楚',
+'个中道理' => '箇中道理',
 '个中高手' => '箇中高手',
 '个旧' => '箇舊',
 '算历' => '算曆',
@@ -7115,8 +7150,9 @@ $zh2Hant = array(
 '范金' => '範金',
 '简并' => '簡併',
 '简朴' => '簡樸',
-'ç°¡ç­\91ç¿\8e' => 'ç°¡ç­\91ç¿\8e',
+'ç®\80ç\9f­å\8f\91' => 'ç°¡ç\9f­ç\99¼',
 '简筑翎' => '簡筑翎',
+'簡筑翎' => '簡筑翎',
 '簸荡' => '簸蕩',
 '签幐' => '籤幐',
 '签押' => '籤押',
@@ -7198,13 +7234,12 @@ $zh2Hant = array(
 '绝于' => '絕於',
 '绞干' => '絞乾',
 '络腮胡' => '絡腮鬍',
-'給我干脆' => '給我干脆',
-'给我干脆' => '給我干脆',
 '给于' => '給於',
 '丝恩发怨' => '絲恩髮怨',
 '丝制' => '絲製',
 '丝发' => '絲髮',
 '绑扎' => '綁紮',
+'绥棱' => '綏稜',
 '捆扎' => '綑紮',
 '經有云' => '經有云',
 '经有云' => '經有云',
@@ -7213,6 +7248,9 @@ $zh2Hant = array(
 '维系' => '維繫',
 '绾发' => '綰髮',
 '纲鉴' => '綱鑑',
+'網球台' => '網球台',
+'网球台' => '網球台',
+'网站里' => '網站裡',
 '网里' => '網裡',
 '网志' => '網誌',
 '网游' => '網遊',
@@ -7237,6 +7275,7 @@ $zh2Hant = array(
 '缝里' => '縫裡',
 '缝制' => '縫製',
 '缩栗' => '縮慄',
+'缩短发' => '縮短發',
 '纵欲' => '縱慾',
 '纤夫' => '縴夫',
 '纤手' => '縴手',
@@ -7247,7 +7286,6 @@ $zh2Hant = array(
 '繁复' => '繁複',
 '繁钟' => '繁鐘',
 '绷扒吊拷' => '繃扒弔拷',
-'穗帏飘井干' => '繐幃飄井幹',
 '绕梁' => '繞樑',
 '绘制' => '繪製',
 '系上。' => '繫上。',
@@ -7273,6 +7311,7 @@ $zh2Hant = array(
 '系紧' => '繫緊',
 '系绳' => '繫繩',
 '系累' => '繫纍',
+'系舟' => '繫舟',
 '系船' => '繫船',
 '系辞' => '繫辭',
 '系鞋带' => '繫鞋帶',
@@ -7317,7 +7356,7 @@ $zh2Hant = array(
 '老干' => '老乾',
 '老仆' => '老僕',
 '老干部' => '老幹部',
-'老' => '老懞',
+'老' => '老懞',
 '老于' => '老於',
 '老爷钟' => '老爺鐘',
 '老姜' => '老薑',
@@ -7357,6 +7396,7 @@ $zh2Hant = array(
 '胜键' => '胜鍵',
 '胡云' => '胡云',
 '胡子昂' => '胡子昂',
+'胡杰' => '胡杰',
 '胡朴安' => '胡樸安',
 '胡里胡涂' => '胡裡胡塗',
 '胰脏' => '胰臟',
@@ -7419,6 +7459,7 @@ $zh2Hant = array(
 '自制能力' => '自制能力',
 '自于' => '自於',
 '自然数里' => '自然數裡',
+'自由钟' => '自由鐘',
 '自制' => '自製',
 '自觉自愿' => '自覺自愿',
 '自夸' => '自誇',
@@ -7431,8 +7472,8 @@ $zh2Hant = array(
 '台静农' => '臺靜農',
 '臻于' => '臻於',
 '舂谷' => '舂穀',
-'舉手表' => '舉手表',
 '举手表' => '舉手表',
+'舉手表' => '舉手表',
 '舊庄' => '舊庄',
 '旧历' => '舊曆',
 '旧历史' => '舊歷史',
@@ -7474,8 +7515,8 @@ $zh2Hant = array(
 '茂都淀' => '茂都澱',
 '范文同' => '范文同',
 '范文正公' => '范文正公',
-'范文瀾' => '范文瀾',
 '范文澜' => '范文瀾',
+'范文瀾' => '范文瀾',
 '范文照' => '范文照',
 '范文程' => '范文程',
 '范文芳' => '范文芳',
@@ -7484,8 +7525,8 @@ $zh2Hant = array(
 '范登堡' => '范登堡',
 '范賢惠' => '范賢惠',
 '范贤惠' => '范賢惠',
-'茅于轼' => '茅于軾',
 '茅于軾' => '茅于軾',
+'茅于轼' => '茅于軾',
 '茶几' => '茶几',
 '茶余' => '茶餘',
 '茶面' => '茶麵',
@@ -7502,12 +7543,12 @@ $zh2Hant = array(
 '莽荡' => '莽蕩',
 '菜干' => '菜乾',
 '菜坛' => '菜罈',
-'菜肴' => '菜',
+'菜肴' => '菜',
 '菠棱菜' => '菠稜菜',
 '菠萝干' => '菠蘿乾',
 '华严钟' => '華嚴鐘',
-'萬一只' => '萬一只',
 '万一只' => '萬一只',
+'萬一只' => '萬一只',
 '万个' => '萬個',
 '万周后' => '萬周後',
 '万天后' => '萬天後',
@@ -7589,8 +7630,8 @@ $zh2Hant = array(
 '熏风' => '薰風',
 '熏香' => '薰香',
 '苧悴' => '薴悴',
-'薴烯' => '薴烯',
 '苧烯' => '薴烯',
+'薴烯' => '薴烯',
 '借以' => '藉以',
 '借助' => '藉助',
 '借口' => '藉口',
@@ -7612,10 +7653,11 @@ $zh2Hant = array(
 '藤制' => '藤製',
 '药签' => '藥籤',
 '药面儿' => '藥麵兒',
-'苏昆' => '蘇崑',
 '苏崑' => '蘇崑',
+'苏昆' => '蘇崑',
 '苹果' => '蘋果',
 '苹果干' => '蘋果乾',
+'兰溪市' => '蘭谿市',
 '萝卜' => '蘿蔔',
 '萝卜干' => '蘿蔔乾',
 '虎须' => '虎鬚',
@@ -7634,6 +7676,7 @@ $zh2Hant = array(
 '蝎虎' => '蝎虎',
 '蝎蝎螫螫' => '蝎蝎螫螫',
 '蝎谮' => '蝎譖',
+'虾面' => '蝦麵',
 '虮虱相吊' => '蟣蝨相弔',
 '蛏干' => '蟶乾',
 '蚁后' => '蟻后',
@@ -7645,6 +7688,7 @@ $zh2Hant = array(
 '行事历' => '行事曆',
 '行事历史' => '行事歷史',
 '行凶' => '行兇',
+'行家里手' => '行家裡手',
 '行于' => '行於',
 '行百里者半于九十' => '行百里者半於九十',
 '卫后庄公' => '衛後莊公',
@@ -7698,6 +7742,7 @@ $zh2Hant = array(
 '冲头阵' => '衝頭陣',
 '冲风' => '衝風',
 '衡鉴' => '衡鑑',
+'表面包' => '表面包',
 '衷于' => '衷於',
 '袋杆' => '袋桿',
 '袋里' => '袋裡',
@@ -7716,9 +7761,9 @@ $zh2Hant = array(
 '夹裙' => '袷裙',
 '裁并' => '裁併',
 '裁制' => '裁製',
-'里手' => '裏手',
 '里水镇' => '裏水鎮',
 '里海' => '裏海',
+'里运河' => '裏運河',
 '补于' => '補於',
 '补注' => '補註',
 '装折' => '裝摺',
@@ -7771,6 +7816,13 @@ $zh2Hant = array(
 '复利' => '複利',
 '复印' => '複印',
 '复句' => '複句',
+'复合函数' => '複合函數',
+'复合制' => '複合制',
+'复合式' => '複合式',
+'复合弓' => '複合弓',
+'复合材' => '複合材',
+'复合物' => '複合物',
+'复合体' => '複合體',
 '复壁' => '複壁',
 '复姓' => '複姓',
 '复字键' => '複字鍵',
@@ -7846,6 +7898,7 @@ $zh2Hant = array(
 '触须' => '觸鬚',
 '言云' => '言云',
 '言大而夸' => '言大而夸',
+'言里' => '言裡',
 '言辩而确' => '言辯而确',
 '订制' => '訂製',
 '计划' => '計劃',
@@ -7855,6 +7908,7 @@ $zh2Hant = array(
 '托交' => '託交',
 '托人' => '託人',
 '托付' => '託付',
+'托克逊' => '託克遜',
 '托儿' => '託兒',
 '托古讽今' => '託古諷今',
 '托名' => '託名',
@@ -7876,8 +7930,10 @@ $zh2Hant = array(
 '托辞' => '託辭',
 '托运' => '託運',
 '托过' => '託過',
+'托里县' => '託里縣',
 '托附' => '託附',
 '许愿起经' => '許愿起經',
+'許聖杰' => '許聖杰',
 '许虬' => '許虬',
 '注上' => '註上',
 '注册' => '註冊',
@@ -7915,6 +7971,7 @@ $zh2Hant = array(
 '诔赞' => '誄讚',
 '夸下海口' => '誇下海口',
 '夸了' => '誇了',
+'夸人' => '誇人',
 '夸他' => '誇他',
 '夸你' => '誇你',
 '夸来夸去' => '誇來誇去',
@@ -7926,7 +7983,9 @@ $zh2Hant = array(
 '夸多斗靡' => '誇多鬥靡',
 '夸大' => '誇大',
 '夸她' => '誇她',
+'夸姣' => '誇姣',
 '夸官' => '誇官',
+'夸容' => '誇容',
 '夸张' => '誇張',
 '夸强说会' => '誇強說會',
 '夸得' => '誇得',
@@ -7951,6 +8010,7 @@ $zh2Hant = array(
 '夸辩' => '誇辯',
 '夸过' => '誇過',
 '夸饰' => '誇飾',
+'夸丽' => '誇麗',
 '志哀' => '誌哀',
 '志喜' => '誌喜',
 '志庆' => '誌慶',
@@ -7980,6 +8040,8 @@ $zh2Hant = array(
 '咨询' => '諮詢',
 '诸余' => '諸餘',
 '谋干' => '謀幹',
+'謝杰' => '謝杰',
+'谢杰' => '謝杰',
 '谢华后' => '謝華后',
 '谬采虚声' => '謬採虛聲',
 '谬赞' => '謬讚',
@@ -8023,6 +8085,7 @@ $zh2Hant = array(
 '豆干' => '豆乾',
 '豆腐干' => '豆腐乾',
 '竖起脊梁' => '豎起脊梁',
+'丰度' => '豐度',
 '丰滨' => '豐濱',
 '丰滨乡' => '豐濱鄉',
 '丰台' => '豐臺',
@@ -8043,8 +8106,8 @@ $zh2Hant = array(
 '賢后' => '賢后',
 '贤后' => '賢后',
 '卖断发' => '賣斷發',
-'赋范' => '賦范',
 '賦范' => '賦范',
+'赋范' => '賦范',
 '质数里' => '質數裡',
 '质朴' => '質樸',
 '赌后' => '賭后',
@@ -8065,6 +8128,7 @@ $zh2Hant = array(
 '赵治勋' => '趙治勳',
 '趱干' => '趲幹',
 '足于' => '足於',
+'足球台' => '足球台',
 '跌扑' => '跌扑',
 '路图里' => '路圖裡',
 '路签' => '路籤',
@@ -8112,6 +8176,7 @@ $zh2Hant = array(
 '辞汇' => '辭彙',
 '辫发' => '辮髮',
 '辩斗' => '辯鬥',
+'辰溪县' => '辰谿縣',
 '农历' => '農曆',
 '农历史' => '農歷史',
 '农民历' => '農民曆',
@@ -8196,11 +8261,12 @@ $zh2Hant = array(
 '造钟' => '造鐘',
 '连三并四' => '連三併四',
 '连采' => '連採',
+'连发式' => '連發式',
 '连系' => '連繫',
-'周游世界' => '週遊世界',
+'周游' => '週遊',
 '进两出' => '進兩出',
-'進制' => '進制',
 '进制' => '進制',
+'進制' => '進制',
 '逼并' => '逼併',
 '遇风后' => '遇風後',
 '游了' => '遊了',
@@ -8234,6 +8300,7 @@ $zh2Hant = array(
 '游目骋怀' => '遊目騁懷',
 '游程' => '遊程',
 '游丝' => '遊絲',
+'游美学务' => '遊美學務',
 '游兴' => '遊興',
 '游船' => '遊船',
 '游艇' => '遊艇',
@@ -8314,8 +8381,8 @@ $zh2Hant = array(
 '酒气冲天' => '酒氣衝天',
 '酒坛' => '酒罈',
 '酒肴' => '酒肴',
-'酒麹' => '酒麴',
 '酒曲' => '酒麴',
+'酒麹' => '酒麴',
 '酥松' => '酥鬆',
 '酸姜' => '酸薑',
 '醇朴' => '醇樸',
@@ -8417,6 +8484,7 @@ $zh2Hant = array(
 '金表露' => '金表露',
 '金表面' => '金表面',
 '金装玉里' => '金裝玉裡',
+'金溪县' => '金谿縣',
 '金链' => '金鍊',
 '金钟' => '金鐘',
 '金发' => '金髮',
@@ -8511,6 +8579,7 @@ $zh2Hant = array(
 '钟罩' => '鐘罩',
 '钟声' => '鐘聲',
 '钟腰' => '鐘腰',
+'钟花' => '鐘花',
 '钟螺' => '鐘螺',
 '钟行' => '鐘行',
 '钟表面' => '鐘表面',
@@ -8620,8 +8689,10 @@ $zh2Hant = array(
 '陳冲' => '陳冲',
 '陳士杰' => '陳士杰',
 '陈升' => '陳昇',
-'陳有后' => '陳有后',
 '陈有后' => '陳有后',
+'陳有后' => '陳有后',
+'陈杰' => '陳杰',
+'陳杰' => '陳杰',
 '陈炼' => '陳鍊',
 '陆游' => '陸遊',
 '阳春面' => '陽春麵',
@@ -8649,7 +8720,6 @@ $zh2Hant = array(
 '雕梁画栋' => '雕樑畫棟',
 '双折射' => '雙折射',
 '双折' => '雙摺',
-'双沟大曲' => '雙溝大麯',
 '双胜类' => '雙胜類',
 '双雕' => '雙鵰',
 '杂合面儿' => '雜合麵兒',
@@ -8671,7 +8741,7 @@ $zh2Hant = array(
 '雪里' => '雪裡',
 '雪里红' => '雪裡紅',
 '雪里蕻' => '雪裡蕻',
-'云吞面' => '雲吞麵',
+'云吞' => '雲吞',
 '云笈七签' => '雲笈七籤',
 '云游' => '雲遊',
 '云须' => '雲鬚',
@@ -8684,16 +8754,21 @@ $zh2Hant = array(
 '电子表格' => '電子表格',
 '电子钟' => '電子鐘',
 '电子钟表' => '電子鐘錶',
+'电梯里' => '電梯裡',
 '电波钟' => '電波鐘',
 '电码表' => '電碼表',
 '电冲' => '電衝',
+'电视台风' => '電視台風',
 '电表' => '電錶',
 '电钟' => '電鐘',
 '震栗' => '震慄',
 '霉气冲天' => '霉氣衝天',
+'沾化' => '霑化',
+'沾益' => '霑益',
 '雾里' => '霧裡',
 '露丑' => '露醜',
 '霁范' => '霽範',
+'灵昆' => '靈崑',
 '青山一发' => '青山一髮',
 '青霉' => '青黴',
 '非常准' => '非常準',
@@ -8716,12 +8791,11 @@ $zh2Hant = array(
 '面包起' => '面包起',
 '面包办' => '面包辦',
 '面店铺' => '面店鋪',
-'面條目' => '面條目',
 '面条目' => '面條目',
+'面條目' => '面條目',
 '面粉碎' => '面粉碎',
 '面粉红' => '面粉紅',
 '面食饭' => '面食飯',
-'面食面' => '面食麵',
 '鞋里' => '鞋裡',
 '鞣制' => '鞣製',
 '秋千' => '鞦韆',
@@ -8737,8 +8811,8 @@ $zh2Hant = array(
 '頁面' => '頁面',
 '页面' => '頁面',
 '顶凶' => '頂兇',
-'顶多' => '頂多',
 '頂多' => '頂多',
+'顶多' => '頂多',
 '项链' => '項鍊',
 '顺于' => '順於',
 '顺钟向' => '順鐘向',
@@ -8749,7 +8823,6 @@ $zh2Hant = array(
 '预报不准' => '預報不準',
 '预制' => '預製',
 '领袖欲' => '領袖慾',
-'头儿干' => '頭兒幹',
 '头里' => '頭裡',
 '头长发' => '頭長髮',
 '头发' => '頭髮',
@@ -8854,6 +8927,7 @@ $zh2Hant = array(
 '余子' => '餘子',
 '余存' => '餘存',
 '余孽' => '餘孽',
+'余干' => '餘干',
 '余年' => '餘年',
 '余式' => '餘式',
 '余弦' => '餘弦',
@@ -8876,6 +8950,7 @@ $zh2Hant = array(
 '余殃' => '餘殃',
 '余毒' => '餘毒',
 '余气' => '餘氣',
+'余江' => '餘江',
 '余波' => '餘波',
 '余温' => '餘溫',
 '余泽' => '餘澤',
@@ -8924,7 +8999,6 @@ $zh2Hant = array(
 '馄饨面' => '餛飩麵',
 '馆谷' => '館穀',
 '馆里' => '館裡',
-'餵驴' => '餵驢',
 '饥寒' => '饑寒',
 '饥民' => '饑民',
 '饥渴' => '饑渴',
@@ -8945,8 +9019,8 @@ $zh2Hant = array(
 '马格里布' => '馬格里布',
 '驻扎' => '駐紮',
 '骀荡' => '駘蕩',
-'騰格里' => '騰格里',
 '腾格里' => '騰格里',
+'騰格里' => '騰格里',
 '腾涌' => '騰湧',
 '腾冲' => '騰衝',
 '惊栗' => '驚慄',
@@ -8973,6 +9047,7 @@ $zh2Hant = array(
 '发乳' => '髮乳',
 '发光可鉴' => '髮光可鑑',
 '发匪' => '髮匪',
+'发及腰' => '髮及腰',
 '发型' => '髮型',
 '发夹' => '髮夾',
 '发妻' => '髮妻',
@@ -8983,6 +9058,7 @@ $zh2Hant = array(
 '发廊' => '髮廊',
 '发式' => '髮式',
 '发引千钧' => '髮引千鈞',
+'发披肩' => '髮披肩',
 '发指' => '髮指',
 '发卷' => '髮捲',
 '发根' => '髮根',
@@ -9111,6 +9187,7 @@ $zh2Hant = array(
 '斗犀台' => '鬥犀臺',
 '斗犬' => '鬥犬',
 '斗狠' => '鬥狠',
+'斗兽' => '鬥獸',
 '斗叠' => '鬥疊',
 '斗百草' => '鬥百草',
 '斗眼' => '鬥眼',
@@ -9140,6 +9217,7 @@ $zh2Hant = array(
 '斗鸭' => '鬥鴨',
 '斗鹌鹑' => '鬥鵪鶉',
 '斗丽' => '鬥麗',
+'斗龙' => '鬥龍',
 '闹表' => '鬧錶',
 '闹钟' => '鬧鐘',
 '哄动' => '鬨動',
@@ -9189,13 +9267,14 @@ $zh2Hant = array(
 '鬼谷子' => '鬼谷子',
 '魂牵梦系' => '魂牽夢繫',
 '魏征' => '魏徵',
-'魔杰座' => '魔杰座',
 '魔表' => '魔錶',
 '鱼干' => '魚乾',
 '鱼松' => '魚鬆',
-'鲜于枢' => '鮮于樞',
 '鮮于樞' => '鮮于樞',
+'鲜于枢' => '鮮于樞',
 '鲸须' => '鯨鬚',
+'鳥栖' => '鳥栖',
+'鸟栖市' => '鳥栖市',
 '鳳凰于飛' => '鳳凰于飛',
 '凤梨干' => '鳳梨乾',
 '鸣钟' => '鳴鐘',
@@ -9206,6 +9285,7 @@ $zh2Hant = array(
 '雕悍' => '鵰悍',
 '雕翎' => '鵰翎',
 '雕鹗' => '鵰鶚',
+'鹤峰县' => '鶴峯縣',
 '鹤吊' => '鶴弔',
 '鹤发' => '鶴髮',
 '鸾鉴' => '鸞鑑',
@@ -9242,14 +9322,16 @@ $zh2Hant = array(
 '盐余' => '鹽餘',
 '鹿場里' => '鹿場里',
 '丽于' => '麗於',
+'麟游' => '麟遊',
+'曲酒' => '麯酒',
 '曲尘' => '麴塵',
 '曲櫱' => '麴櫱',
 '曲秀才' => '麴秀才',
 '曲车' => '麴車',
 '曲道士' => '麴道士',
 '曲钱' => '麴錢',
-'麹霉' => '麴黴',
 '曲霉' => '麴黴',
+'麹霉' => '麴黴',
 '面人儿' => '麵人兒',
 '面价' => '麵價',
 '面包' => '麵包',
@@ -9280,7 +9362,11 @@ $zh2Hant = array(
 '麻将席' => '麻將蓆',
 '麻酱面' => '麻醬麵',
 '黄干黑瘦' => '黃乾黑瘦',
+'黄岩区' => '黃巖區',
+'黄岩县' => '黃巖縣',
 '黄历' => '黃曆',
+'黃杰' => '黃杰',
+'黄杰' => '黃杰',
 '黄历史' => '黃歷史',
 '黃詩杰' => '黃詩杰',
 '黄诗杰' => '黃詩杰',
@@ -9291,14 +9377,17 @@ $zh2Hant = array(
 '黄发' => '黃髮',
 '黄曲毒素' => '黃麴毒素',
 '黎克特制' => '黎克特制',
-'黎吉雲' => '黎吉雲',
 '黎吉云' => '黎吉雲',
+'黎吉雲' => '黎吉雲',
 '黑奴吁天录' => '黑奴籲天錄',
+'黑干将' => '黑幹將',
+'黑长发' => '黑長髮',
 '黑发' => '黑髮',
 '点札' => '點劄',
 '点半钟' => '點半鐘',
 '点多钟' => '點多鐘',
 '点里' => '點裡',
+'点赞' => '點讚',
 '点里程' => '點里程',
 '点钟' => '點鐘',
 '霉毒' => '黴毒',
@@ -9309,6 +9398,7 @@ $zh2Hant = array(
 '鼓里' => '鼓裡',
 '鼓噪' => '鼓譟',
 '冬冬鼓' => '鼕鼕鼓',
+'咚咚鼓' => '鼕鼕鼓',
 '鼠曲草' => '鼠麴草',
 '鼻梁儿' => '鼻梁兒',
 '鼻梁' => '鼻樑',
@@ -9318,6 +9408,7 @@ $zh2Hant = array(
 '齿落发白' => '齒落髮白',
 '齿发' => '齒髮',
 '出儿' => '齣兒',
+'龙岩' => '龍巖',
 '龙卷' => '龍捲',
 '龙眼干' => '龍眼乾',
 '龙须' => '龍鬚',
@@ -9325,13 +9416,13 @@ $zh2Hant = array(
 '龙斗虎伤' => '龍鬥虎傷',
 '龜山庄' => '龜山庄',
 '龟鉴' => '龜鑑',
+',个中' => ',箇中',
 );
 
 $zh2Hans = array(
 '㑯' => '㑔',
 '㑳' => '㑇',
 '㑶' => '㐹',
-'㑺' => '俊',
 '㒓' => '𠉂',
 '㒺' => '罔',
 '㓂' => '寇',
@@ -9359,10 +9450,8 @@ $zh2Hans = array(
 '㢝' => '𢋈',
 '㤙' => '恩',
 '㥦' => '惬',
-'㥫' => '惇',
 '㥮' => '㤘',
 '㦎' => '𢛯',
-'㧱' => '拿',
 '㨗' => '捷',
 '㨪' => '晃',
 '㨿' => '据',
@@ -9489,7 +9578,6 @@ $zh2Hans = array(
 '來' => '来',
 '侖' => '仑',
 '侶' => '侣',
-'侷' => '局',
 '俁' => '俣',
 '係' => '系',
 '俔' => '伣',
@@ -9766,7 +9854,6 @@ $zh2Hans = array(
 '執' => '执',
 '堅' => '坚',
 '堊' => '垩',
-'堖' => '垴',
 '堝' => '埚',
 '堯' => '尧',
 '報' => '报',
@@ -9776,7 +9863,6 @@ $zh2Hans = array(
 '塏' => '垲',
 '塒' => '埘',
 '塗' => '涂',
-'塚' => '冢',
 '塟' => '葬',
 '塢' => '坞',
 '塤' => '埙',
@@ -9933,7 +10019,6 @@ $zh2Hans = array(
 '嶧' => '峄',
 '嶨' => '峃',
 '嶮' => '崄',
-'嶴' => '岙',
 '嶸' => '嵘',
 '嶺' => '岭',
 '嶼' => '屿',
@@ -10075,7 +10160,6 @@ $zh2Hans = array(
 '應' => '应',
 '懌' => '怿',
 '懍' => '懔',
-'懞' => '蒙',
 '懟' => '怼',
 '懣' => '懑',
 '懨' => '恹',
@@ -10281,8 +10365,6 @@ $zh2Hans = array(
 '棧' => '栈',
 '棲' => '栖',
 '棶' => '梾',
-'椀' => '碗',
-'椉' => '乘',
 '椏' => '桠',
 '椗' => '碇',
 '椲' => '㭏',
@@ -10446,7 +10528,6 @@ $zh2Hans = array(
 '湞' => '浈',
 '湧' => '涌',
 '湯' => '汤',
-'湻' => '淳',
 '湼' => '涅',
 '溈' => '沩',
 '準' => '准',
@@ -10794,7 +10875,6 @@ $zh2Hans = array(
 '矚' => '瞩',
 '矯' => '矫',
 '砲' => '炮',
-'硃' => '朱',
 '硜' => '硁',
 '硤' => '硖',
 '硨' => '砗',
@@ -11426,7 +11506,6 @@ $zh2Hans = array(
 '衊' => '蔑',
 '術' => '术',
 '衕' => '同',
-'衖' => '弄',
 '衚' => '胡',
 '衛' => '卫',
 '衝' => '冲',
@@ -11489,7 +11568,6 @@ $zh2Hans = array(
 '覽' => '览',
 '覿' => '觌',
 '觀' => '观',
-'觔' => '斤',
 '觝' => '抵',
 '觴' => '觞',
 '觶' => '觯',
@@ -11920,7 +11998,6 @@ $zh2Hans = array(
 '適' => '适',
 '遯' => '遁',
 '遲' => '迟',
-'遶' => '绕',
 '遷' => '迁',
 '選' => '选',
 '遺' => '遗',
@@ -12380,7 +12457,6 @@ $zh2Hans = array(
 '靭' => '韧',
 '靱' => '韧',
 '鞀' => '鼗',
-'鞌' => '鞍',
 '鞏' => '巩',
 '鞝' => '绱',
 '鞦' => '秋',
@@ -12528,6 +12604,7 @@ $zh2Hans = array(
 '餭' => '𫗮',
 '餱' => '糇',
 '餳' => '饧',
+'餵' => '喂',
 '餶' => '馉',
 '餷' => '馇',
 '餸' => '𩠌',
@@ -12582,7 +12659,6 @@ $zh2Hans = array(
 '駧' => '𩧲',
 '駩' => '𩧴',
 '駭' => '骇',
-'駮' => '驳',
 '駰' => '骃',
 '駱' => '骆',
 '駶' => '𩧺',
@@ -12621,7 +12697,7 @@ $zh2Hans = array(
 '驁' => '骜',
 '驂' => '骖',
 '驃' => '骠',
-'驄' => '𩨂',
+'驄' => '',
 '驅' => '驱',
 '驊' => '骅',
 '驋' => '𩧯',
@@ -12649,10 +12725,8 @@ $zh2Hans = array(
 '體' => '体',
 '髕' => '髌',
 '髖' => '髋',
-'髣' => '仿',
 '髥' => '髯',
 '髮' => '发',
-'髴' => '佛',
 '鬀' => '剃',
 '鬆' => '松',
 '鬉' => '鬃',
@@ -12665,7 +12739,6 @@ $zh2Hans = array(
 '鬨' => '哄',
 '鬩' => '阋',
 '鬪' => '斗',
-'鬭' => '斗',
 '鬮' => '阄',
 '鬰' => '郁',
 '鬱' => '郁',
@@ -12944,7 +13017,7 @@ $zh2Hans = array(
 '鼇' => '鳌',
 '鼈' => '鳖',
 '鼉' => '鼍',
-'é¼\95' => 'å\86¬',
+'é¼\95' => 'å\92\9a',
 '鼴' => '鼹',
 '齊' => '齐',
 '齋' => '斋',
@@ -12977,43 +13050,30 @@ $zh2Hans = array(
 '龜' => '龟',
 '龭' => '𩨎',
 '龯' => '𨱆',
-'𠇮' => '命',
-'𠌂' => '伞',
 '𠌥' => '𠆿',
 '𠏢' => '𠉗',
 '𠕂' => '再',
 '𠕅' => '再',
-'𠖇' => '冥',
 '𠞆' => '𠛆',
 '𠞰' => '剿',
 '𠠎' => '𠚳',
-'𠪾' => '历',
-'𠴟' => '咩',
-'𠻳' => '嗽',
 '𡄔' => '𠴢',
 '𡄣' => '𠵸',
 '𡅏' => '𠲥',
-'𡐨' => '野',
 '𡑭' => '𡋗',
 '𡓾' => '𡋀',
 '𡚁' => '弊',
 '𡞵' => '㛟',
 '𡠹' => '㛿',
 '𡢃' => '㛠',
-'𡨘' => '冤',
 '𡨥' => '寇',
-'𡬶' => '寻',
 '𡮉' => '𡭜',
 '𡮣' => '𡭬',
 '𡻕' => '岁',
 '𡾱' => '㟜',
 '𢣚' => '𢘝',
 '𢣭' => '𢘞',
-'𢬸' => '括',
-'𢭏' => '捣',
-'𢮥' => '操',
 '𢶫' => '𢫞',
-'𢷬' => '捣',
 '𢷮' => '𢫊',
 '𢹿' => '𢬦',
 '𣙎' => '㭣',
@@ -13030,20 +13090,15 @@ $zh2Hans = array(
 '𤨏' => '琐',
 '𤪺' => '㻘',
 '𤫩' => '㻏',
-'𤰜' => '亩',
 '𤱈' => '亩',
-'𤱊' => '留',
 '𤳸' => '𤳄',
 '𤸫' => '𤶧',
 '𤺥' => '瘩',
-'𥄨' => '瞅',
 '𥌃' => '𥅘',
 '𥕥' => '𥐰',
 '𥖅' => '𥐯',
 '𥢢' => '䅪',
-'𥦗' => '窗',
 '𥨐' => '𥧂',
-'𥲻' => '纂',
 '𥵃' => '𥱔',
 '𥵊' => '𥭉',
 '𥸠' => '𥮋',
@@ -13051,16 +13106,12 @@ $zh2Hans = array(
 '𥽖' => '𥺇',
 '𥿊' => '𦈈',
 '𦂅' => '𦈒',
-'𦂳' => '紧',
-'𦃂' => '紧',
 '𦃄' => '𦈗',
-'𦉆' => '碴',
 '𦊱' => '挂',
 '𦍑' => '羌',
 '𦕈' => '眇',
 '𦢈' => '𣍨',
 '𦣎' => '𦟗',
-'𦪙' => '䑽',
 '𦪽' => '𦨩',
 '𦵏' => '葬',
 '𧔥' => '𧒭',
@@ -13182,22 +13233,21 @@ $zh2Hans = array(
 '』' => '’',
 '「' => '“',
 '「' => '“',
-'」' => '”',
 '」' => '”',
+'」' => '”',
 '。陞' => '。升',
 '《易乾' => '《易乾',
 '一釐' => '一厘',
-'一口鍾' => '一口钟',
-'一鍾' => '一钟',
 '上昇' => '上升',
+'不穀' => '不穀',
 '專著' => '专著',
-'世界鍾' => '世界钟',
-'喪鍾' => '丧钟',
 '乾一坛' => '乾一坛',
 '乾一壇' => '乾一坛',
-'乾一组' => '乾一组',
 '乾一組' => '乾一组',
+'乾一组' => '乾一组',
 '乾上乾下' => '乾上乾下',
+'乾东' => '乾东',
+'乾東' => '乾东',
 '乾為天' => '乾为天',
 '乾為陽' => '乾为阳',
 '乾九' => '乾九',
@@ -13212,27 +13262,27 @@ $zh2Hans = array(
 '乾光' => '乾光',
 '乾兴' => '乾兴',
 '乾興' => '乾兴',
-'乾岡' => '乾冈',
 '乾冈' => '乾冈',
+'乾岡' => '乾冈',
 '乾刘' => '乾刘',
 '乾劉' => '乾刘',
 '乾刚' => '乾刚',
 '乾剛' => '乾刚',
-'乾務' => '乾务',
 '乾务' => '乾务',
+'乾務' => '乾务',
 '乾化' => '乾化',
 '乾卦' => '乾卦',
 '乾县' => '乾县',
 '乾縣' => '乾县',
 '乾台' => '乾台',
 '乾吉' => '乾吉',
-'乾啟' => '乾启',
 '乾启' => '乾启',
+'乾啟' => '乾启',
 '乾命' => '乾命',
 '乾和' => '乾和',
 '乾嘉' => '乾嘉',
-'乾圖' => '乾图',
 '乾图' => '乾图',
+'乾圖' => '乾图',
 '乾坤' => '乾坤',
 '乾城' => '乾城',
 '乾基' => '乾基',
@@ -13252,8 +13302,8 @@ $zh2Hans = array(
 '乾巛' => '乾巛',
 '乾州' => '乾州',
 '乾式' => '乾式',
-'乾錄' => '乾录',
 '乾录' => '乾录',
+'乾錄' => '乾录',
 '乾律' => '乾律',
 '乾德' => '乾德',
 '乾心' => '乾心',
@@ -13266,17 +13316,17 @@ $zh2Hans = array(
 '乾旦' => '乾旦',
 '乾明' => '乾明',
 '乾昧' => '乾昧',
-'乾暉' => '乾晖',
 '乾晖' => '乾晖',
+'乾暉' => '乾晖',
 '乾景' => '乾景',
 '乾晷' => '乾晷',
 '乾曜' => '乾曜',
-'乾構' => '乾构',
 '乾构' => '乾构',
+'乾構' => '乾构',
 '乾枢' => '乾枢',
 '乾樞' => '乾枢',
-'乾棟' => '乾栋',
 '乾栋' => '乾栋',
+'乾棟' => '乾栋',
 '乾步' => '乾步',
 '乾氏' => '乾氏',
 '乾沓和' => '乾沓和',
@@ -13288,6 +13338,7 @@ $zh2Hans = array(
 '乾潭' => '乾潭',
 '乾灵' => '乾灵',
 '乾靈' => '乾灵',
+'乾生元' => '乾生元',
 '乾男' => '乾男',
 '乾皋' => '乾皋',
 '乾盛世' => '乾盛世',
@@ -13295,8 +13346,8 @@ $zh2Hans = array(
 '乾祐' => '乾祐',
 '乾神' => '乾神',
 '乾穹' => '乾穹',
-'乾竇' => '乾窦',
 '乾窦' => '乾窦',
+'乾竇' => '乾窦',
 '乾竺' => '乾竺',
 '乾笃' => '乾笃',
 '乾篤' => '乾笃',
@@ -13307,14 +13358,14 @@ $zh2Hans = array(
 '乾红' => '乾红',
 '乾綱' => '乾纲',
 '乾纲' => '乾纲',
-'乾纽' => '乾纽',
 '乾紐' => '乾纽',
-'ä¹¾ç»\9c' => 'ä¹¾ç»\9c',
+'乾纽' => '乾纽',
 '乾絡' => '乾络',
+'乾络' => '乾络',
 '乾統' => '乾统',
 '乾统' => '乾统',
-'乾维' => '乾维',
 '乾維' => '乾维',
+'乾维' => '乾维',
 '乾罗' => '乾罗',
 '乾羅' => '乾罗',
 '乾花' => '乾花',
@@ -13325,18 +13376,18 @@ $zh2Hans = array(
 '乾西' => '乾西',
 '乾覆' => '乾覆',
 '乾象' => '乾象',
-'乾象歷' => '乾象历',
 '乾象历' => '乾象历',
+'乾象歷' => '乾象历',
 '乾貞' => '乾贞',
 '乾贞' => '乾贞',
-'乾贵士' => '乾贵士',
 '乾貴士' => '乾贵士',
+'乾贵士' => '乾贵士',
 '乾貺' => '乾贶',
 '乾贶' => '乾贶',
 '乾車' => '乾车',
 '乾车' => '乾车',
-'乾轴' => '乾轴',
 '乾軸' => '乾轴',
+'乾轴' => '乾轴',
 '乾通' => '乾通',
 '乾造' => '乾造',
 '乾道' => '乾道',
@@ -13355,25 +13406,27 @@ $zh2Hans = array(
 '乾風' => '乾风',
 '乾风' => '乾风',
 '乾首' => '乾首',
-'乾马' => '乾马',
 '乾馬' => '乾马',
+'乾马' => '乾马',
 '乾鵠' => '乾鹄',
 '乾鹄' => '乾鹄',
 '乾鵲' => '乾鹊',
 '乾鹊' => '乾鹊',
-'乾龙' => '乾龙',
 '乾龍' => '乾龙',
+'乾龙' => '乾龙',
 '乾,健也' => '乾,健也',
 '乾,天也' => '乾,天也',
 '五箇山' => '五箇山',
+'什么' => '什么',
 '仇讎' => '仇雠',
 '以微知著' => '以微知著',
-'以莛叩鍾' => '以莛叩钟',
 '仰屋著書' => '仰屋著书',
 '彷彿' => '仿佛',
 '夥計' => '伙计',
 '佛頭著糞' => '佛头著粪',
 '偵蒐' => '侦搜',
+'倖一郎' => '倖一郎',
+'倖田' => '倖田',
 '候覆' => '候复',
 '藉助' => '借助',
 '藉口' => '借口',
@@ -13384,19 +13437,18 @@ $zh2Hans = array(
 '藉由' => '借由',
 '藉端' => '借端',
 '藉詞' => '借词',
+'傒倖' => '傒倖',
 '先名後姓' => '先名后姓',
+'兒寬' => '兒宽',
 '六么' => '六幺',
 '蘭質薰心' => '兰质薰心',
 '內聯陞' => '内联升',
 '憑藉' => '凭借',
-'分鍾' => '分钟',
 '初昇' => '初升',
 '利欲薰心' => '利欲薰心',
-'刻鍾' => '刻钟',
 '剋了' => '剋了',
 '剋架' => '剋架',
 '剖釐' => '剖厘',
-'千鍾' => '千钟',
 '陞為' => '升为',
 '陞了' => '升了',
 '昇仙' => '升仙',
@@ -13412,7 +13464,6 @@ $zh2Hans = array(
 '昇降' => '升降',
 '卓著' => '卓著',
 '博和託' => '博和讬',
-'卷舌' => '卷舌',
 '歷陞' => '历升',
 '釐改' => '厘改',
 '釐整' => '厘整',
@@ -13421,14 +13472,11 @@ $zh2Hans = array(
 '釐清' => '厘清',
 '釐訂' => '厘订',
 '釐革' => '厘革',
-'原子鍾' => '原子钟',
 '原著' => '原著',
 '又陞' => '又升',
 '反反覆覆' => '反反复复',
 '反覆' => '反复',
-'古鍾' => '古钟',
 '可穿著' => '可穿著',
-'台鍾' => '台钟',
 '吃衣著飯' => '吃衣著饭',
 '合著' => '合著',
 '同陞和' => '同升和',
@@ -13439,41 +13487,40 @@ $zh2Hans = array(
 '回覆' => '回复',
 '土著' => '土著',
 '坤乾' => '坤乾',
-'塔鍾' => '塔钟',
 '墨瀋' => '墨渖',
-'壁鍾' => '壁钟',
 '覆查' => '复查',
 '覆核' => '复核',
 '覆检' => '复检',
 '復甦' => '复苏',
-'多鍾' => '多钟',
+'多么' => '多么',
 '大麴' => '大曲',
-'大鍾' => '大钟',
-'天道為乾' => '天道为乾',
 '天道为乾' => '天道为乾',
+'天道為乾' => '天道为乾',
 '奧區' => '奧区',
 '如瀋' => '如渖',
 '姓么' => '姓幺',
 '子餘' => '子馀',
 '字乾生' => '字乾生',
-'孫乾' => '孙乾',
 '孙乾' => '孙乾',
-'å®\8bé\8d¾å\9c\8b' => 'å®\8bé\92\9få\9b½',
+'å­«ä¹¾' => 'å­\99ä¹¾',
 '宏碁' => '宏碁',
 '官陞' => '官升',
 '將軍抽俥' => '将军抽俥',
 '將軍抽車' => '将军抽車',
 '爾冬陞' => '尔冬升',
 '尼乾陀' => '尼乾陀',
+'侷促' => '局促',
 '跼促' => '局促',
+'侷限' => '局限',
 '跼限' => '局限',
-'山崩é\8d¾æ\87\89' => '山崩é\92\9fåº\94',
-'å´\94ç§\80é\8d¾' => 'å´\94ç§\80é\92\9f',
+'å±±å´\8eé\97\87é½\8b' => 'å±±å´\8eé\97\87æ\96\8b',
+'å²³è¨\97' => '岳讬',
 '巨著' => '巨著',
 '乾乾淨淨' => '干干净净',
 '乾乾脆脆' => '干干脆脆',
 '乾泉水' => '干泉水',
 '年陞' => '年升',
+'么九' => '幺九',
 '么二三' => '幺二三',
 '么元' => '幺元',
 '么鳳' => '幺凤',
@@ -13482,15 +13529,18 @@ $zh2Hans = array(
 '么廝' => '幺厮',
 '幺厮' => '幺厮',
 '么叔' => '幺叔',
+'么女' => '幺女',
 '么媽' => '幺妈',
 '么妹' => '幺妹',
 '么姓' => '幺姓',
 '么姨' => '幺姨',
 '么娘' => '幺娘',
-'幺孃' => '幺娘',
 '么孃' => '幺娘',
+'幺孃' => '幺娘',
+'么子' => '幺子',
 '么小' => '幺小',
 '么弟' => '幺弟',
+'么正' => '幺正',
 '么氏' => '幺氏',
 '么爸' => '幺爸',
 '么爹' => '幺爹',
@@ -13498,22 +13548,20 @@ $zh2Hans = array(
 '么舅' => '幺舅',
 '么蛾子' => '幺蛾子',
 '么謙' => '幺谦',
-'么麽' => '幺麽',
 '么麼' => '幺麽',
+'么麽' => '幺麽',
 '么麽小丑' => '幺麽小丑',
 '慶餘' => '庆馀',
-'座鍾' => '座钟',
 '康乾' => '康乾',
-'張法乾' => '张法乾',
 '张法乾' => '张法乾',
-'張鍾英' => '张钟英',
+'張法乾' => '张法乾',
 '彰明較著' => '彰明较著',
 '待覆' => '待复',
 '後姓' => '後姓',
 '慫慂' => '怂恿',
+'怎么' => '怎么',
 '恩威並著' => '恩威并著',
 '噁心' => '恶心',
-'懸鍾' => '悬钟',
 '情蒐' => '情搜',
 '情鍾' => '情钟',
 '惏悷' => '惏悷',
@@ -13526,6 +13574,7 @@ $zh2Hans = array(
 '扞格' => '扞格',
 '執著' => '执著',
 '批覆' => '批复',
+'承乾' => '承乾',
 '拉鍊' => '拉链',
 '拙著' => '拙著',
 '拚命' => '拚命',
@@ -13533,9 +13582,7 @@ $zh2Hans = array(
 '拚死' => '拚死',
 '拾瀋' => '拾渖',
 '拿破崙' => '拿破仑',
-'掛鍾' => '挂钟',
 '挨剋' => '挨剋',
-'掩耳盜鍾' => '掩耳盗钟',
 '提昇' => '提升',
 '蒐錄' => '搜录',
 '蒐索' => '搜索',
@@ -13544,17 +13591,15 @@ $zh2Hans = array(
 '蒐證' => '搜证',
 '蒐購' => '搜购',
 '蒐輯' => '搜辑',
-'蒐采' => '搜采',
 '蒐採' => '搜采',
+'蒐采' => '搜采',
 '蒐集' => '搜集',
 '搥打' => '搥打',
 '搥胸頓足' => '搥胸顿足',
-'擺鍾' => '摆钟',
-'撞鍾' => '撞钟',
 '撰著' => '撰著',
 '效果顯著' => '效果显著',
-'敲鍾' => '敲钟',
 '文徵明' => '文徵明',
+'觔斗' => '斤斗',
 '新著' => '新著',
 '於世成' => '於世成',
 '於之瑩' => '於之莹',
@@ -13572,10 +13617,10 @@ $zh2Hans = array(
 '於志賀' => '於志贺',
 '於志贺' => '於志贺',
 '於戲' => '於戏',
-'於梨華' => '於梨华',
 '於梨华' => '於梨华',
+'於梨華' => '於梨华',
 '於氏' => '於氏',
-'於潜县' => '於潜县',
+'於潜' => '於潜',
 '於潛縣' => '於潜县',
 '於祥玉' => '於祥玉',
 '於菟' => '於菟',
@@ -13583,7 +13628,6 @@ $zh2Hans = array(
 '於除鞬' => '於除鞬',
 '旋乾轉坤' => '旋乾转坤',
 '旋乾转坤' => '旋乾转坤',
-'時鍾' => '时钟',
 '曠若發矇' => '旷若发矇',
 '崑崙' => '昆仑',
 '崑劇' => '昆剧',
@@ -13593,10 +13637,10 @@ $zh2Hans = array(
 '崑蘇' => '昆苏',
 '崑調' => '昆调',
 '易·乾' => '易·乾',
-'易经·乾' => '易经·乾',
 '易經·乾' => '易经·乾',
-'易经乾' => '易经乾',
+'易经·乾' => '易经·乾',
 '易經乾' => '易经乾',
+'易经乾' => '易经乾',
 '昭著' => '昭著',
 '顯著' => '显著',
 '顯著地' => '显著地',
@@ -13606,17 +13650,17 @@ $zh2Hans = array(
 '顯著效果' => '显著效果',
 '顯著特點' => '显著特点',
 '晉陞' => '晋升',
-'晚鍾' => '晚钟',
-'晨鍾' => '晨钟',
 '暗闇' => '暗闇',
 '麴黴' => '曲霉',
-'曾運乾' => '曾运乾',
 '曾运乾' => '曾运乾',
+'曾運乾' => '曾运乾',
 '月陞' => '月升',
 '朝乾夕惕' => '朝乾夕惕',
-'朝鍾暮鼓' => '朝钟暮鼓',
 '朱有燉' => '朱有燉',
 '朱淛' => '朱淛',
+'硃砂' => '朱砂',
+'硃紅' => '朱红',
+'硃色' => '朱色',
 '朴於宇同' => '朴於宇同',
 '李乾德' => '李乾德',
 '李乾順' => '李乾顺',
@@ -13624,18 +13668,14 @@ $zh2Hans = array(
 '李澤鉅' => '李泽钜',
 '李祕' => '李祕',
 '李譔' => '李譔',
-'李鍾原' => '李钟原',
-'林鍾' => '林钟',
-'柳诒徵' => '柳诒徵',
 '柳詒徵' => '柳诒徵',
+'柳诒徵' => '柳诒徵',
 '校讎' => '校雠',
 '楈枒' => '楈枒',
 '樊於期' => '樊於期',
-'橡椀' => '橡椀',
-'此鍾' => '此钟',
 '殘瀋' => '残渖',
-'慇懃' => '殷勤',
 '慇勤' => '殷勤',
+'慇懃' => '殷勤',
 '比較顯著' => '比较显著',
 '毫釐' => '毫厘',
 '氆氌' => '氆氌',
@@ -13647,9 +13687,7 @@ $zh2Hans = array(
 '沈默' => '沉默',
 '氾濫' => '泛滥',
 '洗鍊' => '洗练',
-'洪鍾' => '洪钟',
 '瀋液' => '渖液',
-'點鍾' => '点钟',
 '薰習' => '熏习',
 '薰心' => '熏心',
 '薰沐' => '熏沐',
@@ -13660,36 +13698,32 @@ $zh2Hans = array(
 '王道乾' => '王道乾',
 '王餘魚' => '王馀鱼',
 '甚夥' => '甚夥',
-'生物鍾' => '生物钟',
-'電鍾' => '电钟',
-'男為乾' => '男为乾',
 '男为乾' => '男为乾',
-'男爲乾' => '男为乾',
-'男性爲乾' => '男性为乾',
-'男性為乾' => '男性为乾',
+'男為乾' => '男为乾',
 '男性为乾' => '男性为乾',
+'男性為乾' => '男性为乾',
 '療效顯著' => '疗效显著',
 '白瀋' => '白渖',
 '皁保' => '皁保',
 '目劄' => '目劄',
 '直昇' => '直升',
 '睹微知著' => '睹微知著',
-'瞭臺' => '瞭台',
 '瞭台' => '瞭台',
+'瞭臺' => '瞭台',
 '瞭望' => '瞭望',
 '矇眬' => '矇眬',
 '矇矓' => '矇眬',
 '石碁' => '石碁',
 '石碁鎮' => '石碁镇',
-'石英鍾' => '石英钟',
-'石鍾乳' => '石钟乳',
+'碩託' => '硕讬',
 '鹼菜' => '硷菜',
-'碁聖' => '碁圣',
 '碁圣' => '碁圣',
+'碁聖' => '碁圣',
 '碁所' => '碁所',
 '祕宜' => '祕宜',
-'ç§\92é\8d¾' => 'ç§\92é\92\9f',
+'ç©\80æ\97¦' => 'ç©\80æ\97¦',
 '穀梁' => '穀梁',
+'穀水' => '穀水',
 '穿著者' => '穿着者',
 '竹昇' => '竹升',
 '答覆' => '答复',
@@ -13697,10 +13731,11 @@ $zh2Hans = array(
 '米瀋' => '米渖',
 '餬口' => '糊口',
 '繙㠾' => '繙㠾',
+'遶境' => '绕境',
 '線國安' => '缐国安',
 '線姓' => '缐姓',
 '編著' => '编著',
-'編鍾' => '编钟',
+'老么' => '老幺',
 '肉乾乾' => '肉干干',
 '肘手鍊足' => '肘手链足',
 '甦醒' => '苏醒',
@@ -13723,14 +13758,18 @@ $zh2Hans = array(
 '著者' => '著者',
 '著身' => '著身',
 '著述' => '著述',
-'覆蓋' => '覆蓋',
+'蔡絛' => '蔡絛',
+'行餘' => '行馀',
+'覆蓋' => '覆盖',
 '見微知著' => '见微知著',
 '見著' => '见著',
 '視微知著' => '视微知著',
 '言幾析理' => '言幾析理',
 '諲譔' => '諲譔',
-'警鍾' => '警钟',
 '譩譆' => '譩譆',
+'託庸' => '讬庸',
+'託恩多' => '讬恩多',
+'託麻' => '讬麻',
 '論著' => '论著',
 '譯著' => '译著',
 '謝肇淛' => '谢肇淛',
@@ -13739,12 +13778,11 @@ $zh2Hans = array(
 '較著' => '较著',
 '近角聪信' => '近角聪信',
 '这么' => '这么',
-'進化鍾' => '进化钟',
 '造麴' => '造曲',
 '遺著' => '遗著',
+'那么' => '那么',
 '那麽' => '那麽',
 '郭子乾' => '郭子乾',
-'郭行餘' => '郭行馀',
 '酒麴' => '酒曲',
 '醉瀋' => '醉渖',
 '醯壶' => '醯壶',
@@ -13753,48 +13791,17 @@ $zh2Hans = array(
 '醯醬' => '醯酱',
 '醯醋' => '醯醋',
 '醯醢' => '醯醢',
-'醯鸡' => '醯鸡',
 '醯雞' => '醯鸡',
+'醯鸡' => '醯鸡',
 '重覆' => '重复',
-'金尚鍾' => '金尚钟',
-'金民鍾' => '金民钟',
-'金鍾' => '金钟',
 '金鍊' => '金链',
-'鍾麗緹' => '钟丽缇',
-'鍾乳石' => '钟乳石',
-'鍾儀奏楚' => '钟仪奏楚',
-'鍾關' => '钟关',
-'鍾聲' => '钟声',
-'鍾頭' => '钟头',
-'鍾山' => '钟山',
-'鍾差' => '钟差',
-'鍾座' => '钟座',
 '鍾情' => '钟情',
 '鍾意' => '钟意',
-'鍾慧冰' => '钟慧冰',
-'鍾擺' => '钟摆',
-'鍾架' => '钟架',
-'鍾楚紅' => '钟楚红',
-'鍾樓' => '钟楼',
-'鍾漢良' => '钟汉良',
-'鍾汶' => '钟汶',
-'鍾淑慧' => '钟淑慧',
 '鍾靈' => '钟灵',
-'鍾點' => '钟点',
 '鍾愛' => '钟爱',
-'鍾琴' => '钟琴',
-'鍾相' => '钟相',
-'鍾祥' => '钟祥',
-'鍾離' => '钟离',
-'鍾表' => '钟表',
-'鍾鎮濤' => '钟镇涛',
-'鍾面' => '钟面',
-'鍾馗' => '钟馗',
-'鍾鳴漏盡' => '钟鸣漏尽',
-'鍾鳴鼎食' => '钟鸣鼎食',
-'鍾鼓' => '钟鼓',
 '鐵鍊' => '铁链',
 '鉸鍊' => '铰链',
+'銀硃' => '银朱',
 '銀鍊' => '银链',
 '鍊子' => '链子',
 '鍊條' => '链条',
@@ -13802,11 +13809,10 @@ $zh2Hans = array(
 '鍊鎖' => '链锁',
 '鍊錘' => '链锤',
 '鎖鍊' => '锁链',
+'闇公' => '闇公',
 '閻懷禮' => '闫怀礼',
-'鬧鍾' => '闹钟',
-'陽為乾' => '阳为乾',
 '阳为乾' => '阳为乾',
-'é\99½ç\88²乾' => '阳为乾',
+'é\99½ç\82º乾' => '阳为乾',
 '阿部正瞭' => '阿部正瞭',
 '陆徵祥' => '陆徵祥',
 '陸徵祥' => '陆徵祥',
@@ -13816,8 +13822,8 @@ $zh2Hans = array(
 '陳元扞' => '陈元扞',
 '陈公乾生' => '陈公乾生',
 '陳公乾生' => '陈公乾生',
-'陳遇乾' => '陈遇乾',
 '陈遇乾' => '陈遇乾',
+'陳遇乾' => '陈遇乾',
 '陳堵' => '陳堵',
 '陳禕' => '陳禕',
 '雍乾' => '雍乾',
@@ -13825,28 +13831,25 @@ $zh2Hans = array(
 '讎定' => '雠定',
 '讎校' => '雠校',
 '讎問' => '雠问',
-'音聲如鍾' => '音声如钟',
 '項鍊' => '项链',
 '飛昇' => '飞升',
 '飭令' => '飭令',
-'é¤\98å¹´ç\84¡å¤\9a' => 'é¦\80å¹´æ\97 å¤\9a',
+'飽è¨\97' => '饱讬',
 '餘慶' => '馀庆',
 '餘瀋' => '馀渖',
-'馬德鍾' => '马德钟',
+'馬鞌' => '马鞍',
 '高昇' => '高升',
 '高陞' => '高升',
 '鬱姓' => '鬱姓',
 '鬱氏' => '鬱氏',
 '魏徵' => '魏徵',
 '魚乾乾' => '鱼干干',
-'鳴鍾' => '鸣钟',
 '麽氏' => '麽氏',
-'麽麽' => '麽麽',
 '麼麼' => '麽麽',
+'麽麽' => '麽麽',
 '黃麴毒素' => '黄曲毒素',
-'黄润乾' => '黄润乾',
 '黃潤乾' => '黄润乾',
-'é»\83é\8d¾' => 'é»\84é\92\9f',
+'é»\84润乾' => 'é»\84润乾',
 '龍鍾' => '龙钟',
 ',陞' => ',升',
 );
@@ -13870,8 +13873,8 @@ $zh2TW = array(
 '丙肝' => 'C肝',
 'IP地址' => 'IP位址',
 '乔戈里峰' => 'K2',
-'·威爾士' => '·威爾士',
 '·威尔士' => '·威爾士',
+'·威爾士' => '·威爾士',
 '一杆' => '一桿',
 '七杆' => '七桿',
 '三杆' => '三桿',
@@ -13885,6 +13888,7 @@ $zh2TW = array(
 '以太网' => '乙太網',
 '九杆' => '九桿',
 '了結他' => '了結他',
+'二手烟' => '二手菸',
 '二手煙' => '二手菸',
 '二杆' => '二桿',
 '二极管' => '二極體',
@@ -13895,22 +13899,22 @@ $zh2TW = array(
 '阿斯旺' => '亞斯文',
 '人工智能' => '人工智慧',
 '人机交互' => '人機互動',
-'石勒蘇益格' => '什勒斯維希',
 '石勒苏益格' => '什勒斯維希',
+'石勒蘇益格' => '什勒斯維希',
 '界面' => '介面',
 '伊利诺伊州' => '伊利諾州',
-'伊斯坦布爾' => '伊斯坦堡',
 '伊斯坦布尔' => '伊斯坦堡',
+'伊斯坦布爾' => '伊斯坦堡',
 '伊斯兰堡' => '伊斯蘭瑪巴德',
 '伊斯蘭堡' => '伊斯蘭瑪巴德',
 '埃博拉' => '伊波拉',
 '伊丽莎白' => '伊莉莎白',
-'掌上壓' => '伏地挺身',
 '俯卧撑' => '伏地挺身',
+'掌上壓' => '伏地挺身',
 '伯明翰' => '伯明罕',
 '服务器' => '伺服器',
-'字节' => '位元組',
 '字節' => '位元組',
+'字节' => '位元組',
 '佛罗伦萨' => '佛羅倫斯',
 '操作系统' => '作業系統',
 '系数' => '係數',
@@ -13918,8 +13922,8 @@ $zh2TW = array(
 '傅里叶' => '傅立葉',
 '光盘' => '光碟',
 '光驱' => '光碟機',
-'克羅地亞' => '克羅埃西亞',
 '克罗地亚' => '克羅埃西亞',
+'克羅地亞' => '克羅埃西亞',
 '克里斯托弗' => '克里斯多福',
 '万维网' => '全球資訊網',
 '八杆' => '八桿',
@@ -13927,6 +13931,9 @@ $zh2TW = array(
 '六杆' => '六桿',
 '凯瑟琳' => '凱薩琳',
 '嘉芙蓮' => '凱薩琳',
+'划着独木舟' => '划著獨木舟',
+'划着竹筏' => '划著竹筏',
+'划着船' => '划著船',
 '打印' => '列印',
 '列支敦士登' => '列支敦斯登',
 '前波美拉尼亚' => '前波莫瑞',
@@ -13938,22 +13945,24 @@ $zh2TW = array(
 '北朝鲜' => '北韓',
 '局域网' => '區域網',
 '十杆' => '十桿',
-'特立尼達和多巴哥' => '千里達托貝哥',
 '特立尼达和托巴哥' => '千里達托貝哥',
+'特立尼達和多巴哥' => '千里達托貝哥',
 '南朝鲜' => '南韓',
 '卡斯特罗' => '卡斯楚',
 '卡塔尔' => '卡達',
 '卡塔爾' => '卡達',
+'铆足' => '卯足',
 '打印机' => '印表機',
 '打印機' => '印表機',
-'厄立特里亞' => '厄利垂亞',
-'厄立特里亚' => '厄利垂亞',
 '厄利垂亚' => '厄利垂亞',
-'厄瓜多爾' => '厄瓜多',
+'厄立特里亚' => '厄利垂亞',
+'厄立特里亞' => '厄利垂亞',
 '厄瓜多' => '厄瓜多',
 '厄瓜多尔' => '厄瓜多',
+'厄瓜多爾' => '厄瓜多',
 '源代码' => '原始碼',
 '圆珠笔' => '原子筆',
+'反烟' => '反菸',
 '反煙' => '反菸',
 '可卡因' => '古柯鹼',
 '便携式' => '可攜式',
@@ -13975,17 +13984,17 @@ $zh2TW = array(
 '乞力马扎罗' => '吉力馬札羅',
 '吉布堤' => '吉布地',
 '吉布提' => '吉布地',
-'吉尔吉斯斯坦' => '吉爾吉斯',
 '基里巴斯' => '吉里巴斯',
-'圖瓦盧' => '吐瓦魯',
 '图瓦卢' => '吐瓦魯',
+'圖瓦盧' => '吐瓦魯',
+'吸烟' => '吸菸',
 '吸煙' => '吸菸',
+'吕宋烟' => '呂宋菸',
 '呂宋煙' => '呂宋菸',
-'哈萨克斯坦' => '哈薩克',
 '格丁根' => '哥廷根',
 '哥特式' => '哥德式',
-'哥斯達黎加' => '哥斯大黎加',
 '哥斯达黎加' => '哥斯大黎加',
+'哥斯達黎加' => '哥斯大黎加',
 '卡拉奇' => '喀拉蚩',
 '乔治·奥威尔' => '喬治·歐威爾',
 '佐治亚' => '喬治亞',
@@ -13996,63 +14005,61 @@ $zh2TW = array(
 '單鏡反光機' => '單眼相機',
 '嘯咤' => '嘯吒',
 '四杆' => '四桿',
-'土库曼斯坦' => '土庫曼',
-'圖盧茲' => '土魯斯',
 '图卢兹' => '土魯斯',
-'IP' => '地址',
+'圖盧茲' => '土魯斯',
 '戛纳' => '坎城',
 '堪培拉' => '坎培拉',
-'坦桑尼亞' => '坦尚尼亞',
 '坦桑尼亚' => '坦尚尼亞',
+'坦桑尼亞' => '坦尚尼亞',
 '端口' => '埠',
 '首席执行官' => '執行長',
-'塔吉克斯坦' => '塔吉克',
-'塞舌爾' => '塞席爾',
 '塞舌尔' => '塞席爾',
+'塞舌爾' => '塞席爾',
 '萨拉热窝' => '塞拉耶佛',
 '薩拉熱窩' => '塞拉耶佛',
+'塞尔维亚和黑山' => '塞爾維亞與蒙特內哥羅',
 '塞爾維亞和黑山' => '塞爾維亞與蒙特內哥羅',
 '塞爾維亞與蒙特內哥羅' => '塞爾維亞與蒙特內哥羅',
-'塞尔维亚和黑山' => '塞爾維亞與蒙特內哥羅',
 '塞维利亚' => '塞維亞',
 '西維爾' => '塞維亞',
 '塞黑' => '塞蒙',
-'英联邦' => '大英國協',
 '共和联邦' => '大英國協',
+'英联邦' => '大英國協',
 '英聯邦' => '大英國協',
-'宇航员' => '太空人',
 '太空飛行員' => '太空人',
-'航天飞机' => '太空梭',
+'宇航员' => '太空人',
 '穿梭機' => '太空梭',
+'航天飞机' => '太空梭',
 '宇航服' => '太空衣',
 '航天器' => '太空飛行器',
-'尼日利亞' => '奈及利亞',
 '尼日利亚' => '奈及利亞',
+'尼日利亞' => '奈及利亞',
 '忌廉' => '奶油',
 '荷里活' => '好萊塢',
 '威廉姆斯' => '威廉士',
-'威斯特法倫' => '威斯伐倫',
 '威斯特法伦' => '威斯伐倫',
+'威斯特法倫' => '威斯伐倫',
 '威士顿康星' => '威斯康辛',
-'威爾士' => '威爾斯',
 '威尔士' => '威爾斯',
+'威爾士' => '威爾斯',
 '字库' => '字型檔',
 '存盘' => '存檔',
-'门德尔松' => '孟德爾頌',
 '孟德爾遜' => '孟德爾頌',
-'安哈爾特' => '安哈特',
+'门德尔松' => '孟德爾頌',
 '安哈尔特' => '安哈特',
-'安提瓜和巴布達' => '安地卡及巴布達',
+'安哈爾特' => '安哈特',
 '安提瓜和巴布达' => '安地卡及巴布達',
+'安提瓜和巴布達' => '安地卡及巴布達',
 '洪都拉斯' => '宏都拉斯',
 '密歇根' => '密西根',
 '宽带' => '寬頻',
-'老撾人民民主共和國' => '寮人民民主共和國',
 '老挝人民民主共和国' => '寮人民民主共和國',
+'老撾人民民主共和國' => '寮人民民主共和國',
 '老挝' => '寮國',
 '老撾' => '寮國',
 '老挝语' => '寮語',
 '老撾語' => '寮語',
+'波里活' => '寶萊塢',
 '高峰时段' => '尖峰時段',
 '高峰时间' => '尖峰時間',
 '贊比亞' => '尚比亞',
@@ -14065,8 +14072,8 @@ $zh2TW = array(
 '機床' => '工具機',
 '珍寶客機' => '巨無霸客機',
 '发达国家' => '已開發國家',
-'巴塞隆拿' => '巴塞隆納',
 '巴塞罗那' => '巴塞隆納',
+'巴塞隆拿' => '巴塞隆納',
 '巴布亚新几内亚' => '巴布亞紐幾內亞',
 '巴布亞新畿內亞' => '巴布亞紐幾內亞',
 '巴士拉' => '巴斯拉',
@@ -14074,8 +14081,8 @@ $zh2TW = array(
 '佈' => '布',
 '布基納法索' => '布吉納法索',
 '布基纳法索' => '布吉納法索',
-'布殊' => '布希',
 '布什' => '布希',
+'布殊' => '布希',
 '勃兰登堡' => '布蘭登堡',
 '勃蘭登堡' => '布蘭登堡',
 '布里斯托尔' => '布里斯托',
@@ -14092,12 +14099,15 @@ $zh2TW = array(
 '几内亚比绍' => '幾內亞比索',
 '幾內亞比紹' => '幾內亞比索',
 '比利牛斯' => '庇里牛斯',
+'库尔德人' => '庫德人',
+'库尔德族' => '庫德族',
 '康涅狄格' => '康乃狄克',
 '约翰斯顿岛' => '強斯頓環礁',
+'汇编' => '彙編',
 '形而上学' => '形上學',
 '形而上學' => '形上學',
-'得克薩斯' => '德克薩斯',
 '得克萨斯' => '德克薩斯',
+'得克薩斯' => '德克薩斯',
 '德累斯頓' => '德勒斯登',
 '德累斯顿' => '德勒斯登',
 '德里达' => '德希達',
@@ -14111,74 +14121,79 @@ $zh2TW = array(
 '艾奧瓦' => '愛荷華',
 '爱德华州' => '愛達荷州',
 '应用程序' => '應用程式',
-'戈爾巴喬夫' => '戈巴契夫',
 '戈尔巴乔夫' => '戈巴契夫',
+'戈爾巴喬夫' => '戈巴契夫',
+'戒烟' => '戒菸',
 '戒煙' => '戒菸',
 '戴克里先' => '戴克里先',
+'抽烟' => '抽菸',
 '抽煙' => '抽菸',
 '拉普兰' => '拉布蘭',
+'拒烟' => '拒菸',
 '拒煙' => '拒菸',
+'卷烟' => '捲菸',
 '捲煙' => '捲菸',
 '積架' => '捷豹',
 '控件' => '控制項',
 '推杆' => '推桿',
 '第比利斯' => '提比里西',
-'揮杆' => '揮桿',
 '挥杆' => '揮桿',
+'揮杆' => '揮桿',
 '搜索引擎' => '搜尋引擎',
 '摩根士丹利' => '摩根史坦利',
 '台球' => '撞球',
 '攻打印' => '攻打印',
 '数字技术' => '數位技術',
 '數碼技術' => '數位技術',
-'數碼相機' => '數位相機',
 '数码相机' => '數位相機',
+'數碼相機' => '數位相機',
 '数字信号' => '數位訊號',
 '數碼訊號' => '數位訊號',
 '数字电视' => '數位電視',
 '數碼電視' => '數位電視',
-'调制解调器' => '數據機',
 '調制解調器' => '數據機',
+'调制解调器' => '數據機',
 '斯洛文尼亚' => '斯洛維尼亞',
 '斯洛文尼亞' => '斯洛維尼亞',
 '新罕布什尔' => '新罕布夏',
 '施罗德' => '施洛德',
+'旱烟' => '旱菸',
 '旱煙' => '旱菸',
 '普利策' => '普利茲',
 '芯片' => '晶片',
 '智能卡' => '智慧卡',
-'智能手機' => '智慧型手機',
 '智能手机' => '智慧型手機',
+'智能手機' => '智慧型手機',
 '智能电话' => '智慧型電話',
 '智能電話' => '智慧型電話',
-'知识产权' => '智慧財產權',
 '知識產權' => '智慧財產權',
+'知识产权' => '智慧財產權',
 '萌島' => '曼島',
 '马恩岛' => '曼島',
 '木杆' => '木桿',
 '列奥纳多' => '李奧納多',
-'杜塞爾多夫' => '杜塞道夫',
 '杜塞尔多夫' => '杜塞道夫',
+'杜塞爾多夫' => '杜塞道夫',
 '迪拜' => '杜拜',
-'亚细安' => '東協',
 '东盟' => '東協',
+'亚细安' => '東協',
 '东南亚国家联盟' => '東南亞國協',
 '柏林墙' => '柏林圍牆',
 '柏林牆' => '柏林圍牆',
 '乍得' => '查德',
 '查韦斯' => '查維茲',
-'克林顿' => '柯林頓',
 '克林頓' => '柯林頓',
-'撒切尔' => '柴契爾',
+'克林顿' => '柯林頓',
 '戴卓爾' => '柴契爾',
-'æ ¼æ\9e\97纳达' => 'æ ¼ç\91\9eé\82£é\81\94',
+'æ\92\92å\88\87å°\94' => 'æ\9f´å¥\91ç\88¾',
 '格林納達' => '格瑞那達',
-'乒乓球' => '桌球',
+'格林纳达' => '格瑞那達',
 '乒乓' => '桌球',
+'乒乓球' => '桌球',
 '杆弟' => '桿弟',
 '杆身' => '桿身',
-'杆頭' => '桿頭',
 '杆头' => '桿頭',
+'杆頭' => '桿頭',
 '梅尔·吉布森' => '梅爾·吉勃遜',
 '梵高' => '梵谷',
 '桑巴舞' => '森巴舞',
@@ -14189,38 +14204,41 @@ $zh2TW = array(
 '標準杆' => '標準桿',
 '毛里求斯' => '模里西斯',
 '毛里裘斯' => '模里西斯',
-'機械人' => '機器人',
 '机器人' => '機器人',
+'機械人' => '機器人',
 '概率' => '機率',
 '電單車' => '機車',
 '枱' => '檯',
 '字段' => '欄位',
-'奧巴馬' => '歐巴馬',
 '奥巴马' => '歐巴馬',
+'奧巴馬' => '歐巴馬',
 '正在叱咤' => '正在叱咤',
 '文莱' => '汶萊',
 '沙律' => '沙拉',
-'沙特阿拉伯' => '沙烏地阿拉伯',
 '沙地阿拉伯' => '沙烏地阿拉伯',
+'沙特阿拉伯' => '沙烏地阿拉伯',
 '法属圭亚那' => '法屬蓋亞那',
 '波斯尼亚' => '波士尼亞',
 '波斯尼亞' => '波士尼亞',
-'波斯尼亞黑塞哥維那' => '波士尼亞赫塞哥維納',
 '波斯尼亚和黑塞哥维那' => '波士尼亞赫塞哥維納',
-'博茨瓦纳' => '波札那',
+'波斯尼亞黑塞哥維那' => '波士尼亞赫塞哥維納',
 '博茨瓦納' => '波札那',
+'博茨瓦纳' => '波札那',
 '波黑' => '波赫',
+'洋烟' => '洋菸',
 '洋煙' => '洋菸',
 '帕特里克' => '派屈克',
 '海洛英' => '海洛因',
-'侯赛因' => '海珊',
 '侯賽因' => '海珊',
+'侯赛因' => '海珊',
 '鼠标' => '滑鼠',
-'漢诺威' => '漢諾瓦',
 '汉诺威' => '漢諾瓦',
-'乌兹别克斯坦' => '烏茲別克',
+'漢诺威' => '漢諾瓦',
+'烤烟' => '烤菸',
 '烤煙' => '烤菸',
+'无烟日' => '無菸日',
 '無煙日' => '無菸日',
+'无烟环境' => '無菸環境',
 '無煙環境' => '無菸環境',
 '烟熏' => '煙燻',
 '首席运营官' => '營運長',
@@ -14236,8 +14254,8 @@ $zh2TW = array(
 '独立国家联合体' => '獨立國家國協',
 '波利尼西亚' => '玻里尼西亞',
 '波利尼西亞' => '玻里尼西亞',
-'本杰明' => '班傑明',
 '本傑明' => '班傑明',
+'本杰明' => '班傑明',
 '球杆' => '球桿',
 '理查德' => '理察',
 '卢塞恩' => '琉森',
@@ -14254,12 +14272,12 @@ $zh2TW = array(
 '徵狀' => '症狀',
 '勃朗宁' => '白朗寧',
 '百慕大' => '百慕達',
-'盧旺達' => '盧安達',
 '卢旺达' => '盧安達',
+'盧旺達' => '盧安達',
 '睾' => '睪',
 '知识产权局' => '知識產權局',
-'知識產權署' => '知識產權署',
 '知識產權局' => '知識產權署',
+'知識產權署' => '知識產權署',
 '知识产权署' => '知識產權署',
 '硅' => '矽',
 '硅藻' => '硅藻',
@@ -14268,17 +14286,19 @@ $zh2TW = array(
 '盘片' => '碟片',
 '磁盘' => '磁碟',
 '磁道' => '磁軌',
+'禁烟' => '禁菸',
 '禁煙' => '禁菸',
 '福尔马林' => '福馬林',
 '福爾馬林' => '福馬林',
+'私烟' => '私菸',
 '私煙' => '私菸',
 '程序员' => '程式設計師',
 '编程语言' => '程式語言',
-'空氣質素' => '空氣品質',
 '空气质量' => '空氣品質',
+'空氣質素' => '空氣品質',
 '突尼斯' => '突尼西亞',
-'蹦极跳' => '笨豬跳',
 '绑紧跳' => '笨豬跳',
+'蹦极跳' => '笨豬跳',
 '短信' => '簡訊',
 '纽黑文' => '紐哈芬',
 '新奥尔良' => '紐奧良',
@@ -14287,23 +14307,24 @@ $zh2TW = array(
 '新西兰' => '紐西蘭',
 '新西蘭' => '紐西蘭',
 '紙煙' => '紙菸',
-'ç´¢è´\8aå°¼è¾\9b' => 'ç´¢å¿\8då°¼è¾\9b',
+'纸ç\83\9f' => 'ç´\99è\8f¸',
 '索尔仁尼琴' => '索忍尼辛',
-'所羅門群島' => '索羅門群島',
+'索贊尼辛' => '索忍尼辛',
 '所罗门群岛' => '索羅門群島',
-'索马里' => '索馬利亞',
+'所羅門群島' => '索羅門群島',
 '索馬里' => '索馬利亞',
-'索马里兰' => '索馬利蘭',
+'索马里' => '索馬利亞',
 '索馬里蘭' => '索馬利蘭',
+'索马里兰' => '索馬利蘭',
 '維爾京群島' => '維京群島',
 '维尔京群岛' => '維京群島',
 '弗吉尼亚' => '維吉尼亞',
 '佛得角' => '維德角',
 '维特根斯坦' => '維根斯坦',
+'互联网' => '網際網路',
 '互联网络' => '網際網路',
-'因特网' => '網際網路',
 '互聯網' => '網際網路',
-'互联网' => '網際網路',
+'因特网' => '網際網路',
 '系着' => '繫著',
 '卢瓦尔' => '羅亞爾',
 '盧瓦爾' => '羅亞爾',
@@ -14314,11 +14335,11 @@ $zh2TW = array(
 '昂山素季' => '翁山蘇姬',
 '圣基茨和尼维斯' => '聖克里斯多福及尼維斯',
 '聖吉斯納域斯' => '聖克里斯多福及尼維斯',
-'聖文森特和格林納丁斯' => '聖文森及格瑞那丁',
 '圣文森特和格林纳丁斯' => '聖文森及格瑞那丁',
+'聖文森特和格林納丁斯' => '聖文森及格瑞那丁',
 '圣赫勒拿' => '聖赫倫那',
-'聖盧西亞' => '聖露西亞',
 '圣卢西亚' => '聖露西亞',
+'聖盧西亞' => '聖露西亞',
 '圣马力诺' => '聖馬利諾',
 '聖馬力諾' => '聖馬利諾',
 '肯尼亚' => '肯亞',
@@ -14328,8 +14349,8 @@ $zh2TW = array(
 '三藩市' => '舊金山',
 '艾森豪威尔' => '艾森豪',
 '埃菲尔' => '艾菲爾',
-'阿里埃勒·沙龙' => '艾里爾·夏隆',
 '阿里埃勒·沙龍' => '艾里爾·夏隆',
+'阿里埃勒·沙龙' => '艾里爾·夏隆',
 '帕塔亚' => '芭達亞',
 '黎克特制' => '芮氏',
 '里氏0' => '芮氏0',
@@ -14347,8 +14368,8 @@ $zh2TW = array(
 '里氏震级' => '芮氏規模',
 '当且仅当' => '若且唯若',
 '味美思' => '苦艾酒',
-'毛里塔尼亞' => '茅利塔尼亞',
 '毛里塔尼亚' => '茅利塔尼亞',
+'毛里塔尼亞' => '茅利塔尼亞',
 '霍尔木兹' => '荷姆茲',
 '霍爾木茲' => '荷姆茲',
 '荷李活道' => '荷李活道',
@@ -14356,27 +14377,45 @@ $zh2TW = array(
 '瓦文萨' => '華勒沙',
 '華里沙' => '華勒沙',
 '瓦格纳' => '華格納',
+'烟具' => '菸具',
 '煙具' => '菸具',
+'烟品' => '菸品',
 '煙品' => '菸品',
+'烟嘴' => '菸嘴',
 '煙嘴' => '菸嘴',
+'烟卷' => '菸捲',
 '煙捲' => '菸捲',
+'烟斗' => '菸斗',
 '煙斗' => '菸斗',
+'烟民' => '菸民',
 '煙民' => '菸民',
+'烟灰' => '菸灰',
 '煙灰' => '菸灰',
+'烟瘾' => '菸癮',
 '煙癮' => '菸癮',
+'烟丝' => '菸絲',
 '煙絲' => '菸絲',
+'烟草' => '菸草',
 '煙草' => '菸草',
+'烟叶' => '菸葉',
 '煙葉' => '菸葉',
+'烟蒂' => '菸蒂',
 '煙蒂' => '菸蒂',
+'烟袋' => '菸袋',
 '煙袋' => '菸袋',
+'烟农' => '菸農',
 '煙農' => '菸農',
+'烟酒' => '菸酒',
 '煙酒' => '菸酒',
+'烟头' => '菸頭',
 '煙頭' => '菸頭',
+'烟鬼' => '菸鬼',
 '煙鬼' => '菸鬼',
+'烟碱' => '菸鹼',
 '煙鹼' => '菸鹼',
 '万历朝鲜战争' => '萬曆朝鮮戰爭',
-'瓦努阿圖' => '萬那杜',
 '瓦努阿图' => '萬那杜',
+'瓦努阿圖' => '萬那杜',
 '叶利钦' => '葉爾欽',
 '葉利欽' => '葉爾欽',
 '埃里温' => '葉里溫',
@@ -14386,22 +14425,24 @@ $zh2TW = array(
 '着' => '著',
 '科摩罗' => '葛摩',
 '科摩羅' => '葛摩',
-'黑山共和國' => '蒙特內哥羅共和國',
+'格林美獎' => '葛萊美獎',
+'格莱美奖' => '葛萊美獎',
 '黑山共和国' => '蒙特內哥羅共和國',
-'蒙特利爾' => '蒙特婁',
+'黑山共和國' => '蒙特內哥羅共和國',
 '滿地可' => '蒙特婁',
 '蒙特利尔' => '蒙特婁',
+'蒙特利爾' => '蒙特婁',
 '普密蓬' => '蒲美蓬',
 '布隆迪' => '蒲隆地',
 '圭亚那' => '蓋亞那',
 '开曼群岛' => '蓋曼群島',
 '開曼群島' => '蓋曼群島',
-'蕭士達高維契' => '蕭士塔高維奇',
 '肖斯塔科维奇' => '蕭士塔高維奇',
+'蕭士達高維契' => '蕭士塔高維奇',
 '肖邦' => '蕭邦',
 '薛定谔' => '薛丁格',
-'扎伊爾' => '薩伊',
 '扎伊尔' => '薩伊',
+'扎伊爾' => '薩伊',
 '素檀' => '蘇丹',
 '苏里南' => '蘇利南',
 '浮罗交怡' => '蘭卡威',
@@ -14412,37 +14453,38 @@ $zh2TW = array(
 '屏幕' => '螢幕',
 '流動網絡' => '行動網路',
 '移动网络' => '行動網路',
-'移动电话' => '行動電話',
 '流動電話' => '行動電話',
+'移动电话' => '行動電話',
 '冲着' => '衝著',
-'埃塞俄比亞' => '衣索比亞',
 '埃塞俄比亚' => '衣索比亞',
+'埃塞俄比亞' => '衣索比亞',
 '克隆人' => '複製人',
-'國際象棋' => '西洋棋',
 '囯际象棋' => '西洋棋',
 '国际象棋' => '西洋棋',
+'國際象棋' => '西洋棋',
 '赫梯' => '西臺',
-'解像度' => '解析度',
 '分辨率' => '解析度',
+'解像度' => '解析度',
 '译码' => '解碼',
 '出租车' => '計程車',
 '约翰逊' => '詹森',
 '诺曼底' => '諾曼第',
-'瑙鲁' => '諾魯',
 '瑙魯' => '諾魯',
+'瑙鲁' => '諾魯',
 '科特迪瓦' => '象牙海岸',
-'贝尔格莱德' => '貝爾格勒',
 '貝爾格萊德' => '貝爾格勒',
+'贝尔格莱德' => '貝爾格勒',
 '伯利兹' => '貝里斯',
 '伯利茲' => '貝里斯',
 '首席财务官' => '財務長',
 '集装箱' => '貨櫃',
-'數據庫' => '資料庫',
 '数据库' => '資料庫',
+'數據庫' => '資料庫',
 '信息论' => '資訊理論',
+'乔布斯' => '賈伯斯',
 '宾西法尼亚' => '賓夕法尼亞',
-'利比里亞' => '賴比瑞亞',
 '利比里亚' => '賴比瑞亞',
+'利比里亞' => '賴比瑞亞',
 '莱索托' => '賴索托',
 '萊索托' => '賴索托',
 '塞浦路斯' => '賽普勒斯',
@@ -14453,8 +14495,8 @@ $zh2TW = array(
 '软驱' => '軟碟機',
 '軟件' => '軟體',
 '软件' => '軟體',
-'津巴布韦' => '辛巴威',
 '津巴布韋' => '辛巴威',
+'津巴布韦' => '辛巴威',
 '径入' => '逕入',
 '径到' => '逕到',
 '径取' => '逕取',
@@ -14474,17 +14516,16 @@ $zh2TW = array(
 '溫納圖萬' => '那杜',
 '丘吉尔' => '邱吉爾',
 '多普勒' => '都卜勒',
-'奥斯曼' => '鄂圖曼',
 '酰' => '醯',
 '里士满' => '里奇蒙',
-'金沙薩' => '金夏沙',
 '金沙萨' => '金夏沙',
-'健力士世界纪录' => '金氏世界紀錄',
+'金沙薩' => '金夏沙',
 '健力士世界紀錄' => '金氏世界紀錄',
+'健力士世界纪录' => '金氏世界紀錄',
 '吉尼斯世界纪录' => '金氏世界紀錄',
 '钚' => '鈽',
-'钩' => '鉤',
 '鈎' => '鉤',
+'钩' => '鉤',
 '锎' => '鉲',
 '锫' => '鉳',
 '镅' => '鋂',
@@ -14513,18 +14554,20 @@ $zh2TW = array(
 '雅穆苏克雷' => '雅穆索戈',
 '雅穆蘇克雷' => '雅穆索戈',
 '悉尼' => '雪梨',
+'雪茄烟' => '雪茄菸',
 '雪茄煙' => '雪茄菸',
 '莱特湾' => '雷伊泰灣',
 '萊特灣' => '雷伊泰灣',
 '激光' => '雷射',
 '雷诺阿' => '雷諾瓦',
+'电子烟' => '電子菸',
 '電子煙' => '電子菸',
-'晶體管' => '電晶體',
 '晶体管' => '電晶體',
+'晶體管' => '電晶體',
 '电杆' => '電桿',
 '电线杆' => '電線桿',
-'计算机程序' => '電腦程式',
 '电脑程序' => '電腦程式',
+'计算机程序' => '電腦程式',
 '荷尔斯泰因' => '霍爾斯坦',
 '荷爾斯泰因' => '霍爾斯坦',
 '朝鲜战争' => '韓戰',
@@ -14532,9 +14575,10 @@ $zh2TW = array(
 '缺省' => '預設',
 '导弹' => '飛彈',
 '糊口' => '餬口',
+'香烟' => '香菸',
 '香煙' => '香菸',
-'马里共和国' => '馬利共和國',
 '馬里共和國' => '馬利共和國',
+'马里共和国' => '馬利共和國',
 '马拉维' => '馬拉威',
 '馬斯特里赫特' => '馬斯垂克',
 '马斯特里赫特' => '馬斯垂克',
@@ -14548,25 +14592,27 @@ $zh2TW = array(
 '咪高峰' => '麥克風',
 '迈克尔' => '麥可',
 '麦克尔' => '麥可',
-'邁凱輪' => '麥拿輪',
 '迈凯轮' => '麥拿輪',
+'邁凱輪' => '麥拿輪',
 '马萨诸塞' => '麻薩諸塞',
 '戴安娜' => '黛安娜',
 '狄安娜' => '黛安娜',
+'点烟' => '點菸',
 '點煙' => '點菸',
 '霉素' => '黴素',
 );
 
 $zh2HK = array(
 'IP地址' => 'IP位址',
-'·威爾士' => '·威爾士',
 '·威尔士' => '·威爾士',
+'·威爾士' => '·威爾士',
 '一地里' => '一地裏',
 '一年里' => '一年裏',
 '三十六著' => '三十六着',
 '三極體' => '三極管',
 '旧金山' => '三藩市',
 '舊金山' => '三藩市',
+'上台面' => '上枱面',
 '下著' => '下着',
 '下著作' => '下著作',
 '下著名' => '下著名',
@@ -14632,6 +14678,7 @@ $zh2HK = array(
 '伊斯坦堡' => '伊斯坦布爾',
 '伊斯蘭瑪巴德' => '伊斯蘭堡',
 '埃博拉' => '伊波拉',
+'伏著' => '伏着',
 '貝里斯' => '伯利茲',
 '伯明罕' => '伯明翰',
 '伴著' => '伴着',
@@ -14656,8 +14703,8 @@ $zh2HK = array(
 '布满' => '佈滿',
 '布滿' => '佈滿',
 '布置' => '佈置',
-'布设' => '佈設',
 '布設' => '佈設',
+'布设' => '佈設',
 '布警' => '佈警',
 '布道' => '佈道',
 '布防' => '佈防',
@@ -14665,12 +14712,12 @@ $zh2HK = array(
 '布陣' => '佈陣',
 '布雷、' => '佈雷、',
 '布雷。' => '佈雷。',
-'布雷封锁' => '佈雷封鎖',
 '布雷封鎖' => '佈雷封鎖',
+'布雷封锁' => '佈雷封鎖',
 '布雷的' => '佈雷的',
 '布雷艇' => '佈雷艇',
-'布雷艦' => '佈雷艦',
 '布雷舰' => '佈雷艦',
+'布雷艦' => '佈雷艦',
 '布雷速度' => '佈雷速度',
 '布雷,' => '佈雷,',
 '布雷;' => '佈雷;',
@@ -14737,8 +14784,8 @@ $zh2HK = array(
 '占上風' => '佔上風',
 '占上风' => '佔上風',
 '占下' => '佔下',
-'占下风' => '佔下風',
 '占下風' => '佔下風',
+'占下风' => '佔下風',
 '占不占' => '佔不佔',
 '占不足' => '佔不足',
 '占世界' => '佔世界',
@@ -14759,10 +14806,10 @@ $zh2HK = array(
 '占個' => '佔個',
 '占个位' => '佔個位',
 '占個位' => '佔個位',
-'占億' => '佔億',
 '占亿' => '佔億',
-'å\8d å\84ª' => 'ä½\94å\84ª',
+'å\8d å\84\84' => 'ä½\94å\84\84',
 '占优' => '佔優',
+'占優' => '佔優',
 '占先' => '佔先',
 '占光' => '佔光',
 '占全' => '佔全',
@@ -14789,8 +14836,8 @@ $zh2HK = array(
 '占國' => '佔國',
 '占在' => '佔在',
 '占地' => '佔地',
-'占場' => '佔場',
 '占场' => '佔場',
+'占場' => '佔場',
 '占压' => '佔壓',
 '占壓' => '佔壓',
 '占多' => '佔多',
@@ -14811,8 +14858,8 @@ $zh2HK = array(
 '占德' => '佔德',
 '占所有' => '佔所有',
 '占掉' => '佔掉',
-'占據' => '佔據',
 '占据' => '佔據',
+'占據' => '佔據',
 '占整' => '佔整',
 '占新' => '佔新',
 '占有' => '佔有',
@@ -14825,23 +14872,23 @@ $zh2HK = array(
 '占满' => '佔滿',
 '占滿' => '佔滿',
 '占澳' => '佔澳',
-'占為' => '佔為',
 '占为' => '佔為',
+'占為' => '佔為',
 '占率' => '佔率',
 '占用' => '佔用',
-'占畢' => '佔畢',
 '占毕' => '佔畢',
+'占畢' => '佔畢',
 '占百' => '佔百',
-'占盡' => '佔盡',
 '占尽' => '佔盡',
+'占盡' => '佔盡',
 '占着' => '佔着',
 '占著' => '佔着',
-'占网' => '佔網',
 '占網' => '佔網',
+'占网' => '佔網',
 '占線' => '佔線',
 '占线' => '佔線',
-'占總' => '佔總',
 '占总' => '佔總',
+'占總' => '佔總',
 '占缺' => '佔缺',
 '占美' => '佔美',
 '占耕' => '佔耕',
@@ -14849,21 +14896,21 @@ $zh2HK = array(
 '占至少' => '佔至少',
 '占臺' => '佔臺',
 '占英' => '佔英',
-'占萬' => '佔萬',
 '占万' => '佔萬',
+'占萬' => '佔萬',
 '占著名' => '佔著名',
 '占著者' => '佔著者',
 '占葡' => '佔葡',
-'占蘇' => '佔蘇',
 '占苏' => '佔蘇',
+'占蘇' => '佔蘇',
 '占西' => '佔西',
 '占資' => '佔資',
 '占资' => '佔資',
 '占起' => '佔起',
 '占超过' => '佔超過',
 '占超過' => '佔超過',
-'占過' => '佔過',
 '占过' => '佔過',
+'占過' => '佔過',
 '占道' => '佔道',
 '占零' => '佔零',
 '占領' => '佔領',
@@ -14931,8 +14978,8 @@ $zh2HK = array(
 '做著者' => '做著者',
 '做著述' => '做著述',
 '做著錄' => '做著錄',
-'金氏世界紀錄' => '健力士世界紀錄',
 '吉尼斯世界纪录' => '健力士世界紀錄',
+'金氏世界紀錄' => '健力士世界紀錄',
 '側著' => '側着',
 '側著作' => '側著作',
 '側著名' => '側著名',
@@ -15025,8 +15072,8 @@ $zh2HK = array(
 '剪彩' => '剪綵',
 '割占' => '割佔',
 '劃著' => '劃着',
-'擊劍' => '劍擊',
 '击剑' => '劍擊',
+'擊劍' => '劍擊',
 '加薩走廊' => '加沙地帶',
 '迦納' => '加納',
 '加彭' => '加蓬',
@@ -15060,8 +15107,8 @@ $zh2HK = array(
 '南朝鲜' => '南韓',
 '波札那' => '博茨瓦納',
 '占卜' => '占卜',
-'占國橋' => '占國橋',
 '占国桥' => '占國橋',
+'占國橋' => '占國橋',
 '占有五不' => '占有五不',
 '占著作' => '占著作',
 '占著稱' => '占著稱',
@@ -15081,8 +15128,8 @@ $zh2HK = array(
 '印著錄' => '印著錄',
 '瓜地馬拉' => '危地馬拉',
 '厄瓜多' => '厄瓜多爾',
-'厄瓜多爾' => '厄瓜多爾',
 '厄瓜多尔' => '厄瓜多爾',
+'厄瓜多爾' => '厄瓜多爾',
 '厄利垂亚' => '厄立特里亞',
 '厄利垂亞' => '厄立特里亞',
 '源代码' => '原始碼',
@@ -15117,8 +15164,9 @@ $zh2HK = array(
 '叫著錄' => '叫著錄',
 '古柯鹼' => '可卡因',
 '叱吒' => '叱咤',
-'斯皮尔伯格' => '史匹堡',
+'斯坦福' => '史丹福',
 '史匹柏' => '史匹堡',
+'斯皮尔伯格' => '史匹堡',
 '史蒂芬·史匹柏' => '史提芬·史匹堡',
 '斯蒂芬·斯皮尔伯格' => '史提芬·史匹堡',
 '吃不著' => '吃不着',
@@ -15127,7 +15175,6 @@ $zh2HK = array(
 '吃里扒外' => '吃裏扒外',
 '吃里爬外' => '吃裏爬外',
 '吉布地' => '吉布堤',
-'吉尔吉斯斯坦' => '吉爾吉斯',
 '吊著' => '吊着',
 '向著' => '向着',
 '向著作' => '向著作',
@@ -15166,8 +15213,8 @@ $zh2HK = array(
 '味著述' => '味著述',
 '味著錄' => '味著錄',
 '咖哩' => '咖喱',
-'麦克风' => '咪高峰',
 '麥克風' => '咪高峰',
+'麦克风' => '咪高峰',
 '哥特式' => '哥德式',
 '哥斯大黎加' => '哥斯達黎加',
 '哪里' => '哪裏',
@@ -15195,14 +15242,15 @@ $zh2HK = array(
 '喝著者' => '喝著者',
 '喝著述' => '喝著述',
 '喝著錄' => '喝著錄',
+'賈伯斯' => '喬布斯',
 '乔治·奥威尔' => '喬治·歐威爾',
-'單眼相機' => '單鏡反光機',
 '单反相机' => '單鏡反光機',
+'單眼相機' => '單鏡反光機',
 '嗅不著' => '嗅不着',
 '嗅得著' => '嗅得着',
 '嗅著' => '嗅着',
-'凱薩琳' => '嘉芙蓮',
 '凯瑟琳' => '嘉芙蓮',
+'凱薩琳' => '嘉芙蓮',
 '嘯吒' => '嘯咤',
 '嘴里' => '嘴裏',
 '嚷著' => '嚷着',
@@ -15262,7 +15310,6 @@ $zh2HK = array(
 '蓋亞那' => '圭亞那',
 '地占' => '地佔',
 '地图里' => '地圖裏',
-'IP' => '地址',
 '堪培拉' => '坎培拉',
 '坐台' => '坐枱',
 '坐著' => '坐着',
@@ -15287,6 +15334,7 @@ $zh2HK = array(
 '賽普勒斯' => '塞浦路斯',
 '塞爾維亞與蒙特內哥羅' => '塞爾維亞和黑山',
 '塞席爾' => '塞舌爾',
+'境里' => '境裏',
 '壓著' => '壓着',
 '壓著作' => '壓著作',
 '壓著名' => '壓著名',
@@ -15320,13 +15368,13 @@ $zh2HK = array(
 '夾著者' => '夾著者',
 '夾著述' => '夾著述',
 '夾著錄' => '夾著錄',
-'奧占' => '奧佔',
 '奥占' => '奧佔',
+'奧占' => '奧佔',
 '歐巴馬' => '奧巴馬',
 '妆台' => '妝枱',
 '威斯伐倫' => '威斯特法倫',
-'威爾士' => '威爾斯',
 '威尔士' => '威爾斯',
+'威爾士' => '威爾斯',
 '子里' => '子裏',
 '字里行间' => '字裏行間',
 '存著' => '存着',
@@ -15386,10 +15434,10 @@ $zh2HK = array(
 '寫著錄' => '寫著錄',
 '宝里宝气' => '寶裏寶氣',
 '封面里' => '封面裏',
-'將占' => '將佔',
 '将占' => '將佔',
-'將占卜' => '將占卜',
+'將占' => '將佔',
 '将占卜' => '將占卜',
+'將占卜' => '將占卜',
 '专辑里' => '專輯裏',
 '尋著' => '尋着',
 '尋著作' => '尋著作',
@@ -15472,6 +15520,8 @@ $zh2HK = array(
 '幹著名' => '幹著名',
 '幹著稱' => '幹著稱',
 '幾內亞比索' => '幾內亞比紹',
+'庫德人' => '库爾德人',
+'庫德族' => '库爾德族',
 '店里' => '店裏',
 '坎城' => '康城',
 '戛纳' => '康城',
@@ -15484,8 +15534,8 @@ $zh2HK = array(
 '康著述' => '康著述',
 '康著錄' => '康著錄',
 '庙里' => '廟裏',
-'强占' => '強佔',
 '強占' => '強佔',
+'强占' => '強佔',
 '约翰斯顿岛' => '強斯頓環礁',
 '弹子台' => '彈子枱',
 '蹦床' => '彈床',
@@ -15521,8 +15571,8 @@ $zh2HK = array(
 '循著者' => '循著者',
 '循著述' => '循著述',
 '循著錄' => '循著錄',
-'徵占' => '徵佔',
 '征占' => '徵佔',
+'徵占' => '徵佔',
 '德占' => '德佔',
 '得克萨斯' => '德克薩斯',
 '德勒斯登' => '德累斯頓',
@@ -15596,8 +15646,8 @@ $zh2HK = array(
 '想著者' => '想著者',
 '想著述' => '想著述',
 '想著錄' => '想著錄',
-'義占' => '意佔',
 '意占' => '意佔',
+'義占' => '意佔',
 '義大利' => '意大利',
 '艾滋' => '愛滋',
 '愛著' => '愛着',
@@ -15786,8 +15836,8 @@ $zh2HK = array(
 '捆著者' => '捆著者',
 '捆著述' => '捆著述',
 '捆著錄' => '捆著錄',
-'俯卧撑' => '掌上壓',
 '伏地挺身' => '掌上壓',
+'俯卧撑' => '掌上壓',
 '掖著' => '掖着',
 '掖著作' => '掖著作',
 '掖著名' => '掖著名',
@@ -15897,10 +15947,10 @@ $zh2HK = array(
 '数字技术' => '數碼技術',
 '數位技術' => '數碼技術',
 '數位相機' => '數碼相機',
-'數碼訊號' => '數碼訊號',
 '数字信号' => '數碼訊號',
-'數位電視' => '數碼電視',
+'數碼訊號' => '數碼訊號',
 '数字电视' => '數碼電視',
+'數位電視' => '數碼電視',
 '數著作' => '數著作',
 '數著名' => '數著名',
 '數著稱' => '數著稱',
@@ -15933,8 +15983,8 @@ $zh2HK = array(
 '昂著者' => '昂著者',
 '昂著述' => '昂著述',
 '昂著錄' => '昂著錄',
-'星羅棋布' => '星羅棋佈',
 '星罗棋布' => '星羅棋佈',
+'星羅棋布' => '星羅棋佈',
 '映著' => '映着',
 '映著作' => '映著作',
 '映著名' => '映著名',
@@ -15950,8 +16000,8 @@ $zh2HK = array(
 '晃著者' => '晃著者',
 '晃著述' => '晃著述',
 '晃著錄' => '晃著錄',
-'芯片' => '晶片',
 '晶元' => '晶片',
+'芯片' => '晶片',
 '智慧型' => '智能',
 '智慧卡' => '智能卡',
 '智慧手機' => '智能手機',
@@ -15966,10 +16016,10 @@ $zh2HK = array(
 '暗著述' => '暗著述',
 '暗著錄' => '暗著錄',
 '暗里' => '暗裏',
-'會占' => '會佔',
 '会占' => '會佔',
-'會占卜' => '會占卜',
+'會占' => '會佔',
 '会占卜' => '會占卜',
+'會占卜' => '會占卜',
 '会里' => '會裏',
 '有著' => '有着',
 '有著作' => '有著作',
@@ -16026,15 +16076,19 @@ $zh2HK = array(
 '台历' => '枱曆',
 '台灯' => '枱燈',
 '台面上' => '枱面上',
+'台面化' => '枱面化',
 '柏林墙' => '柏林圍牆',
 '奧黛莉·朵杜' => '柯德莉·塔圖',
 '奥黛丽·赫本' => '柯德莉·夏萍',
 '奧黛麗·赫本' => '柯德莉·夏萍',
 '哥廷根' => '格丁根',
 '格瑞那達' => '格林納達',
+'格莱美奖' => '格林美獎',
+'葛萊美獎' => '格林美獎',
 '格鲁吉亚' => '格魯吉亞',
-'æ\92\9eç\90\83' => 'æ¡\8cç\90\83',
+'æ¡\86é\87\8c' => 'æ¡\86è£\8f',
 '台球' => '桌球',
+'撞球' => '桌球',
 '梅鐸' => '梅鐸',
 '默多克' => '梅鐸',
 '梳著' => '梳着',
@@ -16063,8 +16117,8 @@ $zh2HK = array(
 '標誌著' => '標誌着',
 '树林里' => '樹林裏',
 '工具機' => '機床',
-'機器人' => '機械人',
 '机器人' => '機械人',
+'機器人' => '機械人',
 '柜台' => '櫃枱',
 '历史里' => '歷史裏',
 '死里求生' => '死裏求生',
@@ -16109,8 +16163,8 @@ $zh2HK = array(
 '沖著。' => '沖著。',
 '沖著《' => '沖著《',
 '沖著,' => '沖著,',
-'沙烏地阿拉伯' => '沙特阿拉伯',
 '沙地阿拉伯' => '沙特阿拉伯',
+'沙烏地阿拉伯' => '沙特阿拉伯',
 '沙里淘金' => '沙裏淘金',
 '河里' => '河裏',
 '沿著' => '沿着',
@@ -16126,6 +16180,8 @@ $zh2HK = array(
 '玻里尼西亞' => '波利尼西亞',
 '波士尼亞' => '波斯尼亞',
 '波士尼亞赫塞哥維納' => '波斯尼亞黑塞哥維那',
+'宝莱坞' => '波里活',
+'寶萊塢' => '波里活',
 '幫浦' => '泵',
 '洞里' => '洞裏',
 '辛巴威' => '津巴布韋',
@@ -16140,8 +16196,8 @@ $zh2HK = array(
 '活著錄' => '活著錄',
 '移动网络' => '流動網絡',
 '行動網路' => '流動網絡',
-'行動電話' => '流動電話',
 '移动电话' => '流動電話',
+'行動電話' => '流動電話',
 '流著' => '流着',
 '流著作' => '流著作',
 '流著名' => '流著名',
@@ -16162,8 +16218,8 @@ $zh2HK = array(
 '浮著錄' => '浮著錄',
 '海上布雷' => '海上佈雷',
 '海洛因' => '海洛英',
-'海灣布雷' => '海灣佈雷',
 '海湾布雷' => '海灣佈雷',
+'海灣布雷' => '海灣佈雷',
 '涵著' => '涵着',
 '涵著作' => '涵著作',
 '涵著名' => '涵著名',
@@ -16299,8 +16355,8 @@ $zh2HK = array(
 '猜著述' => '猜著述',
 '猜著錄' => '猜著錄',
 '狱里' => '獄裏',
-'獨占' => '獨佔',
 '独占' => '獨佔',
+'獨占' => '獨佔',
 '獨著' => '獨着',
 '獨著作' => '獨著作',
 '獨著名' => '獨著名',
@@ -16365,16 +16421,16 @@ $zh2HK = array(
 '過著作' => '當著作',
 '當著名' => '當著名',
 '過著名' => '當著名',
-'過著書' => '當著書',
 '當著書' => '當著書',
+'過著書' => '當著書',
 '當著稱' => '當著稱',
 '過著稱' => '當著稱',
 '當著者' => '當著者',
 '過著者' => '當著者',
-'過著述' => '當著述',
 '當著述' => '當著述',
-'過著錄' => '當著錄',
+'過著述' => '當著述',
 '當著錄' => '當著錄',
+'過著錄' => '當著錄',
 '几内亚' => '畿內亞',
 '幾內亞' => '畿內亞',
 '迭代' => '疊代',
@@ -16387,8 +16443,8 @@ $zh2HK = array(
 '疑著述' => '疑著述',
 '疑著錄' => '疑著錄',
 '狂牛症' => '瘋牛症',
-'發布' => '發佈',
 '发布' => '發佈',
+'發布' => '發佈',
 '發著' => '發着',
 '發著《' => '發著《',
 '發著作' => '發著作',
@@ -16522,8 +16578,9 @@ $zh2HK = array(
 '什勒斯維希' => '石勒蘇益格',
 '硅' => '矽',
 '硅藻' => '硅藻',
-'硬體' => '硬件',
 '硬件' => '硬件',
+'硬體' => '硬件',
+'碗里' => '碗裏',
 '贝克汉姆' => '碧咸',
 '贝克漢' => '碧咸',
 '社里' => '社裏',
@@ -16538,18 +16595,18 @@ $zh2HK = array(
 '福著錄' => '福著錄',
 '秀发布' => '秀發佈',
 '私下里' => '私下裏',
-'隱私' => '私隱',
 '隐私' => '私隱',
+'隱私' => '私隱',
 '葛摩' => '科摩羅',
 '程序员' => '程式設計師',
 '捷豹' => '積架',
-'穩占' => '穩佔',
 '稳占' => '穩佔',
+'穩占' => '穩佔',
 '穫著' => '穫着',
 '空中布雷' => '空中佈雷',
 '空投布雷' => '空投佈雷',
-'空氣品質' => '空氣質素',
 '空气质量' => '空氣質素',
+'空氣品質' => '空氣質素',
 '空著' => '空着',
 '空著作' => '空著作',
 '空著名' => '空著名',
@@ -16558,8 +16615,8 @@ $zh2HK = array(
 '空著者' => '空著者',
 '空著述' => '空著述',
 '空著錄' => '空著錄',
-'航天飞机' => '穿梭機',
 '太空梭' => '穿梭機',
+'航天飞机' => '穿梭機',
 '穿著' => '穿着',
 '穿著作' => '穿著作',
 '穿著名' => '穿著名',
@@ -16600,8 +16657,8 @@ $zh2HK = array(
 '节目里' => '節目裏',
 '簽著' => '簽着',
 '籃板球' => '籃板球',
-'麦克尔' => '米高',
 '迈克尔' => '米高',
+'麦克尔' => '米高',
 '迈克尔·欧文' => '米高·奧雲',
 '糊里糊涂' => '糊裏糊塗',
 '系列里' => '系列裏',
@@ -16610,8 +16667,8 @@ $zh2HK = array(
 '約占' => '約佔',
 '约占' => '約佔',
 '紐賓士域' => '紐賓士域',
-'索忍尼辛' => '索贊尼辛',
 '索尔仁尼琴' => '索贊尼辛',
+'索忍尼辛' => '索贊尼辛',
 '索馬利亞' => '索馬里',
 '索馬利里' => '索馬里',
 '紮著' => '紮着',
@@ -16624,8 +16681,8 @@ $zh2HK = array(
 '紮著錄' => '紮著錄',
 '组里' => '組裏',
 '吉他' => '結他',
-'结彩' => '結綵',
 '結彩' => '結綵',
+'结彩' => '結綵',
 '綁著' => '綁着',
 '綁著作' => '綁著作',
 '綁著名' => '綁著名',
@@ -16634,6 +16691,7 @@ $zh2HK = array(
 '綁著者' => '綁著者',
 '綁著述' => '綁著述',
 '綁著錄' => '綁著錄',
+'网站里' => '網站裏',
 '網路' => '網絡',
 '网里' => '網裏',
 '彩带' => '綵帶',
@@ -16654,6 +16712,7 @@ $zh2HK = array(
 '緝凶' => '緝兇',
 '县里' => '縣裏',
 '缝里' => '縫裏',
+'縱著' => '縱着',
 '总数里' => '總數裏',
 '尖峰時段' => '繁忙時段',
 '尖峰時間' => '繁忙時間',
@@ -16667,8 +16726,8 @@ $zh2HK = array(
 '繞著者' => '繞著者',
 '繞著述' => '繞著述',
 '繞著錄' => '繞著錄',
-'繫著' => '繫着',
 '系着' => '繫着',
+'繫著' => '繫着',
 '纏著' => '纏着',
 '纏著作' => '纏著作',
 '纏著名' => '纏著名',
@@ -16777,8 +16836,8 @@ $zh2HK = array(
 '與著述' => '與著述',
 '與著錄' => '與著錄',
 '舒马赫' => '舒麥加',
-'爱荷华' => '艾奧瓦',
 '愛荷華' => '艾奧瓦',
+'爱荷华' => '艾奧瓦',
 '埃菲尔' => '艾菲爾',
 '帕塔亚' => '芭達亞',
 '花盆里' => '花盆裏',
@@ -16794,25 +16853,25 @@ $zh2HK = array(
 '苦著錄' => '苦著錄',
 '苦里' => '苦裏',
 '英占' => '英佔',
-'大英國協' => '英聯邦',
 '共和联邦' => '英聯邦',
+'大英國協' => '英聯邦',
 '草丛里' => '草叢裏',
 '霍爾斯坦' => '荷爾斯泰因',
-'好萊塢' => '荷里活',
 '好莱坞' => '荷里活',
+'好萊塢' => '荷里活',
 '庄里' => '莊裏',
 '莫三比克' => '莫桑比克',
-'瓦倫西亞' => '華倫西亞',
 '巴伦西亚' => '華倫西亞',
 '巴倫西亞' => '華倫西亞',
+'瓦倫西亞' => '華倫西亞',
 '瓦文萨' => '華里沙',
 '華勒沙' => '華里沙',
 '菲利普亲王' => '菲臘親王',
 '菲利普親王' => '菲臘親王',
 '賴索托' => '萊索托',
 '马恩岛' => '萌島',
-'马自达' => '萬事得',
 '馬自達' => '萬事得',
+'马自达' => '萬事得',
 '万历朝鲜战争' => '萬曆朝鮮戰爭',
 '落著' => '落着',
 '落著作' => '落著作',
@@ -16825,8 +16884,8 @@ $zh2HK = array(
 '葉爾欽' => '葉利欽',
 '葡占' => '葡佔',
 '葫芦里卖甚么药' => '葫蘆裏賣甚麼藥',
-'蒙特婁' => '蒙特利爾',
 '滿地可' => '蒙特利爾',
+'蒙特婁' => '蒙特利爾',
 '蒙著' => '蒙着',
 '蒙著作' => '蒙著作',
 '蒙著名' => '蒙著名',
@@ -16836,6 +16895,9 @@ $zh2HK = array(
 '蒙著述' => '蒙著述',
 '蒙著錄' => '蒙著錄',
 '蓋著' => '蓋着',
+'蓋著作' => '蓋著作',
+'蓋著名' => '蓋著名',
+'蓋著稱' => '蓋著稱',
 '肖斯塔科维奇' => '蕭士達高維契',
 '蕭士塔高維奇' => '蕭士達高維契',
 '肖邦' => '蕭邦',
@@ -16870,6 +16932,7 @@ $zh2HK = array(
 '蜜里调油' => '蜜裏調油',
 '荧屏' => '螢屏',
 '屏幕' => '螢幕',
+'行家里手' => '行家裏手',
 '首席执行官' => '行政總裁',
 '行著' => '行着',
 '行著作' => '行著作',
@@ -16903,7 +16966,6 @@ $zh2HK = array(
 '里带' => '裏帶',
 '里弦' => '裏弦',
 '里应外合' => '裏應外合',
-'里手' => '裏手',
 '里海' => '裏海',
 '里脊' => '裏脊',
 '里衣' => '裏衣',
@@ -16933,11 +16995,12 @@ $zh2HK = array(
 '裹著錄' => '裹著錄',
 '衬里' => '襯裏',
 '西占' => '西佔',
-'塞维利亚' => '西維爾',
 '塞維亞' => '西維爾',
+'塞维利亚' => '西維爾',
 '要占' => '要佔',
 '要占卜' => '要占卜',
 '覆著' => '覆着',
+'覆蓋著' => '覆蓋着',
 '見著' => '見着',
 '見著作' => '見著作',
 '見著名' => '見著名',
@@ -16946,9 +17009,12 @@ $zh2HK = array(
 '見著者' => '見著者',
 '見著述' => '見著述',
 '見著錄' => '見著錄',
+'視著' => '視着',
+'視著名' => '視著名',
 '角落里' => '角落裏',
 '分辨率' => '解像度',
 '解析度' => '解像度',
+'言里' => '言裏',
 '計畫' => '計劃',
 '記著' => '記着',
 '記著作' => '記著作',
@@ -17022,6 +17088,7 @@ $zh2HK = array(
 '貞著述' => '貞著述',
 '貞著錄' => '貞著錄',
 '負著' => '負着',
+'貢寮國' => '貢寮國',
 '買凶' => '買兇',
 '費占' => '費佔',
 '费占' => '費佔',
@@ -17242,11 +17309,10 @@ $zh2HK = array(
 '遠著者' => '遠著者',
 '遠著述' => '遠著述',
 '遠著錄' => '遠著錄',
-'還占' => '還佔',
 '还占' => '還佔',
+'還占' => '還佔',
 '邋里邋遢' => '邋裏邋遢',
 '那里' => '那裏',
-'奥斯曼' => '鄂圖曼',
 '配合著' => '配合着',
 '配合著名' => '配合著名',
 '配图里' => '配圖裏',
@@ -17267,14 +17333,14 @@ $zh2HK = array(
 '醜著者' => '醜著者',
 '醜著述' => '醜著述',
 '醜著錄' => '醜著錄',
-'醯壺' => '醯壺',
 '醯壶' => '醯壺',
+'醯壺' => '醯壺',
 '醯醋' => '醯醋',
 '醯醢' => '醯醢',
 '醯酱' => '醯醬',
 '醯醬' => '醯醬',
-'醯鸡' => '醯雞',
 '醯雞' => '醯雞',
+'醯鸡' => '醯雞',
 '釀著' => '釀着',
 '釀著作' => '釀著作',
 '釀著名' => '釀著名',
@@ -17387,8 +17453,8 @@ $zh2HK = array(
 '隨著者' => '隨著者',
 '隨著述' => '隨著述',
 '隨著錄' => '隨著錄',
-'隱占' => '隱佔',
 '隐占' => '隱佔',
+'隱占' => '隱佔',
 '雅爾達' => '雅爾塔',
 '雅著' => '雅着',
 '雅穆索戈' => '雅穆蘇克雷',
@@ -17413,10 +17479,11 @@ $zh2HK = array(
 '冰淇淋' => '雪糕',
 '冰激凌' => '雪糕',
 '雪里' => '雪裏',
-'萊特灣' => '雷伊泰灣',
 '莱特湾' => '雷伊泰灣',
-'晶體管' => '電晶體',
+'萊特灣' => '雷伊泰灣',
 '晶体管' => '電晶體',
+'晶體管' => '電晶體',
+'电梯里' => '電梯裏',
 '电脑程序' => '電腦程式',
 '计算机程序' => '電腦程式',
 '霄裡' => '霄裡',
@@ -17427,12 +17494,12 @@ $zh2HK = array(
 '靠著' => '靠着',
 '靠著作' => '靠著作',
 '靠著名' => '靠著名',
-'靠著稱' => '靠著稱',
 '靠著称' => '靠著稱',
+'靠著稱' => '靠著稱',
 '靠著者' => '靠著者',
 '靠著述' => '靠著述',
-'靠著錄' => '靠著錄',
 '靠著录' => '靠著錄',
+'靠著錄' => '靠著錄',
 '鞋里' => '鞋裏',
 '鞭辟入里' => '鞭辟入裏',
 '朝鲜战争' => '韓戰',
@@ -17460,8 +17527,8 @@ $zh2HK = array(
 '順著者' => '順著者',
 '順著述' => '順著述',
 '順著錄' => '順著錄',
-'颁布' => '頒佈',
 '頒布' => '頒佈',
+'颁布' => '頒佈',
 '領著' => '領着',
 '領著作' => '領著作',
 '領著名' => '領著名',
@@ -17485,8 +17552,8 @@ $zh2HK = array(
 '餐台' => '餐枱',
 '馆里' => '館裏',
 '糊口' => '餬口',
-'马里兰' => '馬利蘭',
 '馬里蘭' => '馬利蘭',
+'马里兰' => '馬利蘭',
 '马拉特·萨芬' => '馬拉特·沙芬',
 '馬斯垂克' => '馬斯特里赫特',
 '馬爾地夫' => '馬爾代夫',
@@ -17545,8 +17612,8 @@ $zh2HK = array(
 '鬧著' => '鬧着',
 '牛軋' => '鳥結',
 '牛轧' => '鳥結',
-'鸠占' => '鳩佔',
 '鳩占' => '鳩佔',
+'鸠占' => '鳩佔',
 '麗著' => '麗着',
 '麗著作' => '麗著作',
 '麗著名' => '麗著名',
@@ -17566,21 +17633,21 @@ $zh2HK = array(
 '里氏3' => '黎克特制3',
 '芮氏4' => '黎克特制4',
 '里氏4' => '黎克特制4',
-'里氏5' => '黎克特制5',
 '芮氏5' => '黎克特制5',
-'里氏6' => '黎克特制6',
+'里氏5' => '黎克特制5',
 '芮氏6' => '黎克特制6',
-'里氏7' => '黎克特制7',
+'里氏6' => '黎克特制6',
 '芮氏7' => '黎克特制7',
-'里氏8' => '黎克特制8',
+'里氏7' => '黎克特制7',
 '芮氏8' => '黎克特制8',
+'里氏8' => '黎克特制8',
 '芮氏9' => '黎克特制9',
 '里氏9' => '黎克特制9',
 '芮氏地震規模' => '黎克特制地震震級',
 '里氏地震规模' => '黎克特制地震震級',
-'里氏震级' => '黎克特制震級',
 '芮氏規模' => '黎克特制震級',
 '里氏规模' => '黎克特制震級',
+'里氏震级' => '黎克特制震級',
 '黏著' => '黏着',
 '黏著作' => '黏著作',
 '黏著名' => '黏著名',
@@ -17614,11 +17681,11 @@ $zh2CN = array(
 '下著' => '下着',
 '下著作' => '下著作',
 '下著名' => '下著名',
-'下著錄' => '下著录',
 '下著录' => '下著录',
+'下著錄' => '下著录',
 '下著有' => '下著有',
-'下著稱' => '下著称',
 '下著称' => '下著称',
+'下著稱' => '下著称',
 '下著者' => '下著者',
 '下著述' => '下著述',
 '不著' => '不着',
@@ -17646,8 +17713,8 @@ $zh2CN = array(
 '邱吉爾' => '丘吉尔',
 'C型肝炎' => '丙型肝炎',
 'C肝' => '丙肝',
-'東協' => '东盟',
 '亚细安' => '东盟',
+'東協' => '东盟',
 '臨著' => '临着',
 '臨著書' => '临著书',
 '臨著作' => '临著作',
@@ -17674,7 +17741,6 @@ $zh2CN = array(
 '麗著者' => '丽著者',
 '麗著述' => '丽著述',
 '麼著' => '么着',
-'烏茲別克' => '乌兹别克斯坦',
 '樂著' => '乐着',
 '樂著書' => '乐著书',
 '樂著作' => '乐著作',
@@ -17683,6 +17749,7 @@ $zh2CN = array(
 '樂著稱' => '乐著称',
 '樂著者' => '乐著者',
 '樂著述' => '乐著述',
+'賈伯斯' => '乔布斯',
 '喬治·歐威爾' => '乔治·奥威尔',
 '乘著' => '乘着',
 '乘著書' => '乘著书',
@@ -17709,8 +17776,8 @@ $zh2CN = array(
 '二極體' => '二极管',
 '二進位制' => '二进位制',
 '二進位' => '二进制',
-'網際網路' => '互联网',
 '網際網絡' => '互联网',
+'網際網路' => '互联网',
 '亞歷山卓' => '亚历山大',
 '雅穆索戈' => '亚穆苏克罗',
 '互動式' => '交互式',
@@ -17749,6 +17816,7 @@ $zh2CN = array(
 '伊利諾伊' => '伊利诺伊',
 '伊斯蘭瑪巴德' => '伊斯兰堡',
 '伊斯坦堡' => '伊斯坦布尔',
+'伏著' => '伏着',
 '優先順序' => '优先级',
 '傳著' => '传着',
 '傳著書' => '传著书',
@@ -17769,7 +17837,6 @@ $zh2CN = array(
 '伴著者' => '伴著者',
 '伴著述' => '伴著述',
 '點陣圖' => '位图',
-'IP' => '位址',
 '低著' => '低着',
 '低著書' => '低著书',
 '低著作' => '低著作',
@@ -17817,8 +17884,8 @@ $zh2CN = array(
 '信著稱' => '信著称',
 '信著者' => '信著者',
 '信著述' => '信著述',
-'掌上壓' => '俯卧撑',
 '伏地挺身' => '俯卧撑',
+'掌上壓' => '俯卧撑',
 '倒帳' => '倒账',
 '候著' => '候着',
 '候著書' => '候著书',
@@ -17828,8 +17895,8 @@ $zh2CN = array(
 '候著稱' => '候著称',
 '候著者' => '候著者',
 '候著述' => '候著述',
-'藉著' => '借着',
 '借著' => '借着',
+'藉著' => '借着',
 '借著書' => '借著书',
 '借著作' => '借著作',
 '借著名' => '借著名',
@@ -17943,8 +18010,8 @@ $zh2CN = array(
 '嘉芙蓮' => '凯瑟琳',
 '份內' => '分内',
 '份外' => '分外',
-'解析度' => '分辨率',
 '解像度' => '分辨率',
+'解析度' => '分辨率',
 '份量' => '分量',
 '車諾比' => '切尔诺贝利',
 '劃著' => '划着',
@@ -18016,8 +18083,8 @@ $zh2CN = array(
 '十進位制' => '十进位制',
 '十進位' => '十进制',
 '公升' => '升',
-'單鏡反光機' => '单反相机',
 '單眼相機' => '单反相机',
+'單鏡反光機' => '单反相机',
 '波札那' => '博茨瓦纳',
 '占著' => '占着',
 '占著作' => '占著作',
@@ -18038,12 +18105,12 @@ $zh2CN = array(
 '印著者' => '印著者',
 '印著述' => '印著述',
 '瓜地馬拉' => '危地马拉',
+'厄瓜多' => '厄瓜多尔',
 '厄瓜多尔' => '厄瓜多尔',
 '厄瓜多爾' => '厄瓜多尔',
-'厄瓜多' => '厄瓜多尔',
-'厄立特里亞' => '厄立特里亚',
 '厄利垂亚' => '厄立特里亚',
 '厄利垂亞' => '厄立特里亚',
+'厄立特里亞' => '厄立特里亚',
 '壓著' => '压着',
 '壓著書' => '压著书',
 '壓著作' => '压著作',
@@ -18083,6 +18150,8 @@ $zh2CN = array(
 '變著稱' => '变著称',
 '變著者' => '变著者',
 '變著述' => '变著述',
+'隻字片語' => '只字片语',
+'隻言片語' => '只言片语',
 '唯讀' => '只读',
 '叫著' => '叫着',
 '叫著書' => '叫著书',
@@ -18146,7 +18215,6 @@ $zh2CN = array(
 '味著述' => '味著述',
 '咖哩' => '咖喱',
 '諮' => '咨',
-'哈薩克' => '哈萨克斯坦',
 '響著' => '响着',
 '響著書' => '响著书',
 '響著作' => '响著作',
@@ -18226,10 +18294,9 @@ $zh2CN = array(
 '土魯斯' => '图卢兹',
 '吐瓦魯' => '图瓦卢',
 '原子筆' => '圆珠笔',
-'土庫曼' => '土库曼斯坦',
 '聖露西亞' => '圣卢西亚',
-'聖吉斯納域斯' => '圣基茨和尼维斯',
 '聖克里斯多福及尼維斯' => '圣基茨和尼维斯',
+'聖吉斯納域斯' => '圣基茨和尼维斯',
 '聖文森及格瑞那丁' => '圣文森特和格林纳丁斯',
 '聖馬利諾' => '圣马力诺',
 '在著' => '在着',
@@ -18259,14 +18326,12 @@ $zh2CN = array(
 '吉里巴斯' => '基里巴斯',
 '堂姊' => '堂姐',
 '坎培拉' => '堪培拉',
-'塔吉克' => '塔吉克斯坦',
-'塔吉克斯坦' => '塔吉克斯坦',
 '塞爾維亞與蒙特內哥羅' => '塞尔维亚和黑山',
 '塞拉利昂' => '塞拉利昂',
 '塞普勒斯' => '塞浦路斯',
 '賽普勒斯' => '塞浦路斯',
-'西維爾' => '塞维利亚',
 '塞維亞' => '塞维利亚',
+'西維爾' => '塞维利亚',
 '塞席爾' => '塞舌尔',
 '音效卡' => '声卡',
 '備著' => '备着',
@@ -18345,9 +18410,10 @@ $zh2CN = array(
 '定著稱' => '定著称',
 '定著者' => '定著者',
 '定著述' => '定著述',
+'波里活' => '宝莱坞',
 '寬頻' => '宽带',
-'密西根' => '密歇根',
 '密执安' => '密歇根',
+'密西根' => '密歇根',
 '對著' => '对着',
 '對著書' => '对著书',
 '對著作' => '对著作',
@@ -18379,10 +18445,10 @@ $zh2CN = array(
 '展著稱' => '展著称',
 '展著者' => '展著者',
 '展著述' => '展著述',
-'華倫西亞' => '巴伦西亚',
 '瓦倫西亞' => '巴伦西亚',
-'巴塞隆納' => '巴塞罗那',
+'華倫西亞' => '巴伦西亚',
 '巴塞隆拿' => '巴塞罗那',
+'巴塞隆納' => '巴塞罗那',
 '巴斯拉' => '巴士拉',
 '帕邁拉環礁' => '巴尔米拉环礁',
 '巴貝多' => '巴巴多斯',
@@ -18417,6 +18483,8 @@ $zh2CN = array(
 '幹著名' => '幹著名',
 '幹著稱' => '幹著称',
 '庇護著' => '庇护着',
+'庫德人' => '库尔德人',
+'庫德族' => '库尔德族',
 '應用程式' => '应用程序',
 '應著' => '应着',
 '應著書' => '应著书',
@@ -18663,8 +18731,8 @@ $zh2CN = array(
 '披著稱' => '披著称',
 '披著者' => '披著者',
 '披著述' => '披著述',
-'擡著' => '抬着',
 '抬著' => '抬着',
+'擡著' => '抬着',
 '抬著作' => '抬著作',
 '抬著名' => '抬著名',
 '抬著錄' => '抬著录',
@@ -18847,8 +18915,8 @@ $zh2CN = array(
 '敞著稱' => '敞著称',
 '敞著者' => '敞著者',
 '敞著述' => '敞著述',
-'數碼訊號' => '数字信号',
 '數位訊號' => '数字信号',
+'數碼訊號' => '数字信号',
 '數位技術' => '数字技术',
 '數碼技術' => '数字技术',
 '數位電視' => '数字电视',
@@ -18879,6 +18947,7 @@ $zh2CN = array(
 '斥著稱' => '斥著称',
 '斥著者' => '斥著者',
 '斥著述' => '斥著述',
+'史丹福' => '斯坦福',
 '史達林' => '斯大林',
 '史瓦濟蘭' => '斯威士兰',
 '斯洛維尼亞' => '斯洛文尼亚',
@@ -19008,6 +19077,8 @@ $zh2CN = array(
 '查維茲' => '查韦斯',
 '標誌著' => '标志着',
 '格瑞那達' => '格林纳达',
+'格林美獎' => '格莱美奖',
+'葛萊美獎' => '格莱美奖',
 '森巴舞' => '桑巴舞',
 '梅赫西迪' => '梅赛德斯',
 '夢著' => '梦着',
@@ -19032,8 +19103,8 @@ $zh2CN = array(
 '庇里牛斯' => '比利牛斯',
 '畢卡索' => '毕加索',
 '茅利塔尼亞' => '毛里塔尼亚',
-'毛里裘斯' => '毛里求斯',
 '模里西斯' => '毛里求斯',
+'毛里裘斯' => '毛里求斯',
 '公厘' => '毫米',
 '公釐' => '毫米',
 '胺基酸' => '氨基酸',
@@ -19057,8 +19128,8 @@ $zh2CN = array(
 '沉著稱' => '沉著称',
 '沉著者' => '沉著者',
 '沉著述' => '沉著述',
-'沙烏地阿拉伯' => '沙特阿拉伯',
 '沙地阿拉伯' => '沙特阿拉伯',
+'沙烏地阿拉伯' => '沙特阿拉伯',
 '沿著' => '沿着',
 '沿著書' => '沿著书',
 '沿著作' => '沿著作',
@@ -19228,8 +19299,8 @@ $zh2CN = array(
 '猜著者' => '猜著者',
 '猜著述' => '猜著述',
 '玩著' => '玩着',
-'萬那杜' => '瓦努阿图',
 '溫納圖' => '瓦努阿图',
+'萬那杜' => '瓦努阿图',
 '華勒沙' => '瓦文萨',
 '華里沙' => '瓦文萨',
 '甜著' => '甜着',
@@ -19287,6 +19358,10 @@ $zh2CN = array(
 '皺著者' => '皱著者',
 '皺著述' => '皱著述',
 '鹽份' => '盐分',
+'蓋著' => '盖着',
+'蓋著作' => '盖著作',
+'蓋著名' => '盖著名',
+'蓋著稱' => '盖著称',
 '盛著' => '盛着',
 '盛著書' => '盛著书',
 '盛著作' => '盛著作',
@@ -19323,8 +19398,8 @@ $zh2CN = array(
 '著絲' => '着丝',
 '著麼' => '着么',
 '著人' => '着人',
-'著甚麽' => '着什么',
 '著什麼' => '着什么',
+'著甚麽' => '着什么',
 '著他' => '着他',
 '著令' => '着令',
 '著位' => '着位',
@@ -19453,8 +19528,8 @@ $zh2CN = array(
 '瞪著稱' => '瞪著称',
 '瞪著者' => '瞪著者',
 '瞪著述' => '瞪著述',
-'智財權' => '知识产权',
 '智慧財產權' => '知识产权',
+'智財權' => '知识产权',
 '知識份子' => '知识分子',
 '什勒斯維希' => '石勒苏益格',
 '矽塵' => '矽尘',
@@ -19482,15 +19557,15 @@ $zh2CN = array(
 '葛摩' => '科摩罗',
 '象牙海岸' => '科特迪瓦',
 '積極份子' => '积极分子',
-'行動電話' => '移动电话',
 '流動電話' => '移动电话',
-'行動網路' => '移动网络',
+'行動電話' => '移动电话',
 '流動網絡' => '移动网络',
+'行動網路' => '移动网络',
 '程式設計師' => '程序员',
 '程式控制' => '程控',
 '空中巴士' => '空中客车',
-'空氣質素' => '空气质量',
 '空氣品質' => '空气质量',
+'空氣質素' => '空气质量',
 '空著' => '空着',
 '空著書' => '空著书',
 '空著作' => '空著作',
@@ -19553,13 +19628,14 @@ $zh2CN = array(
 '糖份' => '糖分',
 '動畫影集' => '系列动画片',
 '繫著' => '系着',
-'索贊尼辛' => '索尔仁尼琴',
 '索忍尼辛' => '索尔仁尼琴',
+'索贊尼辛' => '索尔仁尼琴',
 '蘇辛尼津' => '索尔仁尼琴',
 '索馬利亞' => '索马里',
 '索馬利蘭' => '索马里兰',
 '正體中文' => '繁体中文',
 '強斯頓環礁' => '约翰斯顿岛',
+'縱著' => '纵着',
 '組份' => '组分',
 '經常帳' => '经常账',
 '經濟帳' => '经济账',
@@ -19662,8 +19738,8 @@ $zh2CN = array(
 '藝著者' => '艺著者',
 '藝著述' => '艺著述',
 '愛滋' => '艾滋',
-'晶片' => '芯片',
 '晶元' => '芯片',
+'晶片' => '芯片',
 '蘇利南' => '苏里南',
 '苦著' => '苦着',
 '苦著書' => '苦著书',
@@ -19675,8 +19751,8 @@ $zh2CN = array(
 '苦著述' => '苦著述',
 '英吋' => '英寸',
 '英呎' => '英尺',
-'大英國協' => '英联邦',
 '共和联邦' => '英联邦',
+'大英國協' => '英联邦',
 '士多啤梨' => '草莓',
 '螢光棒' => '荧光棒',
 '螢屏' => '荧屏',
@@ -19684,8 +19760,8 @@ $zh2CN = array(
 '莫三比克' => '莫桑比克',
 '雷伊泰灣' => '莱特湾',
 '賴索托' => '莱索托',
-'穫著' => '获着',
 '獲著' => '获着',
+'穫著' => '获着',
 '獲著書' => '获著书',
 '獲著作' => '获著作',
 '獲著名' => '获著名',
@@ -19712,7 +19788,6 @@ $zh2CN = array(
 '蒙著稱' => '蒙著称',
 '蒙著者' => '蒙著者',
 '蒙著述' => '蒙著述',
-'蓋著' => '蓋着',
 '藍芽' => '蓝牙',
 '薛丁格' => '薛定谔',
 '藏著' => '藏着',
@@ -19765,6 +19840,7 @@ $zh2CN = array(
 '裹著者' => '裹著者',
 '裹著述' => '裹著述',
 '要帳' => '要账',
+'覆蓋著' => '覆盖着',
 '覆著' => '覆着',
 '見著' => '见着',
 '見著書' => '见著书',
@@ -19774,6 +19850,8 @@ $zh2CN = array(
 '見著稱' => '见著称',
 '見著者' => '见著者',
 '見著述' => '见著述',
+'視著' => '视着',
+'視著名' => '视著名',
 '占士邦' => '詹姆斯·邦德',
 '警戒著' => '警戒着',
 '計畫' => '计划',
@@ -19788,7 +19866,6 @@ $zh2CN = array(
 '記著者' => '记著者',
 '記著述' => '记著述',
 '記帳' => '记账',
-'辭彙' => '词汇',
 '片語' => '词组',
 '試著' => '试着',
 '試著書' => '试著书',
@@ -19834,6 +19911,7 @@ $zh2CN = array(
 '貞著者' => '贞著者',
 '貞著述' => '贞著述',
 '負著' => '负着',
+'貢寮國' => '贡寮国',
 '帳上' => '账上',
 '帳冊' => '账册',
 '帳務' => '账务',
@@ -20091,6 +20169,7 @@ $zh2CN = array(
 '鈽' => '钚',
 '鍅' => '钫',
 '狄托' => '铁托',
+'卯足' => '铆足',
 '鋪著' => '铺着',
 '鋪著書' => '铺著书',
 '鋪著作' => '铺著作',
@@ -20106,8 +20185,8 @@ $zh2CN = array(
 '鑀' => '锿',
 '鋂' => '镅',
 '錼' => '镎',
-'孟德爾頌' => '门德尔松',
 '孟德爾遜' => '门德尔松',
+'孟德爾頌' => '门德尔松',
 '快閃記憶體' => '闪存',
 '閉著' => '闭着',
 '閉著書' => '闭著书',
@@ -20117,8 +20196,8 @@ $zh2CN = array(
 '閉著稱' => '闭著称',
 '閉著者' => '闭著者',
 '閉著述' => '闭著述',
-'閒著' => '闲着',
 '閑著' => '闲着',
+'閒著' => '闲着',
 '閑著書' => '闲著书',
 '閑著作' => '闲著作',
 '閑著名' => '闲著名',
@@ -20184,7 +20263,6 @@ $zh2CN = array(
 '雅著稱' => '雅著称',
 '雅著者' => '雅著者',
 '雅著述' => '雅著述',
-'山葉' => '雅马哈',
 '雷諾瓦' => '雷诺阿',
 '荷姆茲' => '霍尔木兹',
 '非份' => '非分',
@@ -20221,8 +20299,8 @@ $zh2CN = array(
 '領著稱' => '领著称',
 '領著者' => '领著者',
 '領著述' => '领著述',
-'飄著' => '飘着',
 '飃著' => '飘着',
+'飄著' => '飘着',
 '飄著書' => '飘著书',
 '飄著作' => '飘著作',
 '飄著名' => '飘著名',
index 83185e4..f4f2a2a 100644 (file)
@@ -504,7 +504,7 @@ class HistoryPager extends ReverseChronologicalPager {
                if ( $user->isAllowed( 'deleterevision' ) ) {
                        $actionButtons .= $this->getRevisionButton( 'revisiondelete', 'showhideselectedversions' );
                }
-               if ( $user->isAllowed( 'changetags' ) ) {
+               if ( ChangeTags::showTagEditingUI( $user ) ) {
                        $actionButtons .= $this->getRevisionButton( 'editchangetags', 'history-edit-tags' );
                }
                if ( $actionButtons ) {
@@ -631,14 +631,14 @@ class HistoryPager extends ReverseChronologicalPager {
                $del = '';
                $user = $this->getUser();
                $canRevDelete = $user->isAllowed( 'deleterevision' );
-               $canModifyTags = $user->isAllowed( 'changetags' );
+               $showTagEditUI = ChangeTags::showTagEditingUI( $user );
                // Show checkboxes for each revision, to allow for revision deletion and
                // change tags
-               if ( $canRevDelete || $canModifyTags ) {
+               if ( $canRevDelete || $showTagEditUI ) {
                        $this->preventClickjacking();
                        // If revision was hidden from sysops and we don't need the checkbox
                        // for anything else, disable it
-                       if ( !$canModifyTags && !$rev->userCan( Revision::DELETED_RESTRICTED, $user ) ) {
+                       if ( !$showTagEditUI && !$rev->userCan( Revision::DELETED_RESTRICTED, $user ) ) {
                                $del = Xml::check( 'deleterevisions', false, array( 'disabled' => 'disabled' ) );
                        // Otherwise, enable the checkbox...
                        } else {
index de4f977..203c687 100644 (file)
@@ -64,12 +64,12 @@ class InfoAction extends FormlessAction {
         * @param Title $title Title to clear cache for
         */
        public static function invalidateCache( Title $title ) {
-               global $wgMemc;
+               $cache = ObjectCache::getMainWANInstance();
 
                $revision = Revision::newFromTitle( $title, 0, Revision::READ_LATEST );
                if ( $revision !== null ) {
                        $key = wfMemcKey( 'infoaction', sha1( $title->getPrefixedText() ), $revision->getId() );
-                       $wgMemc->delete( $key );
+                       $cache->delete( $key );
                }
        }
 
@@ -193,7 +193,7 @@ class InfoAction extends FormlessAction {
         * @return array
         */
        protected function pageInfo() {
-               global $wgContLang, $wgMemc;
+               global $wgContLang;
 
                $user = $this->getUser();
                $lang = $this->getLanguage();
@@ -201,16 +201,17 @@ class InfoAction extends FormlessAction {
                $id = $title->getArticleID();
                $config = $this->context->getConfig();
 
+               $cache = ObjectCache::getMainWANInstance();
                $memcKey = wfMemcKey( 'infoaction',
                        sha1( $title->getPrefixedText() ), $this->page->getLatest() );
-               $pageCounts = $wgMemc->get( $memcKey );
+               $pageCounts = $cache->get( $memcKey );
                $version = isset( $pageCounts['cacheversion'] ) ? $pageCounts['cacheversion'] : false;
                if ( $pageCounts === false || $version !== self::CACHE_VERSION ) {
                        // Get page information that would be too "expensive" to retrieve by normal means
                        $pageCounts = $this->pageCounts( $title );
                        $pageCounts['cacheversion'] = self::CACHE_VERSION;
 
-                       $wgMemc->set( $memcKey, $pageCounts );
+                       $cache->set( $memcKey, $pageCounts );
                }
 
                // Get page properties
index 143fc0f..4870167 100644 (file)
@@ -2302,8 +2302,10 @@ abstract class ApiBase extends ContextSource {
         *
         * @param string[] &$help Array of help data
         * @param array $options Options passed to ApiHelp::getHelp
+        * @param array &$tocData If a TOC is being generated, this array has keys
+        *   as anchors in the page and values as for Linker::generateTOC().
         */
-       public function modifyHelp( array &$help, array $options ) {
+       public function modifyHelp( array &$help, array $options, array &$tocData ) {
        }
 
        /**@}*/
@@ -2829,6 +2831,7 @@ abstract class ApiBase extends ContextSource {
         * @return array
         */
        public function getResultData() {
+               wfDeprecated( __METHOD__, '1.25' );
                return $this->getResult()->getData();
        }
 
index 72aee32..26b5f0e 100644 (file)
@@ -113,27 +113,13 @@ class ApiBlock extends ApiBase {
                }
 
                $res['reason'] = $params['reason'];
-               if ( $params['anononly'] ) {
-                       $res['anononly'] = '';
-               }
-               if ( $params['nocreate'] ) {
-                       $res['nocreate'] = '';
-               }
-               if ( $params['autoblock'] ) {
-                       $res['autoblock'] = '';
-               }
-               if ( $params['noemail'] ) {
-                       $res['noemail'] = '';
-               }
-               if ( $params['hidename'] ) {
-                       $res['hidename'] = '';
-               }
-               if ( $params['allowusertalk'] ) {
-                       $res['allowusertalk'] = '';
-               }
-               if ( $params['watchuser'] ) {
-                       $res['watchuser'] = '';
-               }
+               $res['anononly'] = $params['anononly'];
+               $res['nocreate'] = $params['nocreate'];
+               $res['autoblock'] = $params['autoblock'];
+               $res['noemail'] = $params['noemail'];
+               $res['hidename'] = $params['hidename'];
+               $res['allowusertalk'] = $params['allowusertalk'];
+               $res['watchuser'] = $params['watchuser'];
 
                $this->getResult()->addValue( null, $this->getModuleName(), $res );
        }
index dea1cf4..354f4e7 100644 (file)
@@ -231,7 +231,7 @@ class ApiContinuationManager {
                                ApiResult::ADD_ON_TOP | ApiResult::NO_SIZE_CHECK );
                }
                if ( $batchcomplete ) {
-                       $result->addValue( null, 'batchcomplete', '',
+                       $result->addValue( null, 'batchcomplete', true,
                                ApiResult::ADD_ON_TOP | ApiResult::NO_SIZE_CHECK );
                }
        }
index 601c64c..6ab8483 100644 (file)
@@ -490,17 +490,17 @@ class ApiEditPage extends ApiBase {
                                $this->dieStatus( $status );
 
                        case EditPage::AS_SUCCESS_NEW_ARTICLE:
-                               $r['new'] = '';
+                               $r['new'] = true;
                                // fall-through
 
                        case EditPage::AS_SUCCESS_UPDATE:
                                $r['result'] = 'Success';
                                $r['pageid'] = intval( $titleObj->getArticleID() );
                                $r['title'] = $titleObj->getPrefixedText();
-                               $r['contentmodel'] = $titleObj->getContentModel();
+                               $r['contentmodel'] = $articleObject->getContentModel();
                                $newRevId = $articleObject->getLatest();
                                if ( $newRevId == $oldRevId ) {
-                                       $r['nochange'] = '';
+                                       $r['nochange'] = true;
                                } else {
                                        $r['oldrevid'] = intval( $oldRevId );
                                        $r['newrevid'] = intval( $newRevId );
index 5c7717f..6d064eb 100644 (file)
@@ -96,9 +96,8 @@ class ApiExpandTemplates extends ApiBase {
                                $retval['parsetree'] = $xml;
                        } else {
                                // the old way
-                               $xml_result = array();
-                               ApiResult::setContentValue( $xml_result, 'xml', $xml );
-                               $result->addValue( null, 'parsetree', $xml_result );
+                               $result->addValue( null, 'parsetree', $xml );
+                               $result->addValue( null, ApiResult::META_BC_SUBELEMENTS, array( 'parsetree' ) );
                        }
                }
 
@@ -129,19 +128,13 @@ class ApiExpandTemplates extends ApiBase {
                                if ( isset( $prop['properties'] ) ) {
                                        $properties = $wgParser->getOutput()->getProperties();
                                        if ( $properties ) {
-                                               $properties_result = array();
-                                               foreach ( $properties as $name => $value ) {
-                                                       $entry = array();
-                                                       $entry['name'] = $name;
-                                                       ApiResult::setContentValue( $entry, 'value', $value );
-                                                       $properties_result[] = $entry;
-                                               }
-                                               ApiResult::setIndexedTagName( $properties_result, 'property' );
-                                               $retval['properties'] = $properties_result;
+                                               ApiResult::setArrayType( $properties, 'BCkvp', 'name' );
+                                               ApiResult::setIndexedTagName( $properties, 'property' );
+                                               $retval['properties'] = $properties;
                                        }
                                }
-                               if ( isset( $prop['volatile'] ) && $frame->isVolatile() ) {
-                                       $retval['volatile'] = '';
+                               if ( isset( $prop['volatile'] ) ) {
+                                       $retval['volatile'] = $frame->isVolatile();
                                }
                                if ( isset( $prop['ttl'] ) && $frame->getTTL() !== null ) {
                                        $retval['ttl'] = $frame->getTTL();
index d452bbd..d24112c 100644 (file)
@@ -66,9 +66,17 @@ class ApiFeedRecentChanges extends ApiBase {
 
                $formatter = $this->getFeedObject( $feedFormat, $specialClass );
 
-               // Everything is passed implicitly via $wgRequest… :(
-               // The row-getting functionality should maybe be factored out of ChangesListSpecialPage too…
+               // Parameters are passed via the request in the context… :(
+               $context = new DerivativeContext( $this );
+               $context->setRequest( new DerivativeRequest(
+                       $this->getRequest(),
+                       $this->params,
+                       $this->getRequest()->wasPosted()
+               ) );
+
+               // The row-getting functionality should be factored out of ChangesListSpecialPage too…
                $rc = new $specialClass();
+               $rc->setContext( $context );
                $rows = $rc->getRows();
 
                $feedItems = $rows ? ChangesFeed::buildItems( $rows ) : array();
index 26eac08..d078dc4 100644 (file)
@@ -32,6 +32,7 @@
 abstract class ApiFormatBase extends ApiBase {
        private $mIsHtml, $mFormat, $mUnescapeAmps, $mHelp;
        private $mBuffer, $mDisabled = false;
+       protected $mForceDefaultParams = false;
 
        /**
         * If $format ends with 'fm', pretty-print the output in HTML.
@@ -107,6 +108,34 @@ abstract class ApiFormatBase extends ApiBase {
                return true;
        }
 
+       /**
+        * Ignore request parameters, force a default.
+        *
+        * Used as a fallback if errors are being thrown.
+        * @since 1.26
+        */
+       public function forceDefaultParams() {
+               $this->mForceDefaultParams = true;
+       }
+
+       /**
+        * Overridden to honor $this->forceDefaultParams(), if applicable
+        * @since 1.26
+        */
+       protected function getParameterFromSettings( $paramName, $paramSettings, $parseLimit ) {
+               if ( !$this->mForceDefaultParams ) {
+                       return parent::getParameterFromSettings( $paramName, $paramSettings, $parseLimit );
+               }
+
+               if ( !is_array( $paramSettings ) ) {
+                       return $paramSettings;
+               } elseif ( isset( $paramSettings[self::PARAM_DFLT] ) ) {
+                       return $paramSettings[self::PARAM_DFLT];
+               } else {
+                       return null;
+               }
+       }
+
        /**
         * Initialize the printer function and prepare the output headers.
         * @param bool $unused Always false since 1.25
index dbd5645..fa0bac3 100644 (file)
@@ -130,7 +130,7 @@ class ApiFormatXml extends ApiFormatBase {
                                ? $value[ApiResult::META_PRESERVE_KEYS]
                                : array();
                        $indexedTagName = isset( $value[ApiResult::META_INDEXED_TAG_NAME] )
-                               ? $value[ApiResult::META_INDEXED_TAG_NAME]
+                               ? self::mangleName( $value[ApiResult::META_INDEXED_TAG_NAME], $preserveKeys )
                                : '_v';
                        $bcBools = isset( $value[ApiResult::META_BC_BOOLS] )
                                ? $value[ApiResult::META_BC_BOOLS]
index 1e30616..27fc378 100644 (file)
@@ -82,6 +82,7 @@ class ApiHelp extends ApiBase {
         *  - submodules: (bool) Include help for submodules of the current module
         *  - recursivesubmodules: (bool) Include help for submodules recursively
         *  - helptitle: (string) Title to link for additional modules' help. Should contain $1.
+        *  - toc: (bool) Include a table of contents
         *
         * @param IContextSource $context
         * @param ApiBase[]|ApiBase $modules
@@ -97,6 +98,9 @@ class ApiHelp extends ApiBase {
 
                $out = $context->getOutput();
                $out->addModules( 'mediawiki.apihelp' );
+               if ( !empty( $options['toc'] ) ) {
+                       $out->addModules( 'mediawiki.toc' );
+               }
                $out->setPageTitle( $context->msg( 'api-help-title' ) );
 
                $cacheKey = null;
@@ -107,6 +111,7 @@ class ApiHelp extends ApiBase {
                        if ( $cacheHelpTimeout > 0 ) {
                                // Get help text from cache if present
                                $cacheKey = wfMemcKey( 'apihelp', $modules[0]->getModulePath(),
+                                       (int)!empty( $options['toc'] ),
                                        str_replace( ' ', '_', SpecialVersion::getVersion( 'nodb' ) ) );
                                $cached = $wgMemc->get( $cacheKey );
                                if ( $cached ) {
@@ -133,7 +138,11 @@ class ApiHelp extends ApiBase {
                }
 
                $haveModules = array();
-               $out->addHTML( self::getHelpInternal( $context, $modules, $options, $haveModules ) );
+               $html = self::getHelpInternal( $context, $modules, $options, $haveModules );
+               if ( !empty( $options['toc'] ) && $haveModules ) {
+                       $out->addHTML( Linker::generateTOC( $haveModules, $context->getLanguage() ) );
+               }
+               $out->addHTML( $html );
 
                $helptitle = isset( $options['helptitle'] ) ? $options['helptitle'] : null;
                $html = self::fixHelpLinks( $out->getHTML(), $helptitle, $haveModules );
@@ -150,7 +159,7 @@ class ApiHelp extends ApiBase {
         *
         * @param string $html
         * @param string|null $helptitle Title to link to rather than api.php, must contain '$1'
-        * @param array $localModules Modules to link within the current page
+        * @param array $localModules Keys are modules to link within the current page, values are ignored
         * @return string
         */
        public static function fixHelpLinks( $html, $helptitle = null, $localModules = array() ) {
@@ -212,11 +221,16 @@ class ApiHelp extends ApiBase {
        ) {
                $out = '';
 
-               $level = min( 6, empty( $options['headerlevel'] ) ? 2 : $options['headerlevel'] );
-               $options['headerlevel'] = $level;
+               $level = empty( $options['headerlevel'] ) ? 2 : $options['headerlevel'];
+               if ( empty( $options['tocnumber'] ) ) {
+                       $tocnumber = array( 2 => 0 );
+               } else {
+                       $tocnumber = &$options['tocnumber'];
+               }
 
                foreach ( $modules as $module ) {
-                       $haveModules[$module->getModulePath()] = true;
+                       $tocnumber[$level]++;
+                       $path = $module->getModulePath();
                        $module->setContext( $context );
                        $help = array(
                                'header' => '',
@@ -228,8 +242,13 @@ class ApiHelp extends ApiBase {
                                'submodules' => '',
                        );
 
-                       if ( empty( $options['noheader'] ) ) {
-                               $path = $module->getModulePath();
+                       if ( empty( $options['noheader'] ) || !empty( $options['toc'] ) ) {
+                               $anchor = $path;
+                               $i = 1;
+                               while ( isset( $haveModules[$anchor] ) ) {
+                                       $anchor = $path . '|' . ++$i;
+                               }
+
                                if ( $module->isMain() ) {
                                        $header = $context->msg( 'api-help-main-header' )->parse();
                                } else {
@@ -241,10 +260,22 @@ class ApiHelp extends ApiBase {
                                                        $context->msg( 'parentheses', $module->getModulePrefix() )->parse();
                                        }
                                }
-                               $help['header'] .= Html::element( "h$level",
-                                       array( 'id' => $path, 'class' => 'apihelp-header' ),
-                                       $header
+                               $haveModules[$anchor] = array(
+                                       'toclevel' => count( $tocnumber ),
+                                       'level' => $level,
+                                       'anchor' => $anchor,
+                                       'line' => $header,
+                                       'number' => join( '.', $tocnumber ),
+                                       'index' => false,
                                );
+                               if ( empty( $options['noheader'] ) ) {
+                                       $help['header'] .= Html::element( 'h' . min( 6, $level ),
+                                               array( 'id' => $anchor, 'class' => 'apihelp-header' ),
+                                               $header
+                                       );
+                               }
+                       } else {
+                               $haveModules[$path] = true;
                        }
 
                        $links = array();
@@ -641,6 +672,15 @@ class ApiHelp extends ApiBase {
                                $help['examples'] .= Html::closeElement( 'div' );
                        }
 
+                       $subtocnumber = $tocnumber;
+                       $subtocnumber[$level + 1] = 0;
+                       $suboptions = array(
+                               'submodules' => $options['recursivesubmodules'],
+                               'headerlevel' => $level + 1,
+                               'tocnumber' => &$subtocnumber,
+                               'noheader' => false,
+                       ) + $options;
+
                        if ( $options['submodules'] && $module->getModuleManager() ) {
                                $manager = $module->getModuleManager();
                                $submodules = array();
@@ -651,16 +691,13 @@ class ApiHelp extends ApiBase {
                                                $submodules[] = $manager->getModule( $name );
                                        }
                                }
-                               $help['submodules'] .= self::getHelpInternal( $context, $submodules, array(
-                                       'submodules' => $options['recursivesubmodules'],
-                                       'headerlevel' => $level + 1,
-                                       'noheader' => false,
-                               ) + $options, $haveModules );
+                               $help['submodules'] .= self::getHelpInternal( $context, $submodules, $suboptions, $haveModules );
+                               $numSubmodules = count( $submodules );
                        }
 
-                       $module->modifyHelp( $help, $options );
+                       $module->modifyHelp( $help, $suboptions, $haveModules );
 
-                       Hooks::run( 'APIHelpModifyOutput', array( $module, &$help, $options ) );
+                       Hooks::run( 'APIHelpModifyOutput', array( $module, &$help, $suboptions, &$haveModules ) );
 
                        $out .= join( "\n", $help );
                }
index 7b99921..865d39f 100644 (file)
@@ -42,7 +42,7 @@ class ApiImageRotate extends ApiBase {
                                $v = $val;
                        }
                        if ( $flag !== null ) {
-                               $v[$flag] = '';
+                               $v[$flag] = true;
                        }
                        $result[] = $v;
                }
@@ -71,7 +71,7 @@ class ApiImageRotate extends ApiBase {
                        $r['id'] = $title->getArticleID();
                        ApiQueryBase::addTitleInfo( $r, $title );
                        if ( !$title->exists() ) {
-                               $r['missing'] = '';
+                               $r['missing'] = true;
                        }
 
                        $file = wfFindFile( $title, array( 'latest' => true ) );
index 9d76a46..40cf6e2 100644 (file)
@@ -63,8 +63,7 @@ class ApiImport extends ApiBase {
                $importer = new WikiImporter( $source->value, $this->getConfig() );
                if ( isset( $params['namespace'] ) ) {
                        $importer->setTargetNamespace( $params['namespace'] );
-               }
-               if ( isset( $params['rootpage'] ) ) {
+               } elseif ( isset( $params['rootpage'] ) ) {
                        $statusRootPage = $importer->setTargetRootPage( $params['rootpage'] );
                        if ( !$statusRootPage->isGood() ) {
                                $this->dieStatus( $statusRootPage );
@@ -155,7 +154,7 @@ class ApiImportReporter extends ImportReporter {
                if ( $title === null ) {
                        # Invalid or non-importable title
                        $r['title'] = $pageInfo['title'];
-                       $r['invalid'] = '';
+                       $r['invalid'] = true;
                } else {
                        ApiQueryBase::addTitleInfo( $r, $title );
                        $r['revisions'] = intval( $successCount );
index 7e3dcff..2b7937e 100644 (file)
@@ -495,7 +495,22 @@ class ApiMain extends ApiBase {
                // Reset and print just the error message
                ob_clean();
 
-               $this->printResult( true );
+               // Printer may not be initialized if the extractRequestParams() fails for the main module
+               $this->createErrorPrinter();
+
+               try {
+                       $this->printResult( true );
+               } catch ( UsageException $ex ) {
+                       // The error printer itself is failing. Try suppressing its request
+                       // parameters and redo.
+                       $this->setWarning(
+                               'Error printer failed (will retry without params): ' . $ex->getMessage()
+                       );
+                       $this->mPrinter = null;
+                       $this->createErrorPrinter();
+                       $this->mPrinter->forceDefaultParams();
+                       $this->printResult( true );
+               }
        }
 
        /**
@@ -792,22 +807,14 @@ class ApiMain extends ApiBase {
        }
 
        /**
-        * Replace the result data with the information about an exception.
-        * Returns the error code
-        * @param Exception $e
-        * @return string
+        * Create the printer for error output
         */
-       protected function substituteResultWithError( $e ) {
-               $result = $this->getResult();
-
-               // Printer may not be initialized if the extractRequestParams() fails for the main module
+       private function createErrorPrinter() {
                if ( !isset( $this->mPrinter ) ) {
-                       // The printer has not been created yet. Try to manually get formatter value.
                        $value = $this->getRequest()->getVal( 'format', self::API_DEFAULT_FORMAT );
                        if ( !$this->mModuleMgr->isDefined( $value, 'format' ) ) {
                                $value = self::API_DEFAULT_FORMAT;
                        }
-
                        $this->mPrinter = $this->createPrinterByName( $value );
                }
 
@@ -816,10 +823,16 @@ class ApiMain extends ApiBase {
                if ( !$this->mPrinter->canPrintErrors() ) {
                        $this->mPrinter = $this->createPrinterByName( self::API_DEFAULT_FORMAT );
                }
+       }
 
-               // Update raw mode flag for the selected printer.
-               $result->setRawMode( $this->mPrinter->getNeedsRawData() );
-
+       /**
+        * 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();
 
                if ( $e instanceof UsageException ) {
@@ -1294,7 +1307,7 @@ class ApiMain extends ApiBase {
                );
        }
 
-       public function modifyHelp( array &$help, array $options ) {
+       public function modifyHelp( array &$help, array $options, array &$tocData ) {
                // Wish PHP had an "array_insert_before". Instead, we have to manually
                // reindex the array to get 'permissions' in the right place.
                $oldHelp = $help;
@@ -1340,19 +1353,46 @@ class ApiMain extends ApiBase {
 
                // Fill 'datatypes' and 'credits', if applicable
                if ( empty( $options['nolead'] ) ) {
-                       $help['datatypes'] .= Html::rawelement( 'h' . min( 6, $options['headerlevel'] + 1 ),
+                       $level = $options['headerlevel'];
+                       $tocnumber = &$options['tocnumber'];
+
+                       $header = $this->msg( 'api-help-datatypes-header' )->parse();
+                       $help['datatypes'] .= Html::rawelement( 'h' . min( 6, $level ),
                                array( 'id' => 'main/datatypes', 'class' => 'apihelp-header' ),
                                Html::element( 'span', array( 'id' => Sanitizer::escapeId( 'main/datatypes' ) ) ) .
-                               $this->msg( 'api-help-datatypes-header' )->parse()
+                               $header
                        );
                        $help['datatypes'] .= $this->msg( 'api-help-datatypes' )->parseAsBlock();
+                       if ( !isset( $tocData['main/datatypes'] ) ) {
+                               $tocnumber[$level]++;
+                               $tocData['main/datatypes'] = array(
+                                       'toclevel' => count( $tocnumber ),
+                                       'level' => $level,
+                                       'anchor' => 'main/datatypes',
+                                       'line' => $header,
+                                       'number' => join( '.', $tocnumber ),
+                                       'index' => false,
+                               );
+                       }
 
-                       $help['credits'] .= Html::rawelement( 'h' . min( 6, $options['headerlevel'] + 1 ),
+                       $header = $this->msg( 'api-credits-header' )->parse();
+                       $help['credits'] .= Html::rawelement( 'h' . min( 6, $level ),
                                array( 'id' => 'main/credits', 'class' => 'apihelp-header' ),
                                Html::element( 'span', array( 'id' => Sanitizer::escapeId( 'main/credits' ) ) ) .
-                               $this->msg( 'api-credits-header' )->parse()
+                               $header
                        );
                        $help['credits'] .= $this->msg( 'api-credits' )->useDatabase( false )->parseAsBlock();
+                       if ( !isset( $tocData['main/credits'] ) ) {
+                               $tocnumber[$level]++;
+                               $tocData['main/credits'] = array(
+                                       'toclevel' => count( $tocnumber ),
+                                       'level' => $level,
+                                       'anchor' => 'main/credits',
+                                       'line' => $header,
+                                       'number' => join( '.', $tocnumber ),
+                                       'index' => false,
+                               );
+                       }
                }
        }
 
index 80317d3..240d350 100644 (file)
@@ -49,8 +49,8 @@ class ApiManageTags extends ApiBase {
                if ( !$status->isGood() ) {
                        $ret['warnings'] = $this->getErrorFormatter()->arrayFromStatus( $status, 'warning' );
                }
-               if ( $status->value !== null ) {
-                       $ret['success'] = '';
+               $ret['success'] = $status->value !== null;
+               if ( $ret['success'] ) {
                        $ret['logid'] = $status->value;
                }
                $result->addValue( null, $this->getModuleName(), $ret );
index 0db18e7..e42958b 100644 (file)
@@ -83,18 +83,14 @@ class ApiMove extends ApiBase {
                        'reason' => $params['reason']
                );
 
-               if ( $fromTitle->exists() ) {
-                       //NOTE: we assume that if the old title exists, it's because it was re-created as
-                       // a redirect to the new title. This is not safe, but what we did before was
-                       // even worse: we just determined whether a redirect should have been created,
-                       // and reported that it was created if it should have, without any checks.
-                       // Also note that isRedirect() is unreliable because of bug 37209.
-                       $r['redirectcreated'] = '';
-               }
+               //NOTE: we assume that if the old title exists, it's because it was re-created as
+               // a redirect to the new title. This is not safe, but what we did before was
+               // even worse: we just determined whether a redirect should have been created,
+               // and reported that it was created if it should have, without any checks.
+               // Also note that isRedirect() is unreliable because of bug 37209.
+               $r['redirectcreated'] = $fromTitle->exists();
 
-               if ( $toTitleExists ) {
-                       $r['moveoverredirect'] = '';
-               }
+               $r['moveoverredirect'] = $toTitleExists;
 
                // Move the talk page
                if ( $params['movetalk'] && $fromTalk->exists() && !$fromTitle->isTalkPage() ) {
@@ -103,9 +99,7 @@ class ApiMove extends ApiBase {
                        if ( $status->isOK() ) {
                                $r['talkfrom'] = $fromTalk->getPrefixedText();
                                $r['talkto'] = $toTalk->getPrefixedText();
-                               if ( $toTalkExists ) {
-                                       $r['talkmoveoverredirect'] = '';
-                               }
+                               $r['talkmoveoverredirect'] = $toTalkExists;
                        } else {
                                // We're not gonna dieUsage() on failure, since we already changed something
                                $error = $this->getErrorFromStatus( $status );
index 33790f9..36026c2 100644 (file)
@@ -212,6 +212,7 @@ class ApiOpenSearch extends ApiBase {
                switch ( $this->getFormat() ) {
                        case 'json':
                                // http://www.opensearch.org/Specifications/OpenSearch/Extensions/Suggestions/1.1
+                               $result->addArrayType( null, 'BCarray' );
                                $result->addValue( null, 0, strval( $search ) );
                                $terms = array();
                                $descriptions = array();
index 02a25fe..e6f218d 100644 (file)
@@ -96,7 +96,7 @@ class ApiPageSet extends ApiBase {
                                $v = $val;
                        }
                        if ( $flag !== null ) {
-                               $v[$flag] = '';
+                               $v[$flag] = true;
                        }
                        $result[] = $v;
                }
index bb661b2..25069d9 100644 (file)
@@ -216,7 +216,7 @@ class ApiParamInfo extends ApiBase {
                $this->formatHelpMessages( $ret, 'description', $module->getFinalDescription() );
 
                foreach ( $module->getHelpFlags() as $flag ) {
-                       $ret[$flag] = '';
+                       $ret[$flag] = true;
                }
 
                $ret['helpurls'] = (array)$module->getHelpUrls();
@@ -265,12 +265,10 @@ class ApiParamInfo extends ApiBase {
                                $this->formatHelpMessages( $item, 'description', $paramDesc[$name], true );
                        }
 
-                       if ( !empty( $settings[ApiBase::PARAM_REQUIRED] ) ) {
-                               $item['required'] = '';
-                       }
+                       $item['required'] = !empty( $settings[ApiBase::PARAM_REQUIRED] );
 
                        if ( !empty( $settings[ApiBase::PARAM_DEPRECATED] ) ) {
-                               $item['deprecated'] = '';
+                               $item['deprecated'] = true;
                        }
 
                        if ( $name === 'token' && $module->needsToken() ) {
@@ -307,8 +305,8 @@ class ApiParamInfo extends ApiBase {
                                }
                        }
 
-                       if ( !empty( $settings[ApiBase::PARAM_ISMULTI] ) ) {
-                               $item['multi'] = '';
+                       $item['multi'] = !empty( $settings[ApiBase::PARAM_ISMULTI] );
+                       if ( $item['multi'] ) {
                                $item['limit'] = $this->getMain()->canApiHighLimits() ?
                                        ApiBase::LIMIT_SML2 :
                                        ApiBase::LIMIT_SML1;
@@ -317,14 +315,14 @@ class ApiParamInfo extends ApiBase {
                        }
 
                        if ( !empty( $settings[ApiBase::PARAM_ALLOW_DUPLICATES] ) ) {
-                               $item['allowsduplicates'] = '';
+                               $item['allowsduplicates'] = true;
                        }
 
                        if ( isset( $settings[ApiBase::PARAM_TYPE] ) ) {
                                if ( $settings[ApiBase::PARAM_TYPE] === 'submodule' ) {
                                        $item['type'] = $module->getModuleManager()->getNames( $name );
                                        sort( $item['type'] );
-                                       $item['submodules'] = '';
+                                       $item['submodules'] = true;
                                } else {
                                        $item['type'] = $settings[ApiBase::PARAM_TYPE];
                                }
index 267bced..4bb99d5 100644 (file)
@@ -138,6 +138,7 @@ class ApiParse extends ApiBase {
                                        $main = new ApiMain( $req );
                                        $pageSet = new ApiPageSet( $main );
                                        $pageSet->execute();
+                                       $redirValues = $pageSet->getRedirectTitlesAsResult( $this->getResult() );
 
                                        $to = $page;
                                        foreach ( $pageSet->getRedirectTitles() as $title ) {
@@ -225,21 +226,17 @@ class ApiParse extends ApiBase {
                        if ( $params['onlypst'] ) {
                                // Build a result and bail out
                                $result_array = array();
-                               $result_array['text'] = array();
-                               ApiResult::setContentValue( $result_array['text'], 'text', $this->pstContent->serialize( $format ) );
+                               $result_array['text'] = $this->pstContent->serialize( $format );
+                               $result_array[ApiResult::META_BC_SUBELEMENTS][] = 'text';
                                if ( isset( $prop['wikitext'] ) ) {
-                                       $result_array['wikitext'] = array();
-                                       ApiResult::setContentValue( $result_array['wikitext'], 'wikitext', $this->content->serialize( $format ) );
+                                       $result_array['wikitext'] = $this->content->serialize( $format );
+                                       $result_array[ApiResult::META_BC_SUBELEMENTS][] = 'wikitext';
                                }
                                if ( !is_null( $params['summary'] ) ||
                                        ( !is_null( $params['sectiontitle'] ) && $this->section === 'new' )
                                ) {
-                                       $result_array['parsedsummary'] = array();
-                                       ApiResult::setContentValue(
-                                               $result_array['parsedsummary'],
-                                               'parsedsummary',
-                                               $this->formatSummary( $titleObj, $params )
-                                       );
+                                       $result_array['parsedsummary'] = $this->formatSummary( $titleObj, $params );
+                                       $result_array[ApiResult::META_BC_SUBELEMENTS][] = 'parsedsummary';
                                }
 
                                $result->addValue( null, $this->getModuleName(), $result_array );
@@ -272,19 +269,15 @@ class ApiParse extends ApiBase {
                }
 
                if ( isset( $prop['text'] ) ) {
-                       $result_array['text'] = array();
-                       ApiResult::setContentValue( $result_array['text'], 'text', $p_result->getText() );
+                       $result_array['text'] = $p_result->getText();
+                       $result_array[ApiResult::META_BC_SUBELEMENTS][] = 'text';
                }
 
                if ( !is_null( $params['summary'] ) ||
                        ( !is_null( $params['sectiontitle'] ) && $this->section === 'new' )
                ) {
-                       $result_array['parsedsummary'] = array();
-                       ApiResult::setContentValue(
-                               $result_array['parsedsummary'],
-                               'parsedsummary',
-                               $this->formatSummary( $titleObj, $params )
-                       );
+                       $result_array['parsedsummary'] = $this->formatSummary( $titleObj, $params );
+                       $result_array[ApiResult::META_BC_SUBELEMENTS][] = 'parsedsummary';
                }
 
                if ( isset( $prop['langlinks'] ) ) {
@@ -307,9 +300,8 @@ class ApiParse extends ApiBase {
                        $result_array['categories'] = $this->formatCategoryLinks( $p_result->getCategories() );
                }
                if ( isset( $prop['categorieshtml'] ) ) {
-                       $categoriesHtml = $this->categoriesHtml( $p_result->getCategories() );
-                       $result_array['categorieshtml'] = array();
-                       ApiResult::setContentValue( $result_array['categorieshtml'], 'categorieshtml', $categoriesHtml );
+                       $result_array['categorieshtml'] = $this->categoriesHtml( $p_result->getCategories() );
+                       $result_array[ApiResult::META_BC_SUBELEMENTS][] = 'categorieshtml';
                }
                if ( isset( $prop['links'] ) ) {
                        $result_array['links'] = $this->formatLinks( $p_result->getLinks() );
@@ -349,12 +341,8 @@ class ApiParse extends ApiBase {
                        }
 
                        if ( isset( $prop['headhtml'] ) ) {
-                               $result_array['headhtml'] = array();
-                               ApiResult::setContentValue(
-                                       $result_array['headhtml'],
-                                       'headhtml',
-                                       $context->getOutput()->headElement( $context->getSkin() )
-                               );
+                               $result_array['headhtml'] = $context->getOutput()->headElement( $context->getSkin() );
+                               $result_array[ApiResult::META_BC_SUBELEMENTS][] = 'headhtml';
                        }
                }
 
@@ -365,12 +353,20 @@ class ApiParse extends ApiBase {
                        $result_array['modulemessages'] = array_values( array_unique( $p_result->getModuleMessages() ) );
                }
 
+               if ( isset( $prop['jsconfigvars'] ) ) {
+                       $result_array['jsconfigvars'] = $this->formatJsConfigVars( $p_result->getJsConfigVars() );
+               }
+
+               if ( isset( $prop['encodedjsconfigvars'] ) ) {
+                       $result_array['encodedjsconfigvars'] = FormatJson::encode(
+                               $p_result->getJsConfigVars(), false, FormatJson::ALL_OK
+                       );
+                       $result_array[ApiResult::META_SUBELEMENTS][] = 'encodedjsconfigvars';
+               }
+
                if ( isset( $prop['indicators'] ) ) {
-                       foreach ( $p_result->getIndicators() as $name => $content ) {
-                               $indicator = array( 'name' => $name );
-                               ApiResult::setContentValue( $indicator, 'content', $content );
-                               $result_array['indicators'][] = $indicator;
-                       }
+                       $result_array['indicators'] = (array)$p_result->getIndicators();
+                       ApiResult::setArrayType( $result_array['indicators'], 'BCkvp', 'name' );
                }
 
                if ( isset( $prop['iwlinks'] ) ) {
@@ -378,15 +374,16 @@ class ApiParse extends ApiBase {
                }
 
                if ( isset( $prop['wikitext'] ) ) {
-                       $result_array['wikitext'] = array();
-                       ApiResult::setContentValue( $result_array['wikitext'], 'wikitext', $this->content->serialize( $format ) );
+                       $result_array['wikitext'] = $this->content->serialize( $format );
+                       $result_array[ApiResult::META_BC_SUBELEMENTS][] = 'wikitext';
                        if ( !is_null( $this->pstContent ) ) {
-                               $result_array['psttext'] = array();
-                               ApiResult::setContentValue( $result_array['psttext'], 'psttext', $this->pstContent->serialize( $format ) );
+                               $result_array['psttext'] = $this->pstContent->serialize( $format );
+                               $result_array[ApiResult::META_BC_SUBELEMENTS][] = 'psttext';
                        }
                }
                if ( isset( $prop['properties'] ) ) {
-                       $result_array['properties'] = $this->formatProperties( $p_result->getProperties() );
+                       $result_array['properties'] = (array)$p_result->getProperties();
+                       ApiResult::setArrayType( $result_array['properties'], 'BCkvp', 'name' );
                }
 
                if ( isset( $prop['limitreportdata'] ) ) {
@@ -394,9 +391,8 @@ class ApiParse extends ApiBase {
                                $this->formatLimitReportData( $p_result->getLimitReportData() );
                }
                if ( isset( $prop['limitreporthtml'] ) ) {
-                       $limitreportHtml = EditPage::getPreviewLimitReport( $p_result );
-                       $result_array['limitreporthtml'] = array();
-                       ApiResult::setContentValue( $result_array['limitreporthtml'], 'limitreporthtml', $limitreportHtml );
+                       $result_array['limitreporthtml'] = EditPage::getPreviewLimitReport( $p_result );
+                       $result_array[ApiResult::META_BC_SUBELEMENTS][] = 'limitreporthtml';
                }
 
                if ( $params['generatexml'] ) {
@@ -411,8 +407,8 @@ class ApiParse extends ApiBase {
                        } else {
                                $xml = $dom->__toString();
                        }
-                       $result_array['parsetree'] = array();
-                       ApiResult::setContentValue( $result_array['parsetree'], 'parsetree', $xml );
+                       $result_array['parsetree'] = $xml;
+                       $result_array[ApiResult::META_BC_SUBELEMENTS][] = 'parsetree';
                }
 
                $result_mapping = array(
@@ -589,9 +585,9 @@ class ApiParse extends ApiBase {
                        $entry['sortkey'] = $sortkey;
                        ApiResult::setContentValue( $entry, 'category', $link );
                        if ( !isset( $hiddencats[$link] ) ) {
-                               $entry['missing'] = '';
+                               $entry['missing'] = true;
                        } elseif ( $hiddencats[$link] ) {
-                               $entry['hidden'] = '';
+                               $entry['hidden'] = true;
                        }
                        $result[] = $entry;
                }
@@ -613,9 +609,7 @@ class ApiParse extends ApiBase {
                                $entry = array();
                                $entry['ns'] = $ns;
                                ApiResult::setContentValue( $entry, 'title', Title::makeTitle( $ns, $title )->getFullText() );
-                               if ( $id != 0 ) {
-                                       $entry['exists'] = '';
-                               }
+                               $entry['exists'] = $id != 0;
                                $result[] = $entry;
                        }
                }
@@ -655,18 +649,6 @@ class ApiParse extends ApiBase {
                return $result;
        }
 
-       private function formatProperties( $properties ) {
-               $result = array();
-               foreach ( $properties as $name => $value ) {
-                       $entry = array();
-                       $entry['name'] = $name;
-                       ApiResult::setContentValue( $entry, 'value', $value );
-                       $result[] = $entry;
-               }
-
-               return $result;
-       }
-
        private function formatCss( $css ) {
                $result = array();
                foreach ( $css as $file => $link ) {
@@ -689,8 +671,7 @@ class ApiParse extends ApiBase {
                        if ( !is_array( $value ) ) {
                                $value = array( $value );
                        }
-                       ApiResult::setIndexedTagName( $value, 'param' );
-                       ApiResult::setIndexedTagNameOnSubarrays( $value, 'param' );
+                       ApiResult::setIndexedTagNameRecursive( $value, 'param' );
                        $entry = array_merge( $entry, $value );
                        $result[] = $entry;
                }
@@ -698,6 +679,53 @@ class ApiParse extends ApiBase {
                return $result;
        }
 
+       private function formatJsConfigVars( $vars, $forceHash = true ) {
+               // Process subarrays and determine if this is a JS [] or {}
+               $hash = $forceHash;
+               $maxKey = -1;
+               $bools = array();
+               foreach ( $vars as $k => $v ) {
+                       if ( is_array( $v ) || is_object( $v ) ) {
+                               $vars[$k] = $this->formatJsConfigVars( (array)$v, false );
+                       } elseif ( is_bool( $v ) ) {
+                               // Better here to use real bools even in BC formats
+                               $bools[] = $k;
+                       }
+                       if ( is_string( $k ) ) {
+                               $hash = true;
+                       } elseif ( $k > $maxKey ) {
+                               $maxKey = $k;
+                       }
+               }
+               if ( !$hash && $maxKey !== count( $vars ) - 1 ) {
+                       $hash = true;
+               }
+
+               // Get the list of keys we actually care about. Unfortunately, we can't support
+               // certain keys that conflict with ApiResult metadata.
+               $keys = array_diff( array_keys( $vars ), array(
+                       ApiResult::META_TYPE, ApiResult::META_PRESERVE_KEYS, ApiResult::META_KVP_KEY_NAME,
+                       ApiResult::META_INDEXED_TAG_NAME, ApiResult::META_BC_BOOLS
+               ) );
+
+               // Set metadata appropriately
+               if ( $hash ) {
+                       return array(
+                               ApiResult::META_TYPE => 'kvp',
+                               ApiResult::META_KVP_KEY_NAME => 'key',
+                               ApiResult::META_PRESERVE_KEYS => $keys,
+                               ApiResult::META_BC_BOOLS => $bools,
+                               ApiResult::META_INDEXED_TAG_NAME => 'var',
+                       ) + $vars;
+               } else {
+                       return array(
+                               ApiResult::META_TYPE => 'array',
+                               ApiResult::META_BC_BOOLS => $bools,
+                               ApiResult::META_INDEXED_TAG_NAME => 'value',
+                       ) + $vars;
+               }
+       }
+
        private function setIndexedTagNames( &$array, $mapping ) {
                foreach ( $mapping as $key => $name ) {
                        if ( isset( $array[$key] ) ) {
@@ -738,13 +766,16 @@ class ApiParse extends ApiBase {
                                        'headitems',
                                        'headhtml',
                                        'modules',
+                                       'jsconfigvars',
+                                       'encodedjsconfigvars',
                                        'indicators',
                                        'iwlinks',
                                        'wikitext',
                                        'properties',
                                        'limitreportdata',
                                        'limitreporthtml',
-                               )
+                               ),
+                               ApiBase::PARAM_HELP_MSG_PER_VALUE => array(),
                        ),
                        'pst' => false,
                        'onlypst' => false,
index 496db8f..c07aaca 100644 (file)
@@ -123,7 +123,7 @@ class ApiProtect extends ApiBase {
                        'reason' => $params['reason']
                );
                if ( $cascade ) {
-                       $res['cascade'] = '';
+                       $res['cascade'] = true;
                }
                $res['protections'] = $resultProtections;
                $result = $this->getResult();
index 67f7834..a22be49 100644 (file)
@@ -53,7 +53,7 @@ class ApiPurge extends ApiBase {
                        ApiQueryBase::addTitleInfo( $r, $title );
                        $page = WikiPage::factory( $title );
                        $page->doPurge(); // Directly purge and skip the UI part of purge().
-                       $r['purged'] = '';
+                       $r['purged'] = true;
 
                        if ( $forceLinkUpdate || $forceRecursiveLinkUpdate ) {
                                if ( !$this->getUser()->pingLimiter( 'linkpurge' ) ) {
@@ -74,7 +74,7 @@ class ApiPurge extends ApiBase {
                                                $title, null, $forceRecursiveLinkUpdate, $p_result );
                                        DataUpdate::runUpdates( $updates );
 
-                                       $r['linkupdate'] = '';
+                                       $r['linkupdate'] = true;
 
                                        if ( $enableParserCache ) {
                                                $pcache = ParserCache::singleton();
index b1069c7..bfe3205 100644 (file)
@@ -403,18 +403,18 @@ class ApiQuery extends ApiBase {
                foreach ( $pageSet->getMissingTitles() as $fakeId => $title ) {
                        $vals = array();
                        ApiQueryBase::addTitleInfo( $vals, $title );
-                       $vals['missing'] = '';
+                       $vals['missing'] = true;
                        $pages[$fakeId] = $vals;
                }
                // Report any invalid titles
                foreach ( $pageSet->getInvalidTitles() as $fakeId => $title ) {
-                       $pages[$fakeId] = array( 'title' => $title, 'invalid' => '' );
+                       $pages[$fakeId] = array( 'title' => $title, 'invalid' => true );
                }
                // Report any missing page ids
                foreach ( $pageSet->getMissingPageIDs() as $pageid ) {
                        $pages[$pageid] = array(
                                'pageid' => $pageid,
-                               'missing' => ''
+                               'missing' => true
                        );
                }
                // Report special pages
@@ -422,15 +422,15 @@ class ApiQuery extends ApiBase {
                foreach ( $pageSet->getSpecialTitles() as $fakeId => $title ) {
                        $vals = array();
                        ApiQueryBase::addTitleInfo( $vals, $title );
-                       $vals['special'] = '';
+                       $vals['special'] = true;
                        if ( $title->isSpecialPage() &&
                                !SpecialPageFactory::exists( $title->getDBkey() )
                        ) {
-                               $vals['missing'] = '';
+                               $vals['missing'] = true;
                        } elseif ( $title->getNamespace() == NS_MEDIA &&
                                !wfFindFile( $title )
                        ) {
-                               $vals['missing'] = '';
+                               $vals['missing'] = true;
                        }
                        $pages[$fakeId] = $vals;
                }
@@ -445,9 +445,10 @@ class ApiQuery extends ApiBase {
 
                if ( count( $pages ) ) {
                        $pageSet->populateGeneratorData( $pages );
+                       ApiResult::setArrayType( $pages, 'BCarray' );
 
                        if ( $this->mParams['indexpageids'] ) {
-                               $pageIDs = array_keys( $pages );
+                               $pageIDs = array_keys( ApiResult::stripMetadataNonRecursive( $pages ) );
                                // json treats all map keys as strings - converting to match
                                $pageIDs = array_map( 'strval', $pageIDs );
                                ApiResult::setIndexedTagName( $pageIDs, 'id' );
@@ -525,9 +526,8 @@ class ApiQuery extends ApiBase {
                        $result->addValue( null, 'text', $exportxml, ApiResult::NO_SIZE_CHECK );
                        $result->addValue( null, 'mime', 'text/xml', ApiResult::NO_SIZE_CHECK );
                } else {
-                       $r = array();
-                       ApiResult::setContentValue( $r, 'xml', $exportxml );
-                       $result->addValue( 'query', 'export', $r, ApiResult::NO_SIZE_CHECK );
+                       $result->addValue( 'query', 'export', $exportxml, ApiResult::NO_SIZE_CHECK );
+                       $result->addValue( 'query', ApiResult::META_BC_SUBELEMENTS, array( 'export' ) );
                }
        }
 
index 4ecc4b7..cc0b71a 100644 (file)
@@ -135,8 +135,8 @@ class ApiQueryAllCategories extends ApiQueryGeneratorBase {
                                        $item['files'] = intval( $row->cat_files );
                                        $item['subcats'] = intval( $row->cat_subcats );
                                }
-                               if ( isset( $prop['hidden'] ) && $row->cat_hidden ) {
-                                       $item['hidden'] = '';
+                               if ( isset( $prop['hidden'] ) ) {
+                                       $item['hidden'] = (bool)$row->cat_hidden;
                                }
                                $fit = $result->addValue( array( 'query', $this->getModuleName() ), null, $item );
                                if ( !$fit ) {
index 1a4a4d9..fadecfb 100644 (file)
@@ -200,7 +200,9 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
                        }
 
                        if ( is_null( $resultPageSet ) ) {
-                               $vals = array();
+                               $vals = array(
+                                       ApiResult::META_TYPE => 'assoc',
+                               );
                                if ( $fld_ids ) {
                                        $vals['fromid'] = intval( $row->pl_from );
                                }
index 00816a3..cc884ec 100644 (file)
@@ -146,7 +146,7 @@ class ApiQueryAllMessages extends ApiQueryBase {
                                        $messageIsCustomised = isset( $customisedMessages['pages'][$langObj->ucfirst( $message )] );
                                        if ( $customised === $messageIsCustomised ) {
                                                if ( $customised ) {
-                                                       $a['customised'] = '';
+                                                       $a['customised'] = true;
                                                }
                                        } else {
                                                continue;
@@ -156,7 +156,7 @@ class ApiQueryAllMessages extends ApiQueryBase {
                                $msg = wfMessage( $message, $args )->inLanguage( $langObj );
 
                                if ( !$msg->exists() ) {
-                                       $a['missing'] = '';
+                                       $a['missing'] = true;
                                } else {
                                        // Check if the parser is enabled:
                                        if ( $params['enableparser'] ) {
@@ -170,7 +170,7 @@ class ApiQueryAllMessages extends ApiQueryBase {
                                        if ( isset( $prop['default'] ) ) {
                                                $default = wfMessage( $message )->inLanguage( $langObj )->useDatabase( false );
                                                if ( !$default->exists() ) {
-                                                       $a['defaultmissing'] = '';
+                                                       $a['defaultmissing'] = true;
                                                } elseif ( $default->plain() != $msgString ) {
                                                        $a['default'] = $default->plain();
                                                }
@@ -245,6 +245,6 @@ class ApiQueryAllMessages extends ApiQueryBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Meta#allmessages_.2F_am';
+               return 'https://www.mediawiki.org/wiki/API:Allmessages';
        }
 }
index 8c9e1ba..05daa7a 100644 (file)
@@ -48,11 +48,6 @@ class ApiQueryAllUsers extends ApiQueryBase {
                $params = $this->extractRequestParams();
                $activeUserDays = $this->getConfig()->get( 'ActiveUserDays' );
 
-               if ( $params['activeusers'] ) {
-                       // Update active user cache
-                       SpecialActiveUsers::mergeActiveUsers( 300, $activeUserDays );
-               }
-
                $db = $this->getDB();
 
                $prop = $params['prop'];
@@ -240,20 +235,20 @@ class ApiQueryAllUsers extends ApiQueryBase {
                        }
 
                        $data = array(
-                               'userid' => $row->user_id,
+                               'userid' => (int)$row->user_id,
                                'name' => $row->user_name,
                        );
 
                        if ( $fld_blockinfo && !is_null( $row->ipb_by_text ) ) {
-                               $data['blockid'] = $row->ipb_id;
+                               $data['blockid'] = (int)$row->ipb_id;
                                $data['blockedby'] = $row->ipb_by_text;
-                               $data['blockedbyid'] = $row->ipb_by;
+                               $data['blockedbyid'] = (int)$row->ipb_by;
                                $data['blockedtimestamp'] = wfTimestamp( TS_ISO_8601, $row->ipb_timestamp );
                                $data['blockreason'] = $row->ipb_reason;
                                $data['blockexpiry'] = $row->ipb_expiry;
                        }
                        if ( $row->ipb_deleted ) {
-                               $data['hidden'] = '';
+                               $data['hidden'] = true;
                        }
                        if ( $fld_editcount ) {
                                $data['editcount'] = intval( $row->user_editcount );
@@ -280,16 +275,19 @@ class ApiQueryAllUsers extends ApiQueryBase {
                                if ( $fld_groups ) {
                                        $data['groups'] = $groups;
                                        ApiResult::setIndexedTagName( $data['groups'], 'g' );
+                                       ApiResult::setArrayType( $data['groups'], 'array' );
                                }
 
                                if ( $fld_implicitgroups ) {
                                        $data['implicitgroups'] = $implicitGroups;
                                        ApiResult::setIndexedTagName( $data['implicitgroups'], 'g' );
+                                       ApiResult::setArrayType( $data['implicitgroups'], 'array' );
                                }
 
                                if ( $fld_rights ) {
                                        $data['rights'] = User::getGroupPermissions( $groups );
                                        ApiResult::setIndexedTagName( $data['rights'], 'r' );
+                                       ApiResult::setArrayType( $data['rights'], 'array' );
                                }
                        }
 
index 92cf62d..1df14e0 100644 (file)
@@ -194,7 +194,7 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
                                $a = array( 'pageid' => intval( $row->page_id ) );
                                ApiQueryBase::addTitleInfo( $a, $t );
                                if ( $row->page_is_redirect ) {
-                                       $a['redirect'] = '';
+                                       $a['redirect'] = true;
                                }
                                // Put all the results in an array first
                                $this->resultArr[$a['pageid']] = $a;
@@ -313,7 +313,7 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
                                $a['pageid'] = intval( $row->page_id );
                                ApiQueryBase::addTitleInfo( $a, Title::makeTitle( $row->page_namespace, $row->page_title ) );
                                if ( $row->page_is_redirect ) {
-                                       $a['redirect'] = '';
+                                       $a['redirect'] = true;
                                }
                                $parentID = $this->pageMap[$ns][$row->{$this->bl_title}];
                                // Put all the results in an array first
index b4752ae..dbed36c 100644 (file)
@@ -277,7 +277,7 @@ class ApiQueryBacklinksprop extends ApiQueryGeneratorBase {
 
                                $vals = array();
                                if ( $fld_pageid ) {
-                                       $vals['pageid'] = $row->page_id;
+                                       $vals['pageid'] = (int)$row->page_id;
                                }
                                if ( $fld_title ) {
                                        ApiQueryBase::addTitleInfo( $vals,
@@ -287,8 +287,8 @@ class ApiQueryBacklinksprop extends ApiQueryGeneratorBase {
                                if ( $fld_fragment && $row->rd_fragment !== null && $row->rd_fragment !== '' ) {
                                        $vals['fragment'] = $row->rd_fragment;
                                }
-                               if ( $fld_redirect && $row->page_is_redirect ) {
-                                       $vals['redirect'] = '';
+                               if ( $fld_redirect ) {
+                                       $vals['redirect'] = (bool)$row->page_is_redirect;
                                }
                                $fit = $this->addPageSubItem( $id, $vals );
                                if ( !$fit ) {
@@ -405,8 +405,7 @@ class ApiQueryBacklinksprop extends ApiQueryGeneratorBase {
        }
 
        public function getHelpUrls() {
-               $name = $this->getModuleName();
-               $prefix = $this->getModulePrefix();
-               return "https://www.mediawiki.org/wiki/API:Properties#{$name}_.2F_{$prefix}";
+               $name = ucfirst( $this->getModuleName() );
+               return "https://www.mediawiki.org/wiki/API:{$name}";
        }
 }
index 72e4fef..25f0bf7 100644 (file)
@@ -187,21 +187,23 @@ class ApiQueryBlocks extends ApiQueryBase {
                                $this->setContinueEnumParameter( 'continue', "$row->ipb_timestamp|$row->ipb_id" );
                                break;
                        }
-                       $block = array();
+                       $block = array(
+                               ApiResult::META_TYPE => 'assoc',
+                       );
                        if ( $fld_id ) {
-                               $block['id'] = $row->ipb_id;
+                               $block['id'] = (int)$row->ipb_id;
                        }
                        if ( $fld_user && !$row->ipb_auto ) {
                                $block['user'] = $row->ipb_address;
                        }
                        if ( $fld_userid && !$row->ipb_auto ) {
-                               $block['userid'] = $row->ipb_user;
+                               $block['userid'] = (int)$row->ipb_user;
                        }
                        if ( $fld_by ) {
                                $block['by'] = $row->ipb_by_text;
                        }
                        if ( $fld_byid ) {
-                               $block['byid'] = $row->ipb_by;
+                               $block['byid'] = (int)$row->ipb_by;
                        }
                        if ( $fld_timestamp ) {
                                $block['timestamp'] = wfTimestamp( TS_ISO_8601, $row->ipb_timestamp );
@@ -218,27 +220,13 @@ class ApiQueryBlocks extends ApiQueryBase {
                        }
                        if ( $fld_flags ) {
                                // For clarity, these flags use the same names as their action=block counterparts
-                               if ( $row->ipb_auto ) {
-                                       $block['automatic'] = '';
-                               }
-                               if ( $row->ipb_anon_only ) {
-                                       $block['anononly'] = '';
-                               }
-                               if ( $row->ipb_create_account ) {
-                                       $block['nocreate'] = '';
-                               }
-                               if ( $row->ipb_enable_autoblock ) {
-                                       $block['autoblock'] = '';
-                               }
-                               if ( $row->ipb_block_email ) {
-                                       $block['noemail'] = '';
-                               }
-                               if ( $row->ipb_deleted ) {
-                                       $block['hidden'] = '';
-                               }
-                               if ( $row->ipb_allow_usertalk ) {
-                                       $block['allowusertalk'] = '';
-                               }
+                               $block['automatic'] = (bool)$row->ipb_auto;
+                               $block['anononly'] = (bool)$row->ipb_anon_only;
+                               $block['nocreate'] = (bool)$row->ipb_create_account;
+                               $block['autoblock'] = (bool)$row->ipb_enable_autoblock;
+                               $block['noemail'] = (bool)$row->ipb_block_email;
+                               $block['hidden'] = (bool)$row->ipb_deleted;
+                               $block['allowusertalk'] = (bool)$row->ipb_allow_usertalk;
                        }
                        $fit = $result->addValue( array( 'query', $this->getModuleName() ), null, $block );
                        if ( !$fit ) {
index 6aa714e..7b3e6e3 100644 (file)
@@ -150,8 +150,8 @@ class ApiQueryCategories extends ApiQueryGeneratorBase {
                                if ( isset( $prop['timestamp'] ) ) {
                                        $vals['timestamp'] = wfTimestamp( TS_ISO_8601, $row->cl_timestamp );
                                }
-                               if ( isset( $prop['hidden'] ) && !is_null( $row->pp_propname ) ) {
-                                       $vals['hidden'] = '';
+                               if ( isset( $prop['hidden'] ) ) {
+                                       $vals['hidden'] = !is_null( $row->pp_propname );
                                }
 
                                $fit = $this->addPageSubItem( $row->cl_from, $vals );
@@ -226,6 +226,6 @@ class ApiQueryCategories extends ApiQueryGeneratorBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Properties#categories_.2F_cl';
+               return 'https://www.mediawiki.org/wiki/API:Categories';
        }
 }
index 5c67ebf..9266442 100644 (file)
@@ -86,9 +86,7 @@ class ApiQueryCategoryInfo extends ApiQueryBase {
                        $vals['pages'] = $row->cat_pages - $row->cat_subcats - $row->cat_files;
                        $vals['files'] = intval( $row->cat_files );
                        $vals['subcats'] = intval( $row->cat_subcats );
-                       if ( $row->cat_hidden ) {
-                               $vals['hidden'] = '';
-                       }
+                       $vals['hidden'] = (bool)$row->cat_hidden;
                        $fit = $this->addPageSubItems( $catids[$row->cat_title], $vals );
                        if ( !$fit ) {
                                $this->setContinueEnumParameter( 'continue', $row->cat_title );
@@ -117,6 +115,6 @@ class ApiQueryCategoryInfo extends ApiQueryBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Properties#categoryinfo_.2F_ci';
+               return 'https://www.mediawiki.org/wiki/API:Categoryinfo';
        }
 }
index 82ab939..ec0c1d1 100644 (file)
@@ -246,7 +246,9 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
                        }
 
                        if ( is_null( $resultPageSet ) ) {
-                               $vals = array();
+                               $vals = array(
+                                       ApiResult::META_TYPE => 'assoc',
+                               );
                                if ( $fld_ids ) {
                                        $vals['pageid'] = intval( $row->page_id );
                                }
index 7e76db2..524bffd 100644 (file)
@@ -89,7 +89,7 @@ class ApiQueryContributors extends ApiQueryBase {
                $res = $this->select( __METHOD__ );
                foreach ( $res as $row ) {
                        $fit = $result->addValue( array( 'query', 'pages', $row->page ),
-                               'anoncontributors', $row->anons
+                               'anoncontributors', (int)$row->anons
                        );
                        if ( !$fit ) {
                                // This not fitting isn't reasonable, so it probably means that
@@ -189,7 +189,7 @@ class ApiQueryContributors extends ApiQueryBase {
                        }
 
                        $fit = $this->addPageSubItem( $row->page,
-                               array( 'userid' => $row->user, 'name' => $row->username ),
+                               array( 'userid' => (int)$row->user, 'name' => $row->username ),
                                'user'
                        );
                        if ( !$fit ) {
@@ -250,6 +250,6 @@ class ApiQueryContributors extends ApiQueryBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Properties#contributors_.2F_pc';
+               return 'https://www.mediawiki.org/wiki/API:Contributors';
        }
 }
index 26ae266..3a98478 100644 (file)
@@ -299,6 +299,6 @@ class ApiQueryDeletedRevisions extends ApiQueryRevisionsBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Properties#deletedrevisions_.2F_drv';
+               return 'https://www.mediawiki.org/wiki/API:Deletedrevisions';
        }
 }
index b2c59d8..76f594e 100644 (file)
@@ -320,7 +320,7 @@ class ApiQueryDeletedrevs extends ApiQueryBase {
                        }
                        if ( $fld_user || $fld_userid ) {
                                if ( $row->ar_deleted & Revision::DELETED_USER ) {
-                                       $rev['userhidden'] = '';
+                                       $rev['userhidden'] = true;
                                        $anyHidden = true;
                                }
                                if ( Revision::userCanBitfield( $row->ar_deleted, Revision::DELETED_USER, $user ) ) {
@@ -328,14 +328,14 @@ class ApiQueryDeletedrevs extends ApiQueryBase {
                                                $rev['user'] = $row->ar_user_text;
                                        }
                                        if ( $fld_userid ) {
-                                               $rev['userid'] = $row->ar_user;
+                                               $rev['userid'] = (int)$row->ar_user;
                                        }
                                }
                        }
 
                        if ( $fld_comment || $fld_parsedcomment ) {
                                if ( $row->ar_deleted & Revision::DELETED_COMMENT ) {
-                                       $rev['commenthidden'] = '';
+                                       $rev['commenthidden'] = true;
                                        $anyHidden = true;
                                }
                                if ( Revision::userCanBitfield( $row->ar_deleted, Revision::DELETED_COMMENT, $user ) ) {
@@ -349,15 +349,15 @@ class ApiQueryDeletedrevs extends ApiQueryBase {
                                }
                        }
 
-                       if ( $fld_minor && $row->ar_minor_edit == 1 ) {
-                               $rev['minor'] = '';
+                       if ( $fld_minor ) {
+                               $rev['minor'] = $row->ar_minor_edit == 1;
                        }
                        if ( $fld_len ) {
                                $rev['len'] = $row->ar_len;
                        }
                        if ( $fld_sha1 ) {
                                if ( $row->ar_deleted & Revision::DELETED_TEXT ) {
-                                       $rev['sha1hidden'] = '';
+                                       $rev['sha1hidden'] = true;
                                        $anyHidden = true;
                                }
                                if ( Revision::userCanBitfield( $row->ar_deleted, Revision::DELETED_TEXT, $user ) ) {
@@ -370,7 +370,7 @@ class ApiQueryDeletedrevs extends ApiQueryBase {
                        }
                        if ( $fld_content ) {
                                if ( $row->ar_deleted & Revision::DELETED_TEXT ) {
-                                       $rev['texthidden'] = '';
+                                       $rev['texthidden'] = true;
                                        $anyHidden = true;
                                }
                                if ( Revision::userCanBitfield( $row->ar_deleted, Revision::DELETED_TEXT, $user ) ) {
@@ -394,7 +394,7 @@ class ApiQueryDeletedrevs extends ApiQueryBase {
                        }
 
                        if ( $anyHidden && ( $row->ar_deleted & Revision::DELETED_RESTRICTED ) ) {
-                               $rev['suppressed'] = '';
+                               $rev['suppressed'] = true;
                        }
 
                        if ( !isset( $pageMap[$row->ar_namespace][$row->ar_title] ) ) {
index 010f8d5..3282c71 100644 (file)
@@ -137,11 +137,9 @@ class ApiQueryDuplicateFiles extends ApiQueryGeneratorBase {
                                        $r = array(
                                                'name' => $dupName,
                                                'user' => $dupFile->getUser( 'text' ),
-                                               'timestamp' => wfTimestamp( TS_ISO_8601, $dupFile->getTimestamp() )
+                                               'timestamp' => wfTimestamp( TS_ISO_8601, $dupFile->getTimestamp() ),
+                                               'shared' => !$dupFile->isLocal(),
                                        );
-                                       if ( !$dupFile->isLocal() ) {
-                                               $r['shared'] = '';
-                                       }
                                        $fit = $this->addPageSubItem( $pageId, $r );
                                        if ( !$fit ) {
                                                $this->setContinueEnumParameter( 'continue', $image . '|' . $dupName );
@@ -191,6 +189,6 @@ class ApiQueryDuplicateFiles extends ApiQueryGeneratorBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Properties#duplicatefiles_.2F_df';
+               return 'https://www.mediawiki.org/wiki/API:Duplicatefiles';
        }
 }
index a26eff2..3f65a19 100644 (file)
@@ -112,7 +112,9 @@ class ApiQueryExtLinksUsage extends ApiQueryGeneratorBase {
                        }
 
                        if ( is_null( $resultPageSet ) ) {
-                               $vals = array();
+                               $vals = array(
+                                       ApiResult::META_TYPE => 'assoc',
+                               );
                                if ( $fld_ids ) {
                                        $vals['pageid'] = intval( $row->page_id );
                                }
index ec3d9d2..725ac88 100644 (file)
@@ -134,6 +134,6 @@ class ApiQueryExternalLinks extends ApiQueryBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Properties#extlinks_.2F_el';
+               return 'https://www.mediawiki.org/wiki/API:Extlinks';
        }
 }
index 8896140..057b011 100644 (file)
@@ -56,6 +56,8 @@ class ApiQueryFileRepoInfo extends ApiQueryBase {
 
                $result = $this->getResult();
                ApiResult::setIndexedTagName( $repos, 'repo' );
+               ApiResult::setArrayTypeRecursive( $repos, 'assoc' );
+               ApiResult::setArrayType( $repos, 'array' );
                $result->addValue( array( 'query' ), 'repos', $repos );
        }
 
@@ -95,4 +97,8 @@ class ApiQueryFileRepoInfo extends ApiQueryBase {
                                => 'apihelp-query+filerepoinfo-example-simple',
                );
        }
+
+       public function getHelpUrls() {
+               return 'https://www.mediawiki.org/wiki/API:Filerepoinfo';
+       }
 }
index cba3b73..5488984 100644 (file)
@@ -162,7 +162,7 @@ class ApiQueryFilearchive extends ApiQueryBase {
                        }
 
                        $file = array();
-                       $file['id'] = $row->fa_id;
+                       $file['id'] = (int)$row->fa_id;
                        $file['name'] = $row->fa_name;
                        $title = Title::makeTitle( NS_FILE, $row->fa_name );
                        self::addTitleInfo( $file, $title );
@@ -179,7 +179,7 @@ class ApiQueryFilearchive extends ApiQueryBase {
                        if ( $fld_user &&
                                Revision::userCanBitfield( $row->fa_deleted, File::DELETED_USER, $user )
                        ) {
-                               $file['userid'] = $row->fa_user;
+                               $file['userid'] = (int)$row->fa_user;
                                $file['user'] = $row->fa_user_text;
                        }
                        if ( $fld_sha1 ) {
@@ -218,17 +218,17 @@ class ApiQueryFilearchive extends ApiQueryBase {
                        }
 
                        if ( $row->fa_deleted & File::DELETED_FILE ) {
-                               $file['filehidden'] = '';
+                               $file['filehidden'] = true;
                        }
                        if ( $row->fa_deleted & File::DELETED_COMMENT ) {
-                               $file['commenthidden'] = '';
+                               $file['commenthidden'] = true;
                        }
                        if ( $row->fa_deleted & File::DELETED_USER ) {
-                               $file['userhidden'] = '';
+                               $file['userhidden'] = true;
                        }
                        if ( $row->fa_deleted & File::DELETED_RESTRICTED ) {
                                // This file is deleted for normal admins
-                               $file['suppressed'] = '';
+                               $file['suppressed'] = true;
                        }
 
                        $fit = $result->addValue( array( 'query', $this->getModuleName() ), null, $file );
index 61928c3..618387d 100644 (file)
@@ -132,7 +132,7 @@ class ApiQueryIWBacklinks extends ApiQueryGeneratorBase {
                                ApiQueryBase::addTitleInfo( $entry, $title );
 
                                if ( $row->page_is_redirect ) {
-                                       $entry['redirect'] = '';
+                                       $entry['redirect'] = true;
                                }
 
                                if ( $iwprefix ) {
index d5da495..02846dc 100644 (file)
@@ -373,7 +373,9 @@ class ApiQueryImageInfo extends ApiQueryBase {
                        );
                }
                $version = $opts['version'];
-               $vals = array();
+               $vals = array(
+                       ApiResult::META_TYPE => 'assoc',
+               );
                // Timestamp is shown even if the file is revdelete'd in interface
                // so do same here.
                if ( isset( $prop['timestamp'] ) ) {
@@ -397,7 +399,7 @@ class ApiQueryImageInfo extends ApiQueryBase {
 
                if ( $user || $userid ) {
                        if ( $file->isDeleted( File::DELETED_USER ) ) {
-                               $vals['userhidden'] = '';
+                               $vals['userhidden'] = true;
                                $anyHidden = true;
                        }
                        if ( $canShowField( File::DELETED_USER ) ) {
@@ -408,7 +410,7 @@ class ApiQueryImageInfo extends ApiQueryBase {
                                        $vals['userid'] = $file->getUser( 'id' );
                                }
                                if ( !$file->getUser( 'id' ) ) {
-                                       $vals['anon'] = '';
+                                       $vals['anon'] = true;
                                }
                        }
                }
@@ -438,7 +440,7 @@ class ApiQueryImageInfo extends ApiQueryBase {
 
                if ( $pcomment || $comment ) {
                        if ( $file->isDeleted( File::DELETED_COMMENT ) ) {
-                               $vals['commenthidden'] = '';
+                               $vals['commenthidden'] = true;
                                $anyHidden = true;
                        }
                        if ( $canShowField( File::DELETED_COMMENT ) ) {
@@ -469,7 +471,7 @@ class ApiQueryImageInfo extends ApiQueryBase {
                }
 
                if ( $file->isDeleted( File::DELETED_FILE ) ) {
-                       $vals['filehidden'] = '';
+                       $vals['filehidden'] = true;
                        $anyHidden = true;
                }
 
@@ -793,6 +795,6 @@ class ApiQueryImageInfo extends ApiQueryBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Properties#imageinfo_.2F_ii';
+               return 'https://www.mediawiki.org/wiki/API:Imageinfo';
        }
 }
index 029d945..1b39d28 100644 (file)
@@ -172,6 +172,6 @@ class ApiQueryImages extends ApiQueryGeneratorBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Properties#images_.2F_im';
+               return 'https://www.mediawiki.org/wiki/API:Images';
        }
 }
index db28df7..eee5dae 100644 (file)
@@ -395,10 +395,10 @@ class ApiQueryInfo extends ApiQueryBase {
                        $pageInfo['length'] = intval( $this->pageLength[$pageid] );
 
                        if ( isset( $this->pageIsRedir[$pageid] ) && $this->pageIsRedir[$pageid] ) {
-                               $pageInfo['redirect'] = '';
+                               $pageInfo['redirect'] = true;
                        }
                        if ( $this->pageIsNew[$pageid] ) {
-                               $pageInfo['new'] = '';
+                               $pageInfo['new'] = true;
                        }
                }
 
@@ -431,8 +431,8 @@ class ApiQueryInfo extends ApiQueryBase {
                        ApiResult::setIndexedTagName( $pageInfo['restrictiontypes'], 'rt' );
                }
 
-               if ( $this->fld_watched && isset( $this->watched[$ns][$dbkey] ) ) {
-                       $pageInfo['watched'] = '';
+               if ( $this->fld_watched ) {
+                       $pageInfo['watched'] = isset( $this->watched[$ns][$dbkey] );
                }
 
                if ( $this->fld_watchers ) {
@@ -464,8 +464,8 @@ class ApiQueryInfo extends ApiQueryBase {
                        $pageInfo['editurl'] = wfExpandUrl( $title->getFullURL( 'action=edit' ), PROTO_CURRENT );
                        $pageInfo['canonicalurl'] = wfExpandUrl( $title->getFullURL(), PROTO_CANONICAL );
                }
-               if ( $this->fld_readable && $title->userCan( 'read', $this->getUser() ) ) {
-                       $pageInfo['readable'] = '';
+               if ( $this->fld_readable ) {
+                       $pageInfo['readable'] = $title->userCan( 'read', $this->getUser() );
                }
 
                if ( $this->fld_preload ) {
@@ -497,9 +497,7 @@ class ApiQueryInfo extends ApiQueryBase {
                        $pageInfo['actions'] = array();
                        foreach ( $this->params['testactions'] as $action ) {
                                $this->countTestedActions++;
-                               if ( $title->userCan( $action, $user ) ) {
-                                       $pageInfo['actions'][$action] = '';
-                               }
+                               $pageInfo['actions'][$action] = $title->userCan( $action, $user );
                        }
                }
 
@@ -532,7 +530,7 @@ class ApiQueryInfo extends ApiQueryBase {
                                        'expiry' => $wgContLang->formatExpiry( $row->pr_expiry, TS_ISO_8601 )
                                );
                                if ( $row->pr_cascade ) {
-                                       $a['cascade'] = '';
+                                       $a['cascade'] = true;
                                }
                                $this->protections[$title->getNamespace()][$title->getDBkey()][] = $a;
                        }
@@ -870,6 +868,6 @@ class ApiQueryInfo extends ApiQueryBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Properties#info_.2F_in';
+               return 'https://www.mediawiki.org/wiki/API:Info';
        }
 }
index 885d10c..7be18b2 100644 (file)
@@ -131,7 +131,7 @@ class ApiQueryLangBacklinks extends ApiQueryGeneratorBase {
                                ApiQueryBase::addTitleInfo( $entry, $title );
 
                                if ( $row->page_is_redirect ) {
-                                       $entry['redirect'] = '';
+                                       $entry['redirect'] = true;
                                }
 
                                if ( $lllang ) {
index 5919ee9..8f8a17d 100644 (file)
@@ -183,6 +183,6 @@ class ApiQueryLangLinks extends ApiQueryBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Properties#langlinks_.2F_ll';
+               return 'https://www.mediawiki.org/wiki/API:Langlinks';
        }
 }
index 3bd3714..d7b85c9 100644 (file)
@@ -42,13 +42,13 @@ class ApiQueryLinks extends ApiQueryGeneratorBase {
                                $this->table = 'pagelinks';
                                $this->prefix = 'pl';
                                $this->titlesParam = 'titles';
-                               $this->helpUrl = 'https://www.mediawiki.org/wiki/API:Properties#links_.2F_pl';
+                               $this->helpUrl = 'https://www.mediawiki.org/wiki/API:Links';
                                break;
                        case self::TEMPLATES:
                                $this->table = 'templatelinks';
                                $this->prefix = 'tl';
                                $this->titlesParam = 'templates';
-                               $this->helpUrl = 'https://www.mediawiki.org/wiki/API:Properties#templates_.2F_tl';
+                               $this->helpUrl = 'https://www.mediawiki.org/wiki/API:Templates';
                                break;
                        default:
                                ApiBase::dieDebug( __METHOD__, 'Unknown module name' );
index 553747e..7b2381f 100644 (file)
@@ -230,9 +230,6 @@ class ApiQueryLogEvents extends ApiQueryBase {
                        }
 
                        $vals = $this->extractRowInfo( $row );
-                       if ( !$vals ) {
-                               continue;
-                       }
                        $fit = $result->addValue( array( 'query', $this->getModuleName() ), null, $vals );
                        if ( !$fit ) {
                                $this->setContinueEnumParameter( 'continue', "$row->log_timestamp|$row->log_id" );
@@ -270,7 +267,9 @@ class ApiQueryLogEvents extends ApiQueryBase {
 
        private function extractRowInfo( $row ) {
                $logEntry = DatabaseLogEntry::newFromRow( $row );
-               $vals = array();
+               $vals = array(
+                       ApiResult::META_TYPE => 'assoc',
+               );
                $anyHidden = false;
                $user = $this->getUser();
 
@@ -284,7 +283,7 @@ class ApiQueryLogEvents extends ApiQueryBase {
 
                if ( $this->fld_title || $this->fld_ids || $this->fld_details && $row->log_params !== '' ) {
                        if ( LogEventsList::isDeleted( $row, LogPage::DELETED_ACTION ) ) {
-                               $vals['actionhidden'] = '';
+                               $vals['actionhidden'] = true;
                                $anyHidden = true;
                        }
                        if ( LogEventsList::userCan( $row, LogPage::DELETED_ACTION, $user ) ) {
@@ -308,7 +307,7 @@ class ApiQueryLogEvents extends ApiQueryBase {
 
                if ( $this->fld_user || $this->fld_userid ) {
                        if ( LogEventsList::isDeleted( $row, LogPage::DELETED_USER ) ) {
-                               $vals['userhidden'] = '';
+                               $vals['userhidden'] = true;
                                $anyHidden = true;
                        }
                        if ( LogEventsList::userCan( $row, LogPage::DELETED_USER, $user ) ) {
@@ -320,7 +319,7 @@ class ApiQueryLogEvents extends ApiQueryBase {
                                }
 
                                if ( !$row->log_user ) {
-                                       $vals['anon'] = '';
+                                       $vals['anon'] = true;
                                }
                        }
                }
@@ -330,7 +329,7 @@ class ApiQueryLogEvents extends ApiQueryBase {
 
                if ( ( $this->fld_comment || $this->fld_parsedcomment ) && isset( $row->log_comment ) ) {
                        if ( LogEventsList::isDeleted( $row, LogPage::DELETED_COMMENT ) ) {
-                               $vals['commenthidden'] = '';
+                               $vals['commenthidden'] = true;
                                $anyHidden = true;
                        }
                        if ( LogEventsList::userCan( $row, LogPage::DELETED_COMMENT, $user ) ) {
@@ -355,7 +354,7 @@ class ApiQueryLogEvents extends ApiQueryBase {
                }
 
                if ( $anyHidden && LogEventsList::isDeleted( $row, LogPage::DELETED_RESTRICTED ) ) {
-                       $vals['suppressed'] = '';
+                       $vals['suppressed'] = true;
                }
 
                return $vals;
index 269afb1..1f992f8 100644 (file)
@@ -110,6 +110,7 @@ class ApiQueryPageProps extends ApiQueryBase {
         * @return bool True if it fits in the result
         */
        private function addPageProps( $result, $page, $props ) {
+               ApiResult::setArrayType( $props, 'assoc' );
                $fit = $result->addValue( array( 'query', 'pages', $page ), 'pageprops', $props );
 
                if ( !$fit ) {
@@ -136,12 +137,12 @@ class ApiQueryPageProps extends ApiQueryBase {
 
        protected function getExamplesMessages() {
                return array(
-                       'action=query&prop=pageprops&titles=Category:Foo'
+                       'action=query&prop=pageprops&titles=Main%20Page|MediaWiki'
                                => 'apihelp-query+pageprops-example-simple',
                );
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Properties#pageprops_.2F_pp';
+               return 'https://www.mediawiki.org/wiki/API:Pageprops';
        }
 }
index 143bc06..7bcaf24 100644 (file)
@@ -99,7 +99,9 @@ class ApiQueryPagesWithProp extends ApiQueryGeneratorBase {
                        }
 
                        if ( $resultPageSet === null ) {
-                               $vals = array();
+                               $vals = array(
+                                       ApiResult::META_TYPE => 'assoc',
+                               );
                                if ( $fld_ids ) {
                                        $vals['pageid'] = (int)$row->page_id;
                                }
index 35942ca..8eb644f 100644 (file)
@@ -69,7 +69,7 @@ class ApiQueryPrefixSearch extends ApiQueryGeneratorBase {
                                        'title' => $title->getPrefixedText(),
                                );
                                if ( $title->isSpecialPage() ) {
-                                       $vals['special'] = '';
+                                       $vals['special'] = true;
                                } else {
                                        $vals['pageid'] = intval( $title->getArticleId() );
                                }
index fb65e5e..033310d 100644 (file)
@@ -123,7 +123,7 @@ class ApiQueryProtectedTitles extends ApiQueryGeneratorBase {
                                }
 
                                if ( isset( $prop['userid'] ) || /*B/C*/isset( $prop['user'] ) ) {
-                                       $vals['userid'] = $row->pt_user;
+                                       $vals['userid'] = (int)$row->pt_user;
                                }
 
                                if ( isset( $prop['comment'] ) ) {
index 062a44f..650ac8f 100644 (file)
@@ -68,9 +68,9 @@ class ApiQueryQueryPage extends ApiQueryGeneratorBase {
                $r = array( 'name' => $params['page'] );
                if ( $qp->isCached() ) {
                        if ( !$qp->isCacheable() ) {
-                               $r['disabled'] = '';
+                               $r['disabled'] = true;
                        } else {
-                               $r['cached'] = '';
+                               $r['cached'] = true;
                                $ts = $qp->getCachedTimestamp();
                                if ( $ts ) {
                                        $r['cachedtimestamp'] = wfTimestamp( TS_ISO_8601, $ts );
index 28f8b7d..74bccc2 100644 (file)
@@ -384,9 +384,6 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                                $vals = $this->extractRowInfo( $row );
 
                                /* Add that row's data to our final output. */
-                               if ( !$vals ) {
-                                       continue;
-                               }
                                $fit = $result->addValue( array( 'query', $this->getModuleName() ), null, $vals );
                                if ( !$fit ) {
                                        $this->setContinueEnumParameter( 'continue', "$row->rc_timestamp|$row->rc_id" );
@@ -428,7 +425,7 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                /* Create a new entry in the result for the title. */
                if ( $this->fld_title || $this->fld_ids ) {
                        if ( $type === RC_LOG && ( $row->rc_deleted & LogPage::DELETED_ACTION ) ) {
-                               $vals['actionhidden'] = '';
+                               $vals['actionhidden'] = true;
                                $anyHidden = true;
                        }
                        if ( $type !== RC_LOG ||
@@ -452,7 +449,7 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                /* Add user data and 'anon' flag, if user is anonymous. */
                if ( $this->fld_user || $this->fld_userid ) {
                        if ( $row->rc_deleted & Revision::DELETED_USER ) {
-                               $vals['userhidden'] = '';
+                               $vals['userhidden'] = true;
                                $anyHidden = true;
                        }
                        if ( Revision::userCanBitfield( $row->rc_deleted, Revision::DELETED_USER, $user ) ) {
@@ -461,26 +458,20 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                                }
 
                                if ( $this->fld_userid ) {
-                                       $vals['userid'] = $row->rc_user;
+                                       $vals['userid'] = (int)$row->rc_user;
                                }
 
                                if ( !$row->rc_user ) {
-                                       $vals['anon'] = '';
+                                       $vals['anon'] = true;
                                }
                        }
                }
 
                /* Add flags, such as new, minor, bot. */
                if ( $this->fld_flags ) {
-                       if ( $row->rc_bot ) {
-                               $vals['bot'] = '';
-                       }
-                       if ( $row->rc_type == RC_NEW ) {
-                               $vals['new'] = '';
-                       }
-                       if ( $row->rc_minor ) {
-                               $vals['minor'] = '';
-                       }
+                       $vals['bot'] = (bool)$row->rc_bot;
+                       $vals['new'] = $row->rc_type == RC_NEW;
+                       $vals['minor'] = (bool)$row->rc_minor;
                }
 
                /* Add sizes of each revision. (Only available on 1.10+) */
@@ -497,7 +488,7 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                /* Add edit summary / log summary. */
                if ( $this->fld_comment || $this->fld_parsedcomment ) {
                        if ( $row->rc_deleted & Revision::DELETED_COMMENT ) {
-                               $vals['commenthidden'] = '';
+                               $vals['commenthidden'] = true;
                                $anyHidden = true;
                        }
                        if ( Revision::userCanBitfield( $row->rc_deleted, Revision::DELETED_COMMENT, $user ) ) {
@@ -512,23 +503,18 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                }
 
                if ( $this->fld_redirect ) {
-                       if ( $row->page_is_redirect ) {
-                               $vals['redirect'] = '';
-                       }
+                       $vals['redirect'] = (bool)$row->page_is_redirect;
                }
 
                /* Add the patrolled flag */
-               if ( $this->fld_patrolled && $row->rc_patrolled == 1 ) {
-                       $vals['patrolled'] = '';
-               }
-
-               if ( $this->fld_patrolled && ChangesList::isUnpatrolled( $row, $user ) ) {
-                       $vals['unpatrolled'] = '';
+               if ( $this->fld_patrolled ) {
+                       $vals['patrolled'] = $row->rc_patrolled == 1;
+                       $vals['unpatrolled'] = ChangesList::isUnpatrolled( $row, $user );
                }
 
                if ( $this->fld_loginfo && $row->rc_type == RC_LOG ) {
                        if ( $row->rc_deleted & LogPage::DELETED_ACTION ) {
-                               $vals['actionhidden'] = '';
+                               $vals['actionhidden'] = true;
                                $anyHidden = true;
                        }
                        if ( LogEventsList::userCanBitfield( $row->rc_deleted, LogPage::DELETED_ACTION, $user ) ) {
@@ -551,7 +537,7 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
 
                if ( $this->fld_sha1 && $row->rev_sha1 !== null ) {
                        if ( $row->rev_deleted & Revision::DELETED_TEXT ) {
-                               $vals['sha1hidden'] = '';
+                               $vals['sha1hidden'] = true;
                                $anyHidden = true;
                        }
                        if ( Revision::userCanBitfield( $row->rev_deleted, Revision::DELETED_TEXT, $user ) ) {
@@ -577,7 +563,7 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                }
 
                if ( $anyHidden && ( $row->rc_deleted & Revision::DELETED_RESTRICTED ) ) {
-                       $vals['suppressed'] = '';
+                       $vals['suppressed'] = true;
                }
 
                return $vals;
index 552ca3b..9e02551 100644 (file)
@@ -91,10 +91,10 @@ class ApiQueryRevisions extends ApiQueryRevisionsBase {
                // Enum mode can only be used when exactly one page is provided.
                // Enumerating revisions on multiple pages make it extremely
                // difficult to manage continuations and require additional SQL indexes
-               $enumRevMode = ( !is_null( $params['user'] ) || !is_null( $params['excludeuser'] ) ||
-                       !is_null( $params['limit'] ) || !is_null( $params['startid'] ) ||
-                       !is_null( $params['endid'] ) || $params['dir'] === 'newer' ||
-                       !is_null( $params['start'] ) || !is_null( $params['end'] ) );
+               $enumRevMode = ( $params['user'] !== null || $params['excludeuser'] !== null ||
+                       $params['limit'] !== null || $params['startid'] !== null ||
+                       $params['endid'] !== null || $params['dir'] === 'newer' ||
+                       $params['start'] !== null || $params['end'] !== null );
 
                $pageSet = $this->getPageSet();
                $pageCount = $pageSet->getGoodTitleCount();
@@ -149,7 +149,7 @@ class ApiQueryRevisions extends ApiQueryRevisionsBase {
                        }
                } else {
                        $this->limit = $this->getParameter( 'limit' ) ?: 10;
-                       $this->addFields( array( 'rev_id', 'rev_page' ) );
+                       $this->addFields( array( 'rev_id', 'rev_timestamp', 'rev_page' ) );
                }
 
                if ( $this->fld_tags ) {
@@ -160,7 +160,7 @@ class ApiQueryRevisions extends ApiQueryRevisionsBase {
                        $this->addFields( 'ts_tags' );
                }
 
-               if ( !is_null( $params['tag'] ) ) {
+               if ( $params['tag'] !== null ) {
                        $this->addTables( 'change_tag' );
                        $this->addJoinConds(
                                array( 'change_tag' => array( 'INNER JOIN', array( 'rev_id=ct_rev_id' ) ) )
@@ -196,58 +196,77 @@ class ApiQueryRevisions extends ApiQueryRevisionsBase {
                }
 
                if ( $enumRevMode ) {
+                       // Indexes targeted:
+                       //  page_timestamp if we don't have rvuser
+                       //  page_user_timestamp if we have a logged-in rvuser
+                       //  page_timestamp or usertext_timestamp if we have an IP rvuser
+
                        // This is mostly to prevent parameter errors (and optimize SQL?)
-                       if ( !is_null( $params['startid'] ) && !is_null( $params['start'] ) ) {
+                       if ( $params['startid'] !== null && $params['start'] !== null ) {
                                $this->dieUsage( 'start and startid cannot be used together', 'badparams' );
                        }
 
-                       if ( !is_null( $params['endid'] ) && !is_null( $params['end'] ) ) {
+                       if ( $params['endid'] !== null && $params['end'] !== null ) {
                                $this->dieUsage( 'end and endid cannot be used together', 'badparams' );
                        }
 
-                       if ( !is_null( $params['user'] ) && !is_null( $params['excludeuser'] ) ) {
+                       if ( $params['user'] !== null && $params['excludeuser'] !== null ) {
                                $this->dieUsage( 'user and excludeuser cannot be used together', 'badparams' );
                        }
 
-                       // Continuing effectively uses startid. But we can't use rvstartid
-                       // directly, because there is no way to tell the client to ''not''
-                       // send rvstart if it sent it in the original query. So instead we
-                       // send the continuation startid as rvcontinue, and ignore both
-                       // rvstart and rvstartid when that is supplied.
-                       if ( !is_null( $params['continue'] ) ) {
-                               $params['startid'] = $params['continue'];
-                               $params['start'] = null;
+                       if ( $params['continue'] !== null ) {
+                               $cont = explode( '|', $params['continue'] );
+                               $this->dieContinueUsageIf( count( $cont ) != 2 );
+                               $op = ( $params['dir'] === 'newer' ? '>' : '<' );
+                               $continueTimestamp = $db->addQuotes( $db->timestamp( $cont[0] ) );
+                               $continueId = (int)$cont[1];
+                               $this->dieContinueUsageIf( $continueId != $cont[1] );
+                               $this->addWhere( "rev_timestamp $op $continueTimestamp OR " .
+                                       "(rev_timestamp = $continueTimestamp AND " .
+                                       "rev_id $op= $continueId)"
+                               );
                        }
 
-                       // This code makes an assumption that sorting by rev_id and rev_timestamp produces
-                       // the same result. This way users may request revisions starting at a given time,
-                       // but to page through results use the rev_id returned after each page.
-                       // Switching to rev_id removes the potential problem of having more than
-                       // one row with the same timestamp for the same page.
-                       // The order needs to be the same as start parameter to avoid SQL filesort.
-                       if ( is_null( $params['startid'] ) && is_null( $params['endid'] ) ) {
-                               $this->addTimestampWhereRange( 'rev_timestamp', $params['dir'],
-                                       $params['start'], $params['end'] );
-                       } else {
-                               $this->addWhereRange( 'rev_id', $params['dir'],
-                                       $params['startid'], $params['endid'] );
-                               // One of start and end can be set
-                               // If neither is set, this does nothing
-                               $this->addTimestampWhereRange( 'rev_timestamp', $params['dir'],
-                                       $params['start'], $params['end'], false );
+                       // Query optimization: since we're targeting ranges of
+                       // rev_timestamp,rev_id, if we're given an id then extract the
+                       // corresponding timestamp from the DB.
+                       // Note we don't use Revision::getTimestampFromId() since we don't
+                       // have a Title to pass it and there's not any real need to create one.
+                       if ( $params['startid'] !== null ) {
+                               $params['start'] = $db->selectField( 'revision', 'rev_timestamp',
+                                       array( 'rev_id' => $params['startid'] ), __METHOD__ );
+                       }
+                       if ( $params['endid'] !== null ) {
+                               $params['end'] = $db->selectField( 'revision', 'rev_timestamp',
+                                       array( 'rev_id' => $params['endid'] ), __METHOD__ );
                        }
 
+                       $this->addTimestampWhereRange( 'rev_timestamp', $params['dir'],
+                               $params['start'], $params['end'] );
+                       $this->addWhereRange( 'rev_id', $params['dir'],
+                               $params['startid'], $params['endid'] );
+
                        // There is only one ID, use it
                        $ids = array_keys( $pageSet->getGoodTitles() );
                        $this->addWhereFld( 'rev_page', reset( $ids ) );
 
-                       if ( !is_null( $params['user'] ) ) {
-                               $this->addWhereFld( 'rev_user_text', $params['user'] );
-                       } elseif ( !is_null( $params['excludeuser'] ) ) {
-                               $this->addWhere( 'rev_user_text != ' .
-                                       $db->addQuotes( $params['excludeuser'] ) );
+                       if ( $params['user'] !== null ) {
+                               $user = User::newFromName( $params['user'] );
+                               if ( $user && $user->getId() > 0 ) {
+                                       $this->addWhereFld( 'rev_user', $user->getId() );
+                               } else {
+                                       $this->addWhereFld( 'rev_user_text', $params['user'] );
+                               }
+                       } elseif ( $params['excludeuser'] !== null ) {
+                               $user = User::newFromName( $params['excludeuser'] );
+                               if ( $user && $user->getId() > 0 ) {
+                                       $this->addWhere( 'rev_user != ' . $user->getId() );
+                               } else {
+                                       $this->addWhere( 'rev_user_text != ' .
+                                               $db->addQuotes( $params['excludeuser'] ) );
+                               }
                        }
-                       if ( !is_null( $params['user'] ) || !is_null( $params['excludeuser'] ) ) {
+                       if ( $params['user'] !== null || $params['excludeuser'] !== null ) {
                                // Paranoia: avoid brute force searches (bug 17342)
                                if ( !$this->getUser()->isAllowed( 'deletedhistory' ) ) {
                                        $bitmask = Revision::DELETED_USER;
@@ -261,16 +280,20 @@ class ApiQueryRevisions extends ApiQueryRevisionsBase {
                                }
                        }
                } elseif ( $revCount > 0 ) {
+                       // Always targets the PRIMARY index
+
                        $revs = $pageSet->getLiveRevisionIDs();
 
                        // Get all revision IDs
                        $this->addWhereFld( 'rev_id', array_keys( $revs ) );
 
-                       if ( !is_null( $params['continue'] ) ) {
+                       if ( $params['continue'] !== null ) {
                                $this->addWhere( 'rev_id >= ' . intval( $params['continue'] ) );
                        }
                        $this->addOption( 'ORDER BY', 'rev_id' );
                } elseif ( $pageCount > 0 ) {
+                       // Always targets the rev_page_id index
+
                        $titles = $pageSet->getGoodTitles();
 
                        // When working in multi-page non-enumeration mode,
@@ -282,7 +305,7 @@ class ApiQueryRevisions extends ApiQueryRevisionsBase {
                        // Every time someone relies on equality propagation, god kills a kitten :)
                        $this->addWhereFld( 'rev_page', array_keys( $titles ) );
 
-                       if ( !is_null( $params['continue'] ) ) {
+                       if ( $params['continue'] !== null ) {
                                $cont = explode( '|', $params['continue'] );
                                $this->dieContinueUsageIf( count( $cont ) != 2 );
                                $pageid = intval( $cont[0] );
@@ -312,7 +335,8 @@ class ApiQueryRevisions extends ApiQueryRevisionsBase {
                                // We've reached the one extra which shows that there are
                                // additional pages to be had. Stop here...
                                if ( $enumRevMode ) {
-                                       $this->setContinueEnumParameter( 'continue', intval( $row->rev_id ) );
+                                       $this->setContinueEnumParameter( 'continue',
+                                               $row->rev_timestamp . '|' . intval( $row->rev_id ) );
                                } elseif ( $revCount > 0 ) {
                                        $this->setContinueEnumParameter( 'continue', intval( $row->rev_id ) );
                                } else {
@@ -344,7 +368,8 @@ class ApiQueryRevisions extends ApiQueryRevisionsBase {
                                $fit = $this->addPageSubItem( $row->rev_page, $rev, 'rev' );
                                if ( !$fit ) {
                                        if ( $enumRevMode ) {
-                                               $this->setContinueEnumParameter( 'continue', intval( $row->rev_id ) );
+                                               $this->setContinueEnumParameter( 'continue',
+                                                       $row->rev_timestamp . '|' . intval( $row->rev_id ) );
                                        } elseif ( $revCount > 0 ) {
                                                $this->setContinueEnumParameter( 'continue', intval( $row->rev_id ) );
                                        } else {
@@ -443,6 +468,6 @@ class ApiQueryRevisions extends ApiQueryRevisionsBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Properties#revisions_.2F_rv';
+               return 'https://www.mediawiki.org/wiki/API:Revisions';
        }
 }
index 1805f40..64f6120 100644 (file)
@@ -168,13 +168,13 @@ abstract class ApiQueryRevisionsBase extends ApiQueryGeneratorBase {
                        }
                }
 
-               if ( $this->fld_flags && $revision->isMinor() ) {
-                       $vals['minor'] = '';
+               if ( $this->fld_flags ) {
+                       $vals['minor'] = $revision->isMinor();
                }
 
                if ( $this->fld_user || $this->fld_userid ) {
                        if ( $revision->isDeleted( Revision::DELETED_USER ) ) {
-                               $vals['userhidden'] = '';
+                               $vals['userhidden'] = true;
                                $anyHidden = true;
                        }
                        if ( $revision->userCan( Revision::DELETED_USER, $user ) ) {
@@ -183,7 +183,7 @@ abstract class ApiQueryRevisionsBase extends ApiQueryGeneratorBase {
                                }
                                $userid = $revision->getUser( Revision::RAW );
                                if ( !$userid ) {
-                                       $vals['anon'] = '';
+                                       $vals['anon'] = true;
                                }
 
                                if ( $this->fld_userid ) {
@@ -206,7 +206,7 @@ abstract class ApiQueryRevisionsBase extends ApiQueryGeneratorBase {
 
                if ( $this->fld_sha1 ) {
                        if ( $revision->isDeleted( Revision::DELETED_TEXT ) ) {
-                               $vals['sha1hidden'] = '';
+                               $vals['sha1hidden'] = true;
                                $anyHidden = true;
                        }
                        if ( $revision->userCan( Revision::DELETED_TEXT, $user ) ) {
@@ -224,7 +224,7 @@ abstract class ApiQueryRevisionsBase extends ApiQueryGeneratorBase {
 
                if ( $this->fld_comment || $this->fld_parsedcomment ) {
                        if ( $revision->isDeleted( Revision::DELETED_COMMENT ) ) {
-                               $vals['commenthidden'] = '';
+                               $vals['commenthidden'] = true;
                                $anyHidden = true;
                        }
                        if ( $revision->userCan( Revision::DELETED_COMMENT, $user ) ) {
@@ -267,10 +267,10 @@ abstract class ApiQueryRevisionsBase extends ApiQueryGeneratorBase {
                                }
                        }
                        if ( $revision->isDeleted( Revision::DELETED_TEXT ) ) {
-                               $vals['texthidden'] = '';
+                               $vals['texthidden'] = true;
                                $anyHidden = true;
                        } elseif ( !$content ) {
-                               $vals['textmissing'] = '';
+                               $vals['textmissing'] = true;
                        }
                }
                if ( $this->fld_content && $content ) {
@@ -293,7 +293,7 @@ abstract class ApiQueryRevisionsBase extends ApiQueryGeneratorBase {
                                        }
                                        $vals['parsetree'] = $xml;
                                } else {
-                                       $vals['badcontentformatforparsetree'] = '';
+                                       $vals['badcontentformatforparsetree'] = true;
                                        $this->setWarning( "Conversion to XML is supported for wikitext only, " .
                                                $title->getPrefixedDBkey() .
                                                " uses content model " . $content->getModel() );
@@ -314,7 +314,7 @@ abstract class ApiQueryRevisionsBase extends ApiQueryGeneratorBase {
                                        $this->setWarning( "Template expansion is supported for wikitext only, " .
                                                $title->getPrefixedDBkey() .
                                                " uses content model " . $content->getModel() );
-                                       $vals['badcontentformat'] = '';
+                                       $vals['badcontentformat'] = true;
                                        $text = false;
                                }
                        }
@@ -335,7 +335,7 @@ abstract class ApiQueryRevisionsBase extends ApiQueryGeneratorBase {
                                        $name = $title->getPrefixedDBkey();
                                        $this->setWarning( "The requested format {$this->contentFormat} is not " .
                                                "supported for content model $model used by $name" );
-                                       $vals['badcontentformat'] = '';
+                                       $vals['badcontentformat'] = true;
                                        $text = false;
                                } else {
                                        $text = $content->serialize( $format );
@@ -369,7 +369,7 @@ abstract class ApiQueryRevisionsBase extends ApiQueryGeneratorBase {
                                                $name = $title->getPrefixedDBkey();
                                                $this->setWarning( "The requested format {$this->contentFormat} is not " .
                                                        "supported for content model $model used by $name" );
-                                               $vals['diff']['badcontentformat'] = '';
+                                               $vals['diff']['badcontentformat'] = true;
                                                $engine = null;
                                        } else {
                                                $difftocontent = ContentHandler::makeContent(
@@ -395,12 +395,12 @@ abstract class ApiQueryRevisionsBase extends ApiQueryGeneratorBase {
                                        }
                                }
                        } else {
-                               $vals['diff']['notcached'] = '';
+                               $vals['diff']['notcached'] = true;
                        }
                }
 
                if ( $anyHidden && $revision->isDeleted( Revision::DELETED_RESTRICTED ) ) {
-                       $vals['suppressed'] = '';
+                       $vals['suppressed'] = true;
                }
 
                return $vals;
index e29ef8d..90af15a 100644 (file)
@@ -92,7 +92,9 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
                } elseif ( $what == 'title' ) {
                        $matches = $search->searchTitle( $query );
                } elseif ( $what == 'nearmatch' ) {
-                       $matches = SearchEngine::getNearMatchResultSet( $query );
+                       // near matches must receive the user input as provided, otherwise
+                       // the near matches within namespaces are lost.
+                       $matches = SearchEngine::getNearMatchResultSet( $params['search'] );
                } else {
                        // We default to title searches; this is a terrible legacy
                        // of the way we initially set up the MySQL fulltext-based
@@ -129,6 +131,8 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
                        if ( isset( $searchInfo['suggestion'] ) && $matches->hasSuggestion() ) {
                                $apiResult->addValue( array( 'query', 'searchinfo' ),
                                        'suggestion', $matches->getSuggestionQuery() );
+                               $apiResult->addValue( array( 'query', 'searchinfo' ),
+                                       'suggestionsnippet', $matches->getSuggestionSnippet() );
                        }
                }
 
@@ -172,6 +176,9 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
                                if ( isset( $prop['titlesnippet'] ) ) {
                                        $vals['titlesnippet'] = $result->getTitleSnippet();
                                }
+                               if ( isset( $prop['categorysnippet'] ) ) {
+                                       $vals['categorysnippet'] = $result->getCategorySnippet();
+                               }
                                if ( !is_null( $result->getRedirectTitle() ) ) {
                                        if ( isset( $prop['redirecttitle'] ) ) {
                                                $vals['redirecttitle'] = $result->getRedirectTitle()->getPrefixedText();
@@ -188,6 +195,9 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
                                                $vals['sectionsnippet'] = $result->getSectionSnippet();
                                        }
                                }
+                               if ( isset( $prop['isfilematch'] ) ) {
+                                       $vals['isfilematch'] = $result->isFileMatch();
+                               }
 
                                // Add item to results and see whether it fits
                                $fit = $apiResult->addValue( array( 'query', $this->getModuleName() ),
@@ -314,6 +324,8 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
                                        'sectiontitle',
                                        'sectionsnippet',
                                        'hasrelated',
+                                       'isfilematch',
+                                       'categorysnippet',
                                ),
                                ApiBase::PARAM_ISMULTI => true,
                        ),
index 22447f7..1dc9985 100644 (file)
@@ -150,9 +150,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                $allowFrom = array( '' );
                $allowException = true;
                if ( !$config->get( 'AllowExternalImages' ) ) {
-                       if ( $config->get( 'EnableImageWhitelist' ) ) {
-                               $data['imagewhitelistenabled'] = '';
-                       }
+                       $data['imagewhitelistenabled'] = (bool)$config->get( 'EnableImageWhitelist' );
                        $allowFrom = $config->get( 'AllowExternalImagesFrom' );
                        $allowException = !empty( $allowFrom );
                }
@@ -161,13 +159,8 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                        ApiResult::setIndexedTagName( $data['externalimages'], 'prefix' );
                }
 
-               if ( !$config->get( 'DisableLangConversion' ) ) {
-                       $data['langconversion'] = '';
-               }
-
-               if ( !$config->get( 'DisableTitleConversion' ) ) {
-                       $data['titleconversion'] = '';
-               }
+               $data['langconversion'] = !$config->get( 'DisableLangConversion' );
+               $data['titleconversion'] = !$config->get( 'DisableTitleConversion' );
 
                if ( $wgContLang->linkPrefixExtension() ) {
                        $linkPrefixCharset = $wgContLang->linkPrefixCharset();
@@ -180,13 +173,10 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                }
 
                $linktrail = $wgContLang->linkTrail();
-               if ( $linktrail ) {
-                       $data['linktrail'] = $linktrail;
-               } else {
-                       $data['linktrail'] = '';
-               }
+               $data['linktrail'] = $linktrail ?: '';
 
                $data['legaltitlechars'] = Title::legalChars();
+               $data['invalidusernamechars'] = $config->get( 'InvalidUsernameCharacters' );
 
                global $IP;
                $git = SpecialVersion::getGitHeadSha1( $IP );
@@ -224,18 +214,14 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                        ApiResult::setIndexedTagName( $data['variants'], 'lang' );
                }
 
-               if ( $wgContLang->isRTL() ) {
-                       $data['rtl'] = '';
-               }
+               $data['rtl'] = $wgContLang->isRTL();
                $data['fallback8bitEncoding'] = $wgContLang->fallback8bitEncoding();
 
-               if ( wfReadOnly() ) {
-                       $data['readonly'] = '';
+               $data['readonly'] = wfReadOnly();
+               if ( $data['readonly'] ) {
                        $data['readonlyreason'] = wfReadOnlyReason();
                }
-               if ( $config->get( 'EnableWriteAPI' ) ) {
-                       $data['writeapi'] = '';
-               }
+               $data['writeapi'] = (bool)$config->get( 'EnableWriteAPI' );
 
                $tz = $config->get( 'Localtimezone' );
                $offset = $config->get( 'LocalTZoffset' );
@@ -251,20 +237,21 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                $data['scriptpath'] = $config->get( 'ScriptPath' );
                $data['script'] = $config->get( 'Script' );
                $data['variantarticlepath'] = $config->get( 'VariantArticlePath' );
+               $data[ApiResult::META_BC_BOOLS][] = 'variantarticlepath';
                $data['server'] = $config->get( 'Server' );
                $data['servername'] = $config->get( 'ServerName' );
                $data['wikiid'] = wfWikiID();
                $data['time'] = wfTimestamp( TS_ISO_8601, time() );
 
-               if ( $config->get( 'MiserMode' ) ) {
-                       $data['misermode'] = '';
-               }
+               $data['misermode'] = (bool)$config->get( 'MiserMode' );
 
                $data['maxuploadsize'] = UploadBase::getMaxUploadSize();
 
                $data['thumblimits'] = $config->get( 'ThumbLimits' );
+               ApiResult::setArrayType( $data['thumblimits'], 'BCassoc' );
                ApiResult::setIndexedTagName( $data['thumblimits'], 'limit' );
                $data['imagelimits'] = array();
+               ApiResult::setArrayType( $data['imagelimits'], 'BCassoc' );
                ApiResult::setIndexedTagName( $data['imagelimits'], 'limit' );
                foreach ( $config->get( 'ImageLimits' ) as $k => $limit ) {
                        $data['imagelimits'][$k] = array( 'width' => $limit[0], 'height' => $limit[1] );
@@ -284,7 +271,9 @@ class ApiQuerySiteinfo extends ApiQueryBase {
 
        protected function appendNamespaces( $property ) {
                global $wgContLang;
-               $data = array();
+               $data = array(
+                       ApiResult::META_TYPE => 'assoc',
+               );
                foreach ( $wgContLang->getFormattedNamespaces() as $ns => $title ) {
                        $data[$ns] = array(
                                'id' => intval( $ns ),
@@ -293,21 +282,14 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                        ApiResult::setContentValue( $data[$ns], 'name', $title );
                        $canonical = MWNamespace::getCanonicalName( $ns );
 
-                       if ( MWNamespace::hasSubpages( $ns ) ) {
-                               $data[$ns]['subpages'] = '';
-                       }
+                       $data[$ns]['subpages'] = MWNamespace::hasSubpages( $ns );
 
                        if ( $canonical ) {
                                $data[$ns]['canonical'] = strtr( $canonical, '_', ' ' );
                        }
 
-                       if ( MWNamespace::isContent( $ns ) ) {
-                               $data[$ns]['content'] = '';
-                       }
-
-                       if ( MWNamespace::isNonincludable( $ns ) ) {
-                               $data[$ns]['nonincludable'] = '';
-                       }
+                       $data[$ns]['content'] = MWNamespace::isContent( $ns );
+                       $data[$ns]['nonincludable'] = MWNamespace::isNonincludable( $ns );
 
                        $contentmodel = MWNamespace::getNamespaceContentModel( $ns );
                        if ( $contentmodel ) {
@@ -367,9 +349,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                foreach ( $wgContLang->getMagicWords() as $magicword => $aliases ) {
                        $caseSensitive = array_shift( $aliases );
                        $arr = array( 'name' => $magicword, 'aliases' => $aliases );
-                       if ( $caseSensitive ) {
-                               $arr['case-sensitive'] = '';
-                       }
+                       $arr['case-sensitive'] = (bool)$caseSensitive;
                        ApiResult::setIndexedTagName( $arr['aliases'], 'alias' );
                        $data[] = $arr;
                }
@@ -402,20 +382,20 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                        $val = array();
                        $val['prefix'] = $prefix;
                        if ( isset( $row['iw_local'] ) && $row['iw_local'] == '1' ) {
-                               $val['local'] = '';
+                               $val['local'] = true;
                        }
                        if ( isset( $row['iw_trans'] ) && $row['iw_trans'] == '1' ) {
-                               $val['trans'] = '';
+                               $val['trans'] = true;
                        }
 
                        if ( isset( $langNames[$prefix] ) ) {
                                $val['language'] = $langNames[$prefix];
                        }
                        if ( in_array( $prefix, $localInterwikis ) ) {
-                               $val['localinterwiki'] = '';
+                               $val['localinterwiki'] = true;
                        }
                        if ( in_array( $prefix, $extraLangPrefixes ) ) {
-                               $val['extralanglink'] = '';
+                               $val['extralanglink'] = true;
 
                                $linktext = wfMessage( "interlanguage-link-$prefix" );
                                if ( !$linktext->isDisabled() ) {
@@ -429,9 +409,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                        }
 
                        $val['url'] = wfExpandUrl( $row['iw_url'], PROTO_CURRENT );
-                       if ( substr( $row['iw_url'], 0, 2 ) == '//' ) {
-                               $val['protorel'] = '';
-                       }
+                       $val['protorel'] = substr( $row['iw_url'], 0, 2 ) == '//';
                        if ( isset( $row['iw_wikiid'] ) && $row['iw_wikiid'] !== '' ) {
                                $val['wikiid'] = $row['iw_wikiid'];
                        }
@@ -747,10 +725,10 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                        $skin = array( 'code' => $name );
                        ApiResult::setContentValue( $skin, 'name', $displayName );
                        if ( !isset( $allowed[$name] ) ) {
-                               $skin['unusable'] = '';
+                               $skin['unusable'] = true;
                        }
                        if ( $name === $default ) {
-                               $skin['default'] = '';
+                               $skin['default'] = true;
                        }
                        $data[] = $skin;
                }
@@ -793,7 +771,9 @@ class ApiQuerySiteinfo extends ApiQueryBase {
        }
 
        public function appendDefaultOptions( $property ) {
-               return $this->getResult()->addValue( 'query', $property, User::getDefaultOptions() );
+               $options = User::getDefaultOptions();
+               $options[ApiResult::META_BC_BOOLS] = array_keys( $options );
+               return $this->getResult()->addValue( 'query', $property, $options );
        }
 
        private function formatParserTags( $item ) {
@@ -888,6 +868,6 @@ class ApiQuerySiteinfo extends ApiQueryBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Meta#siteinfo_.2F_si';
+               return 'https://www.mediawiki.org/wiki/API:Siteinfo';
        }
 }
index 1126842..3de72bf 100644 (file)
@@ -122,4 +122,8 @@ class ApiQueryStashImageInfo extends ApiQueryImageInfo {
                                => 'apihelp-query+stashimageinfo-example-params',
                );
        }
+
+       public function getHelpUrls() {
+               return 'https://www.mediawiki.org/wiki/API:Stashimageinfo';
+       }
 }
index aa91216..45f73b2 100644 (file)
@@ -108,8 +108,8 @@ class ApiQueryTags extends ApiQueryBase {
                        $isExtension = isset( $extensionDefinedTags[$tagName] );
                        $isExplicit = isset( $explicitlyDefinedTags[$tagName] );
 
-                       if ( $fld_defined && ( $isExtension || $isExplicit ) ) {
-                               $tag['defined'] = '';
+                       if ( $fld_defined ) {
+                               $tag['defined'] = $isExtension || $isExplicit;
                        }
 
                        if ( $fld_source ) {
@@ -122,10 +122,8 @@ class ApiQueryTags extends ApiQueryBase {
                                }
                        }
 
-                       if ( $fld_active &&
-                               ( $isExplicit || isset( $extensionActivatedTags[$tagName] ) )
-                       ) {
-                               $tag['active'] = '';
+                       if ( $fld_active ) {
+                               $tag['active'] = $isExplicit || isset( $extensionActivatedTags[$tagName] );
                        }
 
                        $fit = $result->addValue( array( 'query', $this->getModuleName() ), null, $tag );
index f8eee8d..f887664 100644 (file)
@@ -35,7 +35,9 @@ class ApiQueryTokens extends ApiQueryBase {
 
        public function execute() {
                $params = $this->extractRequestParams();
-               $res = array();
+               $res = array(
+                       ApiResult::META_TYPE => 'assoc',
+               );
 
                if ( $this->lacksSameOriginSecurity() ) {
                        $this->setWarning( 'Tokens may not be obtained when the same-origin policy is not applied' );
@@ -91,4 +93,8 @@ class ApiQueryTokens extends ApiQueryBase {
        public function getCacheMode( $params ) {
                return 'private';
        }
+
+       public function getHelpUrls() {
+               return 'https://www.mediawiki.org/wiki/API:Tokens';
+       }
 }
index f6c6356..480a1ab 100644 (file)
@@ -335,15 +335,15 @@ class ApiQueryContributions extends ApiQueryBase {
                $anyHidden = false;
 
                if ( $row->rev_deleted & Revision::DELETED_TEXT ) {
-                       $vals['texthidden'] = '';
+                       $vals['texthidden'] = true;
                        $anyHidden = true;
                }
 
                // Any rows where we can't view the user were filtered out in the query.
-               $vals['userid'] = $row->rev_user;
+               $vals['userid'] = (int)$row->rev_user;
                $vals['user'] = $row->rev_user_text;
                if ( $row->rev_deleted & Revision::DELETED_USER ) {
-                       $vals['userhidden'] = '';
+                       $vals['userhidden'] = true;
                        $anyHidden = true;
                }
                if ( $this->fld_ids ) {
@@ -367,20 +367,14 @@ class ApiQueryContributions extends ApiQueryBase {
                }
 
                if ( $this->fld_flags ) {
-                       if ( $row->rev_parent_id == 0 && !is_null( $row->rev_parent_id ) ) {
-                               $vals['new'] = '';
-                       }
-                       if ( $row->rev_minor_edit ) {
-                               $vals['minor'] = '';
-                       }
-                       if ( $row->page_latest == $row->rev_id ) {
-                               $vals['top'] = '';
-                       }
+                       $vals['new'] = $row->rev_parent_id == 0 && !is_null( $row->rev_parent_id );
+                       $vals['minor'] = (bool)$row->rev_minor_edit;
+                       $vals['top'] = $row->page_latest == $row->rev_id;
                }
 
                if ( ( $this->fld_comment || $this->fld_parsedcomment ) && isset( $row->rev_comment ) ) {
                        if ( $row->rev_deleted & Revision::DELETED_COMMENT ) {
-                               $vals['commenthidden'] = '';
+                               $vals['commenthidden'] = true;
                                $anyHidden = true;
                        }
 
@@ -400,8 +394,8 @@ class ApiQueryContributions extends ApiQueryBase {
                        }
                }
 
-               if ( $this->fld_patrolled && $row->rc_patrolled ) {
-                       $vals['patrolled'] = '';
+               if ( $this->fld_patrolled ) {
+                       $vals['patrolled'] = (bool)$row->rc_patrolled;
                }
 
                if ( $this->fld_size && !is_null( $row->rev_len ) ) {
@@ -429,7 +423,7 @@ class ApiQueryContributions extends ApiQueryBase {
                }
 
                if ( $anyHidden && $row->rev_deleted & Revision::DELETED_RESTRICTED ) {
-                       $vals['suppressed'] = '';
+                       $vals['suppressed'] = true;
                }
 
                return $vals;
index fd095fc..4302ef3 100644 (file)
@@ -61,7 +61,7 @@ class ApiQueryUserInfo extends ApiQueryBase {
                $vals['name'] = $user->getName();
 
                if ( $user->isAnon() ) {
-                       $vals['anon'] = '';
+                       $vals['anon'] = true;
                }
 
                if ( isset( $this->prop['blockinfo'] ) ) {
@@ -78,23 +78,26 @@ class ApiQueryUserInfo extends ApiQueryBase {
                        }
                }
 
-               if ( isset( $this->prop['hasmsg'] ) && $user->getNewtalk() ) {
-                       $vals['messages'] = '';
+               if ( isset( $this->prop['hasmsg'] ) ) {
+                       $vals['messages'] = $user->getNewtalk();
                }
 
                if ( isset( $this->prop['groups'] ) ) {
                        $vals['groups'] = $user->getEffectiveGroups();
+                       ApiResult::setArrayType( $vals['groups'], 'array' ); // even if empty
                        ApiResult::setIndexedTagName( $vals['groups'], 'g' ); // even if empty
                }
 
                if ( isset( $this->prop['implicitgroups'] ) ) {
                        $vals['implicitgroups'] = $user->getAutomaticGroups();
+                       ApiResult::setArrayType( $vals['implicitgroups'], 'array' ); // even if empty
                        ApiResult::setIndexedTagName( $vals['implicitgroups'], 'g' ); // even if empty
                }
 
                if ( isset( $this->prop['rights'] ) ) {
                        // User::getRights() may return duplicate values, strip them
                        $vals['rights'] = array_values( array_unique( $user->getRights() ) );
+                       ApiResult::setArrayType( $vals['rights'], 'array' ); // even if empty
                        ApiResult::setIndexedTagName( $vals['rights'], 'r' ); // even if empty
                }
 
@@ -108,6 +111,7 @@ class ApiQueryUserInfo extends ApiQueryBase {
 
                if ( isset( $this->prop['options'] ) ) {
                        $vals['options'] = $user->getOptions();
+                       $vals['options'][ApiResult::META_BC_BOOLS] = array_keys( $vals['options'] );
                }
 
                if ( isset( $this->prop['preferencestoken'] ) ) {
@@ -191,9 +195,13 @@ class ApiQueryUserInfo extends ApiQueryBase {
        }
 
        protected function getRateLimits() {
+               $retval = array(
+                       ApiResult::META_TYPE => 'assoc',
+               );
+
                $user = $this->getUser();
                if ( !$user->isPingLimitable() ) {
-                       return array(); // No limits
+                       return $retval; // No limits
                }
 
                // Find out which categories we belong to
@@ -213,7 +221,6 @@ class ApiQueryUserInfo extends ApiQueryBase {
                $categories = array_merge( $categories, $user->getGroups() );
 
                // Now get the actual limits
-               $retval = array();
                foreach ( $this->getConfig()->get( 'RateLimits' ) as $action => $limits ) {
                        foreach ( $categories as $cat ) {
                                if ( isset( $limits[$cat] ) && !is_null( $limits[$cat] ) ) {
@@ -267,6 +274,6 @@ class ApiQueryUserInfo extends ApiQueryBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Meta#userinfo_.2F_ui';
+               return 'https://www.mediawiki.org/wiki/API:Userinfo';
        }
 }
index e2c47f5..8b1a075 100644 (file)
@@ -110,7 +110,7 @@ class ApiQueryUsers extends ApiQueryBase {
                foreach ( $users as $u ) {
                        $n = User::getCanonicalName( $u );
                        if ( $n === false || $n === '' ) {
-                               $vals = array( 'name' => $u, 'invalid' => '' );
+                               $vals = array( 'name' => $u, 'invalid' => true );
                                $fit = $result->addValue( array( 'query', $this->getModuleName() ),
                                        null, $vals );
                                if ( !$fit ) {
@@ -190,19 +190,19 @@ class ApiQueryUsers extends ApiQueryBase {
                                        $data[$name]['rights'] = $user->getRights();
                                }
                                if ( $row->ipb_deleted ) {
-                                       $data[$name]['hidden'] = '';
+                                       $data[$name]['hidden'] = true;
                                }
                                if ( isset( $this->prop['blockinfo'] ) && !is_null( $row->ipb_by_text ) ) {
-                                       $data[$name]['blockid'] = $row->ipb_id;
+                                       $data[$name]['blockid'] = (int)$row->ipb_id;
                                        $data[$name]['blockedby'] = $row->ipb_by_text;
-                                       $data[$name]['blockedbyid'] = $row->ipb_by;
+                                       $data[$name]['blockedbyid'] = (int)$row->ipb_by;
                                        $data[$name]['blockedtimestamp'] = wfTimestamp( TS_ISO_8601, $row->ipb_timestamp );
                                        $data[$name]['blockreason'] = $row->ipb_reason;
                                        $data[$name]['blockexpiry'] = $row->ipb_expiry;
                                }
 
-                               if ( isset( $this->prop['emailable'] ) && $user->canReceiveEmail() ) {
-                                       $data[$name]['emailable'] = '';
+                               if ( isset( $this->prop['emailable'] ) ) {
+                                       $data[$name]['emailable'] = $user->canReceiveEmail();
                                }
 
                                if ( isset( $this->prop['gender'] ) ) {
@@ -237,7 +237,7 @@ class ApiQueryUsers extends ApiQueryBase {
                                $iwUser = $urPage->fetchUser( $u );
 
                                if ( $iwUser instanceof UserRightsProxy ) {
-                                       $data[$u]['interwiki'] = '';
+                                       $data[$u]['interwiki'] = true;
 
                                        if ( !is_null( $params['token'] ) ) {
                                                $tokenFunctions = $this->getTokenFunctions();
@@ -252,16 +252,19 @@ class ApiQueryUsers extends ApiQueryBase {
                                                }
                                        }
                                } else {
-                                       $data[$u]['missing'] = '';
+                                       $data[$u]['missing'] = true;
                                }
                        } else {
                                if ( isset( $this->prop['groups'] ) && isset( $data[$u]['groups'] ) ) {
+                                       ApiResult::setArrayType( $data[$u]['groups'], 'array' );
                                        ApiResult::setIndexedTagName( $data[$u]['groups'], 'g' );
                                }
                                if ( isset( $this->prop['implicitgroups'] ) && isset( $data[$u]['implicitgroups'] ) ) {
+                                       ApiResult::setArrayType( $data[$u]['implicitgroups'], 'array' );
                                        ApiResult::setIndexedTagName( $data[$u]['implicitgroups'], 'g' );
                                }
                                if ( isset( $this->prop['rights'] ) && isset( $data[$u]['rights'] ) ) {
+                                       ApiResult::setArrayType( $data[$u]['rights'], 'array' );
                                        ApiResult::setIndexedTagName( $data[$u]['rights'], 'r' );
                                }
                        }
index bd1ed0a..3eb57fd 100644 (file)
@@ -307,7 +307,7 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
                if ( $this->fld_title || $this->fld_ids ) {
                        // These should already have been filtered out of the query, but just in case.
                        if ( $type === RC_LOG && ( $row->rc_deleted & LogPage::DELETED_ACTION ) ) {
-                               $vals['actionhidden'] = '';
+                               $vals['actionhidden'] = true;
                                $anyHidden = true;
                        }
                        if ( $type !== RC_LOG ||
@@ -327,14 +327,14 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
                /* Add user data and 'anon' flag, if user is anonymous. */
                if ( $this->fld_user || $this->fld_userid ) {
                        if ( $row->rc_deleted & Revision::DELETED_USER ) {
-                               $vals['userhidden'] = '';
+                               $vals['userhidden'] = true;
                                $anyHidden = true;
                        }
                        if ( Revision::userCanBitfield( $row->rc_deleted, Revision::DELETED_USER, $user ) ) {
                                if ( $this->fld_userid ) {
-                                       $vals['userid'] = $row->rc_user;
+                                       $vals['userid'] = (int)$row->rc_user;
                                        // for backwards compatibility
-                                       $vals['user'] = $row->rc_user;
+                                       $vals['user'] = (int)$row->rc_user;
                                }
 
                                if ( $this->fld_user ) {
@@ -342,22 +342,16 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
                                }
 
                                if ( !$row->rc_user ) {
-                                       $vals['anon'] = '';
+                                       $vals['anon'] = true;
                                }
                        }
                }
 
                /* Add flags, such as new, minor, bot. */
                if ( $this->fld_flags ) {
-                       if ( $row->rc_bot ) {
-                               $vals['bot'] = '';
-                       }
-                       if ( $row->rc_type == RC_NEW ) {
-                               $vals['new'] = '';
-                       }
-                       if ( $row->rc_minor ) {
-                               $vals['minor'] = '';
-                       }
+                       $vals['bot'] = (bool)$row->rc_bot;
+                       $vals['new'] = $row->rc_type == RC_NEW;
+                       $vals['minor'] = (bool)$row->rc_minor;
                }
 
                /* Add sizes of each revision. (Only available on 1.10+) */
@@ -380,7 +374,7 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
                /* Add edit summary / log summary. */
                if ( $this->fld_comment || $this->fld_parsedcomment ) {
                        if ( $row->rc_deleted & Revision::DELETED_COMMENT ) {
-                               $vals['commenthidden'] = '';
+                               $vals['commenthidden'] = true;
                                $anyHidden = true;
                        }
                        if ( Revision::userCanBitfield( $row->rc_deleted, Revision::DELETED_COMMENT, $user ) ) {
@@ -395,17 +389,14 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
                }
 
                /* Add the patrolled flag */
-               if ( $this->fld_patrol && $row->rc_patrolled == 1 ) {
-                       $vals['patrolled'] = '';
-               }
-
-               if ( $this->fld_patrol && ChangesList::isUnpatrolled( $row, $user ) ) {
-                       $vals['unpatrolled'] = '';
+               if ( $this->fld_patrol ) {
+                       $vals['patrolled'] = $row->rc_patrolled == 1;
+                       $vals['unpatrolled'] = ChangesList::isUnpatrolled( $row, $user );
                }
 
                if ( $this->fld_loginfo && $row->rc_type == RC_LOG ) {
                        if ( $row->rc_deleted & LogPage::DELETED_ACTION ) {
-                               $vals['actionhidden'] = '';
+                               $vals['actionhidden'] = true;
                                $anyHidden = true;
                        }
                        if ( LogEventsList::userCanBitfield( $row->rc_deleted, LogPage::DELETED_ACTION, $user ) ) {
@@ -417,7 +408,7 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
                }
 
                if ( $anyHidden && ( $row->rc_deleted & Revision::DELETED_RESTRICTED ) ) {
-                       $vals['suppressed'] = '';
+                       $vals['suppressed'] = true;
                }
 
                return $vals;
index 490b831..044b6e0 100644 (file)
@@ -140,8 +140,7 @@ class ApiResult implements ApiSerializable {
         */
        public function __construct( $maxSize ) {
                if ( $maxSize instanceof ApiMain ) {
-                       /// @todo: After fixing Wikidata unit tests, warn
-                       //wfDeprecated( 'Passing ApiMain to ' . __METHOD__ . ' is deprecated', '1.25' );
+                       wfDeprecated( 'ApiMain to ' . __METHOD__, '1.25' );
                        $this->errorFormatter = $maxSize->getErrorFormatter();
                        $this->mainForContinuation = $maxSize;
                        $maxSize = $maxSize->getConfig()->get( 'APIMaxResultSize' );
@@ -180,7 +179,9 @@ class ApiResult implements ApiSerializable {
         * Clear the current result data.
         */
        public function reset() {
-               $this->data = array();
+               $this->data = array(
+                       self::META_TYPE => 'assoc', // Usually what's desired
+               );
                $this->size = 0;
        }
 
@@ -275,6 +276,10 @@ class ApiResult implements ApiSerializable {
         * @param int $flags Zero or more OR-ed flags like OVERRIDE | ADD_ON_TOP.
         */
        public static function setValue( array &$arr, $name, $value, $flags = 0 ) {
+               if ( !( $flags & ApiResult::NO_VALIDATE ) ) {
+                       $value = self::validateValue( $value );
+               }
+
                if ( $name === null ) {
                        if ( $flags & ApiResult::ADD_ON_TOP ) {
                                array_unshift( $arr, $value );
@@ -284,10 +289,6 @@ class ApiResult implements ApiSerializable {
                        return;
                }
 
-               if ( !( $flags & ApiResult::NO_VALIDATE ) ) {
-                       $value = self::validateValue( $value );
-               }
-
                $exists = isset( $arr[$name] );
                if ( !$exists || ( $flags & ApiResult::OVERRIDE ) ) {
                        if ( !$exists && ( $flags & ApiResult::ADD_ON_TOP ) ) {
@@ -1130,7 +1131,7 @@ class ApiResult implements ApiSerializable {
         * @return array
         */
        public function getData() {
-               /// @todo: Warn after fixing remaining callers: Wikibase, Gather
+               wfDeprecated( __METHOD__, '1.25' );
                return $this->getResultData( null, array(
                        'BC' => array(),
                        'Types' => array(),
@@ -1172,7 +1173,7 @@ class ApiResult implements ApiSerializable {
         *    new method signature.
         */
        public static function setElement( &$arr, $name, $value, $flags = 0 ) {
-               /// @todo: Warn after fixing remaining callers: Wikibase
+               wfDeprecated( __METHOD__, '1.25' );
                return self::setValue( $arr, $name, $value, $flags );
        }
 
@@ -1187,7 +1188,7 @@ class ApiResult implements ApiSerializable {
         *  format "<elem>text</elem>" without attributes.
         */
        public static function setContent( &$arr, $value, $subElemName = null ) {
-               /// @todo: Warn after fixing remaining callers: Wikibase
+               wfDeprecated( __METHOD__, '1.25' );
                if ( is_array( $value ) ) {
                        throw new InvalidArgumentException( __METHOD__ . ': Bad parameter' );
                }
@@ -1211,44 +1212,29 @@ class ApiResult implements ApiSerializable {
         * @param string $tag Tag name
         */
        public function setIndexedTagName_recursive( &$arr, $tag ) {
-               /// @todo: Warn after fixing remaining callers: Wikibase
+               wfDeprecated( __METHOD__, '1.25' );
                if ( !is_array( $arr ) ) {
                        return;
                }
-               self::setIndexedTagNameOnSubarrays( $arr, $tag );
-       }
-
-       /**
-        * Set indexed tag name on all subarrays of $arr
-        *
-        * Does not set the tag name for $arr itself.
-        *
-        * @since 1.25
-        * @deprecated For backwards compatibility, do not use
-        * @todo: Remove after updating callers to use self::setIndexedTagNameRecursive
-        * @param array &$arr
-        * @param string $tag Tag name
-        */
-       public static function setIndexedTagNameOnSubarrays( array &$arr, $tag ) {
                if ( !is_string( $tag ) ) {
                        throw new InvalidArgumentException( 'Bad tag name' );
                }
                foreach ( $arr as $k => &$v ) {
                        if ( !self::isMetadataKey( $k ) && is_array( $v ) ) {
                                $v[self::META_INDEXED_TAG_NAME] = $tag;
-                               self::setIndexedTagNameOnSubarrays( $v, $tag );
+                               $this->setIndexedTagName_recursive( $v, $tag );
                        }
                }
        }
 
        /**
-        * Alias for self::defineIndexedTagName()
+        * Alias for self::addIndexedTagName()
         * @deprecated since 1.25, use $this->addIndexedTagName() instead
         * @param array $path Path to the array, like addValue()'s $path
         * @param string $tag
         */
        public function setIndexedTagName_internal( $path, $tag ) {
-               /// @todo: Warn after fixing remaining callers: Wikibase, Gather
+               wfDeprecated( __METHOD__, '1.25' );
                $this->addIndexedTagName( $path, $tag );
        }
 
@@ -1288,7 +1274,7 @@ class ApiResult implements ApiSerializable {
        public function beginContinuation(
                $continue, array $allModules = array(), array $generatedModules = array()
        ) {
-               /// @todo: Warn after fixing remaining callers: Gather
+               wfDeprecated( __METHOD__, '1.25' );
                if ( $this->mainForContinuation->getContinuationManager() ) {
                        throw new UnexpectedValueException(
                                __METHOD__ . ': Continuation already in progress from ' .
@@ -1368,7 +1354,7 @@ class ApiResult implements ApiSerializable {
         *   the style used in 1.20 and earlier.
         */
        public function endContinuation( $style = 'standard' ) {
-               /// @todo: Warn after fixing remaining callers: Gather
+               wfDeprecated( __METHOD__, '1.25' );
                if ( !$this->mainForContinuation->getContinuationManager() ) {
                        return;
                }
@@ -1413,76 +1399,10 @@ class ApiResult implements ApiSerializable {
         * @return array
         */
        public function convertStatusToArray( $status, $errorType = 'error' ) {
-               /// @todo: Warn after fixing remaining callers: CentralAuth
+               wfDeprecated( __METHOD__, '1.25' );
                return $this->errorFormatter->arrayFromStatus( $status, $errorType );
        }
 
-       /**
-        * Alias for self::addIndexedTagName
-        *
-        * A bunch of extensions were updated for an earlier version of this
-        * extension which used this name.
-        * @deprecated For backwards compatibility, do not use
-        * @todo: Remove after updating callers to use self::addIndexedTagName
-        */
-       public function defineIndexedTagName( $path, $tag ) {
-               return $this->addIndexedTagName( $path, $tag );
-       }
-
-       /**
-        * Alias for self::stripMetadata
-        *
-        * A bunch of extensions were updated for an earlier version of this
-        * extension which used this name.
-        * @deprecated For backwards compatibility, do not use
-        * @todo: Remove after updating callers to use self::stripMetadata
-        */
-       public static function removeMetadata( $data ) {
-               return self::stripMetadata( $data );
-       }
-
-       /**
-        * Alias for self::stripMetadataNonRecursive
-        *
-        * A bunch of extensions were updated for an earlier version of this
-        * extension which used this name.
-        * @deprecated For backwards compatibility, do not use
-        * @todo: Remove after updating callers to use self::stripMetadataNonRecursive
-        */
-       public static function removeMetadataNonRecursive( $data, &$metadata = null ) {
-               return self::stripMetadataNonRecursive( $data, $metadata );
-       }
-
-       /**
-        * @deprecated For backwards compatibility, do not use
-        * @todo: Remove after updating callers
-        */
-       public static function transformForBC( array $data ) {
-               return self::applyTransformations( $data, array(
-                       'BC' => array(),
-               ) );
-       }
-
-       /**
-        * @deprecated For backwards compatibility, do not use
-        * @todo: Remove after updating callers
-        */
-       public static function transformForTypes( $data, $options = array() ) {
-               $transforms = array(
-                       'Types' => array(),
-               );
-               if ( isset( $options['assocAsObject'] ) ) {
-                       $transforms['Types']['AssocAsObject'] = $options['assocAsObject'];
-               }
-               if ( isset( $options['armorKVP'] ) ) {
-                       $transforms['Types']['ArmorKVP'] = $options['armorKVP'];
-               }
-               if ( !empty( $options['BC'] ) ) {
-                       $transforms['BC'] = array( 'nobool', 'no*', 'nosub' );
-               }
-               return self::applyTransformations( $data, $transforms );
-       }
-
        /**@}*/
 }
 
index e41ee07..86a3f6a 100644 (file)
@@ -115,21 +115,21 @@ class ApiSetNotificationTimestamp extends ApiBase {
                        foreach ( $pageSet->getInvalidTitles() as $title ) {
                                $r = array();
                                $r['title'] = $title;
-                               $r['invalid'] = '';
+                               $r['invalid'] = true;
                                $result[] = $r;
                        }
                        foreach ( $pageSet->getMissingPageIDs() as $p ) {
                                $page = array();
                                $page['pageid'] = $p;
-                               $page['missing'] = '';
-                               $page['notwatched'] = '';
+                               $page['missing'] = true;
+                               $page['notwatched'] = true;
                                $result[] = $page;
                        }
                        foreach ( $pageSet->getMissingRevisionIDs() as $r ) {
                                $rev = array();
                                $rev['revid'] = $r;
-                               $rev['missing'] = '';
-                               $rev['notwatched'] = '';
+                               $rev['missing'] = true;
+                               $rev['notwatched'] = true;
                                $result[] = $rev;
                        }
 
@@ -163,7 +163,7 @@ class ApiSetNotificationTimestamp extends ApiBase {
                                                'title' => $title->getPrefixedText(),
                                        );
                                        if ( !$title->exists() ) {
-                                               $r['missing'] = '';
+                                               $r['missing'] = true;
                                        }
                                        if ( isset( $timestamps[$ns] ) && array_key_exists( $dbkey, $timestamps[$ns] ) ) {
                                                $r['notificationtimestamp'] = '';
@@ -171,7 +171,7 @@ class ApiSetNotificationTimestamp extends ApiBase {
                                                        $r['notificationtimestamp'] = wfTimestamp( TS_ISO_8601, $timestamps[$ns][$dbkey] );
                                                }
                                        } else {
-                                               $r['notwatched'] = '';
+                                               $r['notwatched'] = true;
                                        }
                                        $result[] = $r;
                                }
index 9eb4020..4d7fc5a 100644 (file)
@@ -37,7 +37,9 @@ class ApiTokens extends ApiBase {
                $this->logFeatureUsage( "action=tokens" );
 
                $params = $this->extractRequestParams();
-               $res = array();
+               $res = array(
+                       ApiResult::META_TYPE => 'assoc',
+               );
 
                $types = $this->getTokenTypes();
                foreach ( $params['type'] as $type ) {
index 6a585d4..85d051d 100644 (file)
@@ -109,15 +109,15 @@ class ApiWatch extends ApiBase {
 
                if ( $params['unwatch'] ) {
                        $status = UnwatchAction::doUnwatch( $title, $user );
+                       $res['unwatched'] = $status->isOK();
                        if ( $status->isOK() ) {
-                               $res['unwatched'] = '';
                                $res['message'] = $this->msg( 'removedwatchtext', $title->getPrefixedText() )
                                        ->title( $title )->parseAsBlock();
                        }
                } else {
                        $status = WatchAction::doWatch( $title, $user );
+                       $res['watched'] = $status->isOK();
                        if ( $status->isOK() ) {
-                               $res['watched'] = '';
                                $res['message'] = $this->msg( 'addedwatchtext', $title->getPrefixedText() )
                                        ->title( $title )->parseAsBlock();
                        }
diff --git a/includes/api/i18n/ast.json b/includes/api/i18n/ast.json
new file mode 100644 (file)
index 0000000..9494a7c
--- /dev/null
@@ -0,0 +1,10 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Xuacu"
+               ]
+       },
+       "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-param-action": "Qué aición facer.",
+       "apihelp-main-param-format": "El formatu de la salida."
+}
index d6a1fec..8ba597a 100644 (file)
@@ -5,7 +5,8 @@
                        "YjM",
                        "Juandev",
                        "Aktron",
-                       "Cvanca"
+                       "Cvanca",
+                       "Utar"
                ]
        },
        "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-help-example-help": "Nápověda k samotnému modulu nápovědy",
        "apihelp-help-example-query": "Nápověda pro dva podmoduly query",
        "apihelp-imagerotate-description": "Otočit jeden nebo více obrázků.",
+       "apihelp-imagerotate-example-generator": "Otočit všechny obrázky v <kbd>Category:Flip</kbd> o <kbd>180</kbd> stupňů.",
        "apihelp-import-param-summary": "Import shrnutí.",
        "apihelp-import-param-xml": "Nahraný XML soubor.",
-       "apihelp-import-param-rootpage": "Importovat jako podstránku k této stránce.",
+       "apihelp-import-param-namespace": "Importovat do tohoto jmenného prostoru. Přepíše parametr <kbd>$1rootpage</kbd>.",
+       "apihelp-import-param-rootpage": "Importovat jako podstránku k této stránce. Ignoruje se, pokud je k dispozici parametr <kbd>$1namespace</kbd>.",
        "apihelp-login-param-name": "Uživatelské jméno.",
        "apihelp-login-param-password": "Heslo.",
        "apihelp-login-param-domain": "Doména (volitelná)",
index 37a3b97..0ddbd2b 100644 (file)
@@ -9,7 +9,9 @@
                        "Giftpflanze",
                        "Macofe",
                        "Se4598",
-                       "Purodha"
+                       "Purodha",
+                       "Andreasburmeister",
+                       "Anomie"
                ]
        },
        "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page/de|Dokumentation]]\n* [[mw:API:FAQ/de|Häufig gestellte Fragen]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Mailingliste]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API-Ankündigungen]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Fehlerberichte und Anfragen]\n</div>\n<strong>Status:</strong> Alle auf dieser Seite gezeigten Funktionen sollten funktionieren, allerdings ist die API in aktiver Entwicklung und kann sich zu jeder Zeit ändern. Abonniere die [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ MediaWiki-API-Ankündigungs-Mailingliste], um über Aktualisierungen informiert zu werden.\n\n<strong>Fehlerhafte Anfragen:</strong> Wenn fehlerhafte Anfragen an die API gesendet werden, wird ein HTTP-Header mit dem Schlüssel „MediaWiki-API-Error“ gesendet. Der Wert des Headers und der Fehlercode werden auf den gleichen Wert gesetzt. Für weitere Informationen siehe [[mw:API:Errors_and_warnings|API: Fehler und Warnungen]].",
        "apihelp-import-param-interwikipage": "Für Interwiki-Importe: zu importierende Seite.",
        "apihelp-import-param-fullhistory": "Für Interwiki-Importe: importiere die komplette Versionsgeschichte, nicht nur die aktuelle Version.",
        "apihelp-import-param-templates": "Für Interwiki-Importe: importiere auch alle eingebundenen Vorlagen.",
-       "apihelp-import-param-namespace": "Für Interwiki-Importe: importiere in diesen Namensraum.",
-       "apihelp-import-param-rootpage": "Als Unterseite dieser Seite importieren.",
+       "apihelp-import-param-namespace": "In diesen Namensraum importieren. Überschreibt den Parameter <kbd>$1rootpage</kbd>.",
+       "apihelp-import-param-rootpage": "Als Unterseite dieser Seite importieren. Wird ignoriert, falls der Parameter <kbd>$1namespace</kbd> angegeben ist.",
        "apihelp-import-example-import": "Importiere [[meta:Help:Parserfunctions]] mit der kompletten Versionsgeschichte in den Namensraum 100.",
        "apihelp-login-description": "Anmelden und Authentifizierungs-Cookies beziehen.\n\nFalls das Anmelden erfolgreich war, werden die benötigten Cookies im Header der HTTP-Antwort des Servers übermittelt. Bei fehlgeschlagenen Anmeldeversuchen können weitere Versuche gedrosselt werden, um automatische Passwortermittlungsattacken zu verhinden.",
        "apihelp-login-param-name": "Benutzername.",
        "apihelp-rsd-description": "Ein RSD-Schema (Really Simple Discovery) exportieren.",
        "apihelp-rsd-example-simple": "Das RSD-Schema exportieren",
        "apihelp-setnotificationtimestamp-param-entirewatchlist": "An allen beobachteten Seiten arbeiten.",
+       "apihelp-tag-param-reason": "Grund für die Änderung.",
        "apihelp-unblock-description": "Einen Benutzer freigeben.",
        "apihelp-unblock-param-reason": "Grund für die Freigabe.",
        "apihelp-unblock-example-id": "Sperrkennung #<kbd>105</kbd> freigeben.",
        "apihelp-yaml-description": "Daten im YAML-Format ausgeben.",
        "apihelp-yamlfm-description": "Daten im YAML-Format ausgeben (schöngedruckt in HTML).",
        "api-format-title": "MediaWiki-API-Ergebnis",
-       "api-format-prettyprint-header": "Dies ist die HTML-Repräsentation des $1-Formats. HTML ist zur Fehlerbehebung gut, aber unpassend für den Anwendungsgebrauch.\n\nGib den Parameter <var>Format</var> an, um das Ausgabeformat zu ändern. Um die Nicht-HTML-Repräsentation des $1-Formats anzusehen, lege <kbd>format=$2</kbd> fest.\n\nSiehe die [[mw:API|vollständige Dokumentation]] oder die [[Special:ApiHelp/main|API-Hilfe]] für weitere Informationen.",
+       "api-format-prettyprint-header": "Dies ist die HTML-Repräsentation des $1-Formats. HTML ist zur Fehlerbehebung gut, aber unpassend für den Anwendungsgebrauch.\n\nGib den Parameter <var>format</var> an, um das Ausgabeformat zu ändern. Um die Nicht-HTML-Repräsentation des $1-Formats anzusehen, lege <kbd>format=$2</kbd> fest.\n\nSiehe die [[mw:API|vollständige Dokumentation]] oder die [[Special:ApiHelp/main|API-Hilfe]] für weitere Informationen.",
        "api-orm-param-props": "Felder an die Anfrage.",
        "api-orm-param-limit": "Maximale Anzahl zurückgegebender Zeilen.",
        "api-pageset-param-titles": "Eine Liste der Titel, an denen gearbeitet werden soll.",
        "api-help-flag-writerights": "Dieses Modul erfordert Schreibrechte.",
        "api-help-flag-mustbeposted": "Dieses Modul akzeptiert nur POST-Anfragen.",
        "api-help-flag-generator": "Dieses Modul kann als Generator verwendet werden.",
+       "api-help-source": "Quelle: $1",
+       "api-help-source-unknown": "Quelle: <span class=\"apihelp-unknown\">unbekannt</span>",
+       "api-help-license": "Lizenz: [[$1|$2]]",
+       "api-help-license-noname": "Lizenz: [[$1|Siehe Link]]",
+       "api-help-license-unknown": "Lizenz: <span class=\"apihelp-unknown\">unbekannt</span>",
        "api-help-parameters": "{{PLURAL:$1|Parameter}}:",
        "api-help-param-deprecated": "Veraltet.",
        "api-help-param-required": "Dieser Parameter ist erforderlich.",
+       "api-help-datatypes-header": "Datentypen",
        "api-help-param-list": "{{PLURAL:$1|1=Ein Wert|2=Werte (mit <kbd>{{!}}</kbd> trennen)}}: $2",
        "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Muss leer sein|Kann leer sein oder $2}}",
        "api-help-param-limit": "Nicht mehr als $1 erlaubt.",
index 615d60a..3c53be1 100644 (file)
        "apihelp-import-param-interwikipage": "For interwiki imports: page to import.",
        "apihelp-import-param-fullhistory": "For interwiki imports: import the full history, not just the current version.",
        "apihelp-import-param-templates": "For interwiki imports: import all included templates as well.",
-       "apihelp-import-param-namespace": "For interwiki imports: import to this namespace.",
-       "apihelp-import-param-rootpage": "Import as subpage of this page.",
+       "apihelp-import-param-namespace": "Import to this namespace. Overrides the <kbd>$1rootpage</kbd> parameter.",
+       "apihelp-import-param-rootpage": "Import as subpage of this page. Ignored if the <kbd>$1namespace</kbd> parameter is provided.",
        "apihelp-import-example-import": "Import [[meta:Help:Parserfunctions]] to namespace 100 with full history.",
 
        "apihelp-login-description": "Log in and get authentication cookies.\n\nIn the event of a successful log-in, the needed cookies will be included in the HTTP response headers. In the event of a failed log-in, further attempts may be throttled to limit automated password guessing attacks.",
        "apihelp-parse-param-pageid": "Parse the content of this page. Overrides <var>$1page</var>.",
        "apihelp-parse-param-redirects": "If <var>$1page</var> or <var>$1pageid</var> is set to a redirect, resolve it.",
        "apihelp-parse-param-oldid": "Parse the content of this revision. Overrides <var>$1page</var> and <var>$1pageid</var>.",
-       "apihelp-parse-param-prop": "Which pieces of information to get:\n;text:Gives the parsed text of the wikitext.\n;langlinks:Gives the language links in the parsed wikitext.\n;categories:Gives the categories in the parsed wikitext.\n;categorieshtml:Gives the HTML version of the categories.\n;links:Gives the internal links in the parsed wikitext.\n;templates:Gives the templates in the parsed wikitext.\n;images:Gives the images in the parsed wikitext.\n;externallinks:Gives the external links in the parsed wikitext.\n;sections:Gives the sections in the parsed wikitext.\n;revid:Adds the revision ID of the parsed page.\n;displaytitle:Adds the title of the parsed wikitext.\n;headitems:Gives items to put in the &lt;head&gt; of the page.\n;headhtml:Gives parsed &lt;head&gt; of the page.\n;modules:Gives the ResourceLoader modules used on the page.\n;indicators:Gives the HTML of page status indicators used on the page.\n;iwlinks:Gives interwiki links in the parsed wikitext.\n;wikitext:Gives the original wikitext that was parsed.\n;properties:Gives various properties defined in the parsed wikitext.\n;limitreportdata:Gives the limit report in a structured way. Gives no data, when $1disablepp is set.\n;limitreporthtml:Gives the HTML version of the limit report. Gives no data, when $1disablepp is set.",
+       "apihelp-parse-param-prop": "Which pieces of information to get:",
+       "apihelp-parse-paramvalue-prop-text": "Gives the parsed text of the wikitext.",
+       "apihelp-parse-paramvalue-prop-langlinks": "Gives the language links in the parsed wikitext.",
+       "apihelp-parse-paramvalue-prop-categories": "Gives the categories in the parsed wikitext.",
+       "apihelp-parse-paramvalue-prop-categorieshtml": "Gives the HTML version of the categories.",
+       "apihelp-parse-paramvalue-prop-links": "Gives the internal links in the parsed wikitext.",
+       "apihelp-parse-paramvalue-prop-templates": "Gives the templates in the parsed wikitext.",
+       "apihelp-parse-paramvalue-prop-images": "Gives the images in the parsed wikitext.",
+       "apihelp-parse-paramvalue-prop-externallinks": "Gives the external links in the parsed wikitext.",
+       "apihelp-parse-paramvalue-prop-sections": "Gives the sections in the parsed wikitext.",
+       "apihelp-parse-paramvalue-prop-revid": "Adds the revision ID of the parsed page.",
+       "apihelp-parse-paramvalue-prop-displaytitle": "Adds the title of the parsed wikitext.",
+       "apihelp-parse-paramvalue-prop-headitems": "Gives items to put in the <code>&lt;head&gt;</code> of the page.",
+       "apihelp-parse-paramvalue-prop-headhtml": "Gives parsed <code>&lt;head&gt;</code> of the page.",
+       "apihelp-parse-paramvalue-prop-modules": "Gives the ResourceLoader modules used on the page.",
+       "apihelp-parse-paramvalue-prop-jsconfigvars": "Gives the JavaScript configuration variables specific to the page.",
+       "apihelp-parse-paramvalue-prop-encodedjsconfigvars": "Gives the JavaScript configuration variables specific to the page as a JSON string.",
+       "apihelp-parse-paramvalue-prop-indicators": "Gives the HTML of page status indicators used on the page.",
+       "apihelp-parse-paramvalue-prop-iwlinks": "Gives interwiki links in the parsed wikitext.",
+       "apihelp-parse-paramvalue-prop-wikitext": "Gives the original wikitext that was parsed.",
+       "apihelp-parse-paramvalue-prop-properties": "Gives various properties defined in the parsed wikitext.",
+       "apihelp-parse-paramvalue-prop-limitreportdata": "Gives the limit report in a structured way. Gives no data, when <var>$1disablepp</var> is set.",
+       "apihelp-parse-paramvalue-prop-limitreporthtml": "Gives the HTML version of the limit report. Gives no data, when <var>$1disablepp</var> is set.",
        "apihelp-parse-param-pst": "Do a pre-save transform on the input before parsing it. Only valid when used with text.",
        "apihelp-parse-param-onlypst": "Do a pre-save transform (PST) on the input, but don't parse it. Returns the same wikitext, after a PST has been applied. Only valid when used with <var>$1text</var>.",
        "apihelp-parse-param-effectivelanglinks": "Includes language links supplied by extensions (for use with <kbd>$1prop=langlinks</kbd>).",
        "apihelp-query+allfileusages-param-to": "The title of the file to stop enumerating at.",
        "apihelp-query+allfileusages-param-prefix": "Search for all file titles that begin with this value.",
        "apihelp-query+allfileusages-param-unique": "Only show distinct file titles. Cannot be used with $1prop=ids.\nWhen used as a generator, yields target pages instead of source pages.",
-       "apihelp-query+allfileusages-param-prop": "Which pieces of information to include:\n;ids:Adds the page ID of the using page (cannot be used with $1unique).\n;title:Adds the title of the file.",
+       "apihelp-query+allfileusages-param-prop": "Which pieces of information to include:\n;ids:Adds the page IDs of the using pages (cannot be used with $1unique).\n;title:Adds the title of the file.",
        "apihelp-query+allfileusages-param-limit": "How many total items to return.",
        "apihelp-query+allfileusages-param-dir": "The direction in which to list.",
        "apihelp-query+allfileusages-example-B": "List file titles, including missing ones, with page IDs they are from, starting at <kbd>B</kbd>.",
 
        "apihelp-query+pageprops-description": "Get various properties defined in the page content.",
        "apihelp-query+pageprops-param-prop": "Only list these props. Useful for checking whether a certain page uses a certain page prop.",
-       "apihelp-query+pageprops-example-simple": "Get properties for <kbd>Category:Foo</kbd>.",
+       "apihelp-query+pageprops-example-simple": "Get properties for the pages <kbd>Main Page</kbd> and <kbd>MediaWiki</kbd>.",
 
        "apihelp-query+pageswithprop-description": "List all pages using a given page property.",
        "apihelp-query+pageswithprop-param-propname": "Page prop for which to enumerate pages.",
        "apihelp-query+search-param-namespace": "Search only within these namespaces.",
        "apihelp-query+search-param-what": "Which type of search to perform.",
        "apihelp-query+search-param-info": "Which metadata to return.",
-       "apihelp-query+search-param-prop": "Which properties to return:\n;size:Adds the size of the page in bytes.\n;wordcount:Adds the word count of the page.\n;timestamp:Adds the timestamp of when the page was last edited.\n;snippet:Adds a parsed snippet of the page.\n;titlesnippet:Adds a parsed snippet of the page title.\n;redirectsnippet:Adds a parsed snippet of the redirect title.\n;redirecttitle:Adds the title of the matching redirect.\n;sectionsnippet:Adds a parsed snippet of the matching section title.\n;sectiontitle:Adds the title of the matching section.\n;score:<span class=\"apihelp-deprecated\">Deprecated and ignored.</span>\n;hasrelated:<span class=\"apihelp-deprecated\">Deprecated and ignored.</span>",
+       "apihelp-query+search-param-prop": "Which properties to return:\n;size:Adds the size of the page in bytes.\n;wordcount:Adds the word count of the page.\n;timestamp:Adds the timestamp of when the page was last edited.\n;snippet:Adds a parsed snippet of the page.\n;titlesnippet:Adds a parsed snippet of the page title.\n;redirectsnippet:Adds a parsed snippet of the redirect title.\n;redirecttitle:Adds the title of the matching redirect.\n;sectionsnippet:Adds a parsed snippet of the matching section title.\n;sectiontitle:Adds the title of the matching section.\n;categorysnippet:Adds a parsed snippet of the matching category.\n;isfilematch:Adds a boolean indicating if the search matched file content.\n;score:<span class=\"apihelp-deprecated\">Deprecated and ignored.</span>\n;hasrelated:<span class=\"apihelp-deprecated\">Deprecated and ignored.</span>",
        "apihelp-query+search-param-limit": "How many total pages to return.",
        "apihelp-query+search-param-interwiki": "Include interwiki results in the search, if available.",
        "apihelp-query+search-param-backend": "Which search backend to use, if not the default.",
        "apihelp-undelete-example-page": "Undelete page <kbd>Main Page</kbd>.",
        "apihelp-undelete-example-revisions": "Undelete two revisions of page <kbd>Main Page</kbd>.",
 
-       "apihelp-upload-description": "Upload a file, or get the status of pending uploads.\n\nSeveral methods are available:\n* Upload file contents directly, using the <var>$1file</var> parameter.\n* Upload the file in pieces, using the <var>$1filesize</var>, <var>$1chunk</var>, and <var>$1offset</var> parameters.* Have the MediaWiki server fetch a file from a URL, using the <var>$1url</var> parameter.\n* Complete an earlier upload that failed due to warnings, using the <var>$1filekey</var> parameter.\nNote that the HTTP POST must be done as a file upload (i.e. using <code>multipart/form-data</code>) when sending the <var>$1file</var>.",
+       "apihelp-upload-description": "Upload a file, or get the status of pending uploads.\n\nSeveral methods are available:\n* Upload file contents directly, using the <var>$1file</var> parameter.\n* Upload the file in pieces, using the <var>$1filesize</var>, <var>$1chunk</var>, and <var>$1offset</var> parameters.\n* Have the MediaWiki server fetch a file from a URL, using the <var>$1url</var> parameter.\n* Complete an earlier upload that failed due to warnings, using the <var>$1filekey</var> parameter.\nNote that the HTTP POST must be done as a file upload (i.e. using <code>multipart/form-data</code>) when sending the <var>$1file</var>.",
        "apihelp-upload-param-filename": "Target filename.",
        "apihelp-upload-param-comment": "Upload comment. Also used as the initial page text for new files if <var>$1text</var> is not specified.",
        "apihelp-upload-param-text": "Initial page text for new files.",
        "api-help-param-deprecated": "Deprecated.",
        "api-help-param-required": "This parameter is required.",
        "api-help-datatypes-header": "Data types",
-       "api-help-datatypes": "Some API parameter types need further explanation:\n;boolean\n:Boolean parameters work like HTML checkboxes: if the parameter is specified, regardless of value, it is considered true. For a false value, omit the parameter entirely.\n;timestamp\n:Timestamps may be specified in several formats. ISO 8601 date and time is recommended. All times are in UTC, any included timezone is ignored.\n:* ISO 8601 date and time, <kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>Z</kbd> (punctuation and <kbd>Z</kbd> are optional)\n:* ISO 8601 date and time with (ignored) fractional seconds, <kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>.<var>00001</var>Z</kbd> (dashes, colons, and <kbd>Z</kbd> are optional)\n:* MediaWiki format, <kbd><var>2001</var><var>01</var><var>15</var><var>14</var><var>56</var><var>00</var></kbd>\n:* Generic numeric format, <kbd><var>2001</var>-<var>01</var>-<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd> (optional timezone of <kbd>GMT</kbd>, <kbd>+<var>##</var></kbd>, or <kbd>-<var>##</var></kbd> is ignored)\n:* EXIF format, <kbd><var>2001</var>:<var>01</var>:<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:*RFC 2822 format (timezone may be omitted), <kbd><var>Mon</var>, <var>15</var> <var>Jan</var> <var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* RFC 850 format (timezone may be omitted), <kbd><var>Monday</var>, <var>15</var>-<var>Jan</var>-<var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* C ctime format, <kbd><var>Mon</var> <var>Jan</var> <var>15</var> <var>14</var>:<var>56</var>:<var>00</var> <var>2001</var></kbd>\n:* Seconds since 1970-01-01T00:00:00Z as a 1 to 13 digit integer",
+       "api-help-datatypes": "Some parameter types in API requests need further explanation:\n;boolean\n:Boolean parameters work like HTML checkboxes: if the parameter is specified, regardless of value, it is considered true. For a false value, omit the parameter entirely.\n;timestamp\n:Timestamps may be specified in several formats. ISO 8601 date and time is recommended. All times are in UTC, any included timezone is ignored.\n:* ISO 8601 date and time, <kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>Z</kbd> (punctuation and <kbd>Z</kbd> are optional)\n:* ISO 8601 date and time with (ignored) fractional seconds, <kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>.<var>00001</var>Z</kbd> (dashes, colons, and <kbd>Z</kbd> are optional)\n:* MediaWiki format, <kbd><var>2001</var><var>01</var><var>15</var><var>14</var><var>56</var><var>00</var></kbd>\n:* Generic numeric format, <kbd><var>2001</var>-<var>01</var>-<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd> (optional timezone of <kbd>GMT</kbd>, <kbd>+<var>##</var></kbd>, or <kbd>-<var>##</var></kbd> is ignored)\n:* EXIF format, <kbd><var>2001</var>:<var>01</var>:<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:*RFC 2822 format (timezone may be omitted), <kbd><var>Mon</var>, <var>15</var> <var>Jan</var> <var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* RFC 850 format (timezone may be omitted), <kbd><var>Monday</var>, <var>15</var>-<var>Jan</var>-<var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* C ctime format, <kbd><var>Mon</var> <var>Jan</var> <var>15</var> <var>14</var>:<var>56</var>:<var>00</var> <var>2001</var></kbd>\n:* Seconds since 1970-01-01T00:00:00Z as a 1 to 13 digit integer",
        "api-help-param-type-limit": "Type: integer or <kbd>max</kbd>",
        "api-help-param-type-integer": "Type: {{PLURAL:$1|1=integer|2=list of integers}}",
        "api-help-param-type-boolean": "Type: boolean ([[Special:ApiHelp/main#main/datatypes|details]])",
index f42f549..b29f32d 100644 (file)
@@ -6,7 +6,8 @@
                        "Alan",
                        "Fitoschido",
                        "JasterTDC",
-                       "Edslov"
+                       "Edslov",
+                       "Carlos Cristia"
                ]
        },
        "apihelp-main-param-action": "Qué acción se realizará.",
        "apihelp-block-param-reblock": "Si la cuenta ya está bloqueada, sobrescribir el bloqueo existente.",
        "apihelp-block-param-watchuser": "Vigilar las páginas de usuario y de discusión del usuario o de la dirección IP.",
        "apihelp-compare-param-fromtitle": "Primer título para comparar",
+       "apihelp-compare-param-fromrev": "Primera revisión para comparar.",
+       "apihelp-compare-param-totitle": "Segundo título para comparar.",
+       "apihelp-compare-param-toid": "Segunda página de IDENTIFICACIÓN para comparar.",
+       "apihelp-compare-param-torev": "Segunda revisión para comparar.",
        "apihelp-createaccount-description": "Crear una nueva cuenta de usuario.",
        "apihelp-createaccount-param-name": "Nombre de usuario.",
        "apihelp-createaccount-param-email": "Dirección de correo electrónico del usuario (opcional).",
@@ -64,6 +69,7 @@
        "apihelp-feedrecentchanges-param-feedformat": "El formato del canal.",
        "apihelp-feedrecentchanges-param-invert": "Todos los espacios de nombres menos el que está seleccionado.",
        "apihelp-feedrecentchanges-param-associated": "Incluir el espacio de nombres asociado (discusión o principal).",
+       "apihelp-feedrecentchanges-param-days": "Días a los que limitar los resultados.",
        "apihelp-feedrecentchanges-param-limit": "Número máximo de resultados que devolver.",
        "apihelp-feedrecentchanges-param-from": "Mostrar los cambios realizados a partir de entonces.",
        "apihelp-feedrecentchanges-param-hideminor": "Ocultar cambios menores.",
        "apihelp-imagerotate-example-generator": "Rotar todas las imágenes en la  <kbd>Categoría:Girar</kbd> <kbd>180</kbd> grados.",
        "apihelp-import-param-summary": "Resumen de importación.",
        "apihelp-import-param-xml": "Se cargó el archivo XML.",
-       "apihelp-import-param-rootpage": "Importar como subpágina de esta página.",
+       "apihelp-import-param-rootpage": "Importar como subpágina de esta página. Se ignora si se proporciona el parámetro <kbd>$1namespace</kbd>.",
        "apihelp-login-param-name": "Nombre de usuario.",
        "apihelp-login-param-password": "Contraseña.",
        "apihelp-login-param-domain": "Dominio (opcional).",
        "apihelp-options-example-reset": "Restablecer todas las preferencias",
        "apihelp-paraminfo-description": "Obtener información acerca de los módulos de la API.",
        "apihelp-paraminfo-param-helpformat": "Formato de las cadenas de ayuda.",
+       "apihelp-parse-paramvalue-prop-modules": "Da los módulos ResourceLoader utilizados en la página.",
        "apihelp-patrol-example-rcid": "Patrullar un cambio reciente",
        "apihelp-patrol-example-revid": "Patrullar una revisión",
        "apihelp-protect-param-reason": "Motivo de la (des)protección.",
diff --git a/includes/api/i18n/fo.json b/includes/api/i18n/fo.json
new file mode 100644 (file)
index 0000000..5522904
--- /dev/null
@@ -0,0 +1,39 @@
+{
+       "@metadata": {
+               "authors": [
+                       "EileenSanda"
+               ]
+       },
+       "apihelp-block-description": "Sperra ein brúkara.",
+       "apihelp-block-param-user": "Brúkaranavn, IP adressa ella IP interval ið tú ynskir at sperra.",
+       "apihelp-block-param-expiry": "Lokadagur. Kann vera relativt (t.d. <kbd>5 months</kbd> ella <kbd>2 weeks</kbd>) ella absolutt (t.d. <kbd>2014-09-18T12:34:56Z</kbd>). Um ásett til <kbd>infinite</kbd>, <kbd>indefinite</kbd>, ella <kbd>never</kbd>, so gongur sperringin aldri út.",
+       "apihelp-block-param-reason": "Orsøk til sperring.",
+       "apihelp-block-param-anononly": "Sperra bara dulnevndir brúkarar (t.d. ger rættingar frá dulnendum óvirknar fyri hesa IP adressuna).",
+       "apihelp-block-param-nocreate": "Forða fyri upprættan av konto.",
+       "apihelp-block-param-autoblock": "Sperrað sjálvvirkandi tað seinastu IP adressuna og allar fylgjandi IP adressur, sum viðkomandi roynir at rætta/skriva frá.",
+       "apihelp-block-param-noemail": "Forða brúkaranum í at senda teldupost gjøgnum wikiina. (Krevur <code>blockemail</code> rættindini).",
+       "apihelp-block-param-hidename": "Fjal brúkaranavnið frá sperringarlogginum. (Krevur <code>hideuser</code> rættindi).",
+       "apihelp-block-param-allowusertalk": "Loyv brúkaranum at skriva á sína egnu síðu (avhongur av <var>[[mw:Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
+       "apihelp-block-param-reblock": "Um brúkarin longu er sperraður, yvirskriva so tað verandi sperringina.",
+       "apihelp-block-example-ip-simple": "Sperra IP adressuna <kbd>192.0.2.5</kbd> í tríggjar dagar við orsøkini <kbd>First strike</kbd>.",
+       "apihelp-block-example-user-complex": "Sperra brúkara <kbd>Vandal</kbd> í óvissa tíð við orsøkini  <kbd>Vandalism</kbd>, og forða fyri upprættan av nýggjum kontum og at senda teldupost.",
+       "apihelp-createaccount-description": "Upprætta eina nýggja brúkarakonto.",
+       "apihelp-createaccount-param-name": "Brúkaranavn.",
+       "apihelp-createaccount-param-password": "Loyniorð (síggj burtur frá <var>$1mailpassword</var> um er upplýst).",
+       "apihelp-createaccount-param-email": "Teldupostadressan hjá brúkaranum (valfrítt).",
+       "apihelp-createaccount-param-realname": "Veruliga navnið hjá brúkaranum (valfrítt).",
+       "apihelp-createaccount-example-pass": "Upprætta brúkara <kbd>testuser</kbd> við loyniorðinum <kbd>test123</kbd>.",
+       "apihelp-createaccount-example-mail": "Upprætta brúkaran <kbd>testmailuser</kbd> og send eitt tilvildarliga stovnað loyniorð við telduposti.",
+       "apihelp-delete-description": "Strika eina síðu.",
+       "apihelp-edit-example-edit": "Rætta eina síðu.",
+       "apihelp-emailuser-description": "Send t-post til ein brúkara.",
+       "apihelp-emailuser-param-subject": "Evni teigur.",
+       "apihelp-emailuser-param-text": "Innihaldið í teldubrævinum.",
+       "apihelp-emailuser-param-ccme": "Send mær eitt avrit av hesum telduposti.",
+       "apihelp-emailuser-example-email": "Send ein teldupost til brúkaran <kbd>WikiSysop</kbd> við tekstinum <kbd>Content</kbd>.",
+       "apihelp-expandtemplates-description": "Víðkar allar fyrimyndir í wikitekstinum.",
+       "apihelp-expandtemplates-param-title": "Heiti á síðuni.",
+       "apihelp-login-param-name": "Brúkaranavn.",
+       "apihelp-login-param-password": "Loyniorð.",
+       "apihelp-move-description": "Flyt eina síðu."
+}
index 64c7146..47f3b57 100644 (file)
@@ -12,7 +12,8 @@
                        "Raulel",
                        "Arkanosis",
                        "Ltrlg",
-                       "Crochet.david"
+                       "Crochet.david",
+                       "0x010C"
                ]
        },
        "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Documentation]]\n* [[mw:API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Liste de diffusion]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Annonces de l’API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Bogues et demandes]\n</div>\n<strong>État :</strong> Toutes les fonctionnalités affichées sur cette page devraient fonctionner, mais l’API est encore en cours de développement et peut changer à tout moment. Inscrivez-vous à [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ la liste de diffusion mediawiki-api-announce] pour être informé des mises à jour.\n\n<strong>Requêtes erronées :</strong> Si des requêtes erronées sont envoyées à l’API, un en-tête HTTP sera renvoyé avec la clé « MediaWiki-API-Error ». La valeur de cet en-tête et le code d’erreur renvoyé prendront la même valeur. Pour plus d’information, voyez [[mw:API:Errors_and_warnings|API: Errors and warnings]].",
@@ -86,6 +87,7 @@
        "apihelp-edit-param-sectiontitle": "Le titre pour une nouvelle section.",
        "apihelp-edit-param-text": "Contenu de la page.",
        "apihelp-edit-param-summary": "Modifier le résumé. Également le titre de la section quand $1section=new et $1sectiontitle n’est pas défini.",
+       "apihelp-edit-param-tags": "Modifier les balises à appliquer à la révision.",
        "apihelp-edit-param-minor": "Modification mineure.",
        "apihelp-edit-param-notminor": "Modification non mineure.",
        "apihelp-edit-param-bot": "Marquer cette modification comme robot.",
        "apihelp-import-param-interwikipage": "Pour les importations interwiki : page à importer.",
        "apihelp-import-param-fullhistory": "Pour les importations interwiki : importer tout l’historique, et pas seulement la version courante.",
        "apihelp-import-param-templates": "Pour les importations interwiki : importer aussi tous les modèles inclus.",
-       "apihelp-import-param-namespace": "Pour les importations interwiki : importer vers cet espace de noms.",
-       "apihelp-import-param-rootpage": "Importer comme une sous-page de cette page.",
+       "apihelp-import-param-namespace": "Importer vers cet espace de noms. Écrase le paramètre <kbd>$1rootpage</kbd>.",
+       "apihelp-import-param-rootpage": "Importer comme une sous-page de cette page. Ignoré si le paramètre <kbd>$1namespace</kbd> est fourni.",
        "apihelp-import-example-import": "Importer [[meta:Help:Parserfunctions]] vers l’espace de noms 100 avec tout l’historique.",
        "apihelp-login-description": "Se connecter et obtenir les cookies d’authentification.\n\nDans le cas d’une connexion réussie, les cookies nécessaires seront inclus dans les entêtes de la réponse HTTP. Dans le cas d’une connexion en échec, les essais ultérieurs pourront être réduits afin de limiter les attaques automatisées de découverte du mot de passe.",
        "apihelp-login-param-name": "Nom d’utilisateur.",
        "apihelp-query+allfileusages-param-to": "Le titre du fichier auquel arrêter l’énumération.",
        "apihelp-query+allfileusages-param-prefix": "Rechercher tous les fichiers dont le titre commence par cette valeur.",
        "apihelp-query+allfileusages-param-unique": "Afficher uniquement les titres de fichier distincts. Impossible à utiliser avec $1prop=ids.\nQuand utilisé comme générateur, produit les pages cibles au lieu des sources.",
-       "apihelp-query+allfileusages-param-prop": "Quelles informations inclure :\n;ids:Ajoute l’ID de la page utilisatrice (impossible à utiliser avec $1unique).\n;title:Ajoute le titre du fichier.",
+       "apihelp-query+allfileusages-param-prop": "Quelles informations inclure :\n;ids:Ajoute les IDs des pages utilisatrices (impossible à utiliser avec $1unique).\n;title:Ajoute le titre du fichier.",
        "apihelp-query+allfileusages-param-limit": "Combien d’éléments renvoyer au total.",
        "apihelp-query+allfileusages-param-dir": "La direction dans laquelle lister.",
        "apihelp-query+allfileusages-example-B": "Lister les titres de fichier, y compris les manquants, avec les IDs de page d’où ils proviennent, en commençant à <kbd>B</kbd>.",
        "apihelp-query+pagepropnames-example-simple": "Obtenir les 10 premiers noms de propriété.",
        "apihelp-query+pageprops-description": "Obtenir diverses propriétés définies dans le contenu de la page.",
        "apihelp-query+pageprops-param-prop": "Lister uniquement ces propriétés. Utile pour vérifier si une certaine page utilise une certaine propriété de page.",
-       "apihelp-query+pageprops-example-simple": "Obtenir les propriétés de <kbd>Category:Foo</kbd>.",
+       "apihelp-query+pageprops-example-simple": "Obtenir les propriétés des pages <kbd>Accueil</kbd> et <kbd>MédiaWiki</kbd>.",
        "apihelp-query+pageswithprop-description": "Lister toutes les pages utilisant une propriété de page donnée.",
        "apihelp-query+pageswithprop-param-propname": "Propriété de page pour laquelle énumérer les pages.",
        "apihelp-query+pageswithprop-param-prop": "Quelles informations inclure :\n;ids:Ajoute l’ID de la page.\n;title:Ajoute le titre et l’ID de l’espace de noms de la page.\n;value:Ajoute la valeur de la propriété de page.",
        "apihelp-setnotificationtimestamp-example-page": "Réinitialiser l’état de notification pour la <kbd>Page principale<kbd>.",
        "apihelp-setnotificationtimestamp-example-pagetimestamp": "Fixer l’horodatage de notification pour <kbd>Page principale</kbd> afin que toutes les modifications depuis le 1 janvier 2012 soient non vues",
        "apihelp-setnotificationtimestamp-example-allpages": "Réinitialiser l’état de notification sur les pages dans l’espace de noms <kbd>{{ns:user}}</kbd>.",
+       "apihelp-tag-description": "Ajouter ou enlever des balises de modification aux révisions ou ou aux entrées de journal individuelles.",
+       "apihelp-tag-param-add": "Balises à ajouter. Seules les balises définies manuellement peuvent être ajoutées.",
        "apihelp-tag-param-reason": "Motif de la modification.",
        "apihelp-tokens-description": "Obtenir les jetons pour les actions modifiant les données.\n\nCe module est obsolète, remplacé par [[Special:ApiHelp/query+tokens|action=query&meta=tokens]].",
        "apihelp-tokens-param-type": "Types de jeton à demander.",
        "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.",
        "apihelp-undelete-example-page": "Annuler la suppression de la page <kbd>Main Page</kbd>.",
        "apihelp-undelete-example-revisions": "Annuler la suppression de deux révisions de la page <kbd>Main Page</kbd>.",
-       "apihelp-upload-description": "Télécharger un fichier, ou obtenir l’état des téléchargements en cours.\n\nPlusieurs méthodes sont disponibles :\n* Télécharger directement le contenu du fichier, en utilisant le paramètre <var>$1file</var>.\n* Télécharger le fichier par morceaux, en utilsiant les paramètres <var>$1filesize</var>, <var>$1chunk</var>, and <var>$1offset</var>.* Pour que le serveur MédiaWiki cherche un fichier depuis une URL, utiliser le paramètre <var>$1url</var>.\n* Terminer un téléchargement précédent qui a échoué à cause d’avertissements, en utilisant le paramètre <var>$1filekey</var>.\nNoter que le POST HTTP doit être fait comme un téléchargement de fichier (par ex. en utilisant <code>multipart/form-data</code>) en envoyant le <code>multipart/form-data</code>.",
+       "apihelp-upload-description": "Télécharger un fichier, ou obtenir l’état des téléchargements en cours.\n\nPlusieurs méthodes sont disponibles :\n* Télécharger directement le contenu du fichier, en utilisant le paramètre <var>$1file</var>.\n* Télécharger le fichier par morceaux, en utilsiant les paramètres <var>$1filesize</var>, <var>$1chunk</var>, and <var>$1offset</var>.\n* Pour que le serveur MédiaWiki cherche un fichier depuis une URL, utiliser le paramètre <var>$1url</var>.\n* Terminer un téléchargement précédent qui a échoué à cause d’avertissements, en utilisant le paramètre <var>$1filekey</var>.\nNoter que le POST HTTP doit être fait comme un téléchargement de fichier (par ex. en utilisant <code>multipart/form-data</code>) en envoyant le <code>multipart/form-data</code>.",
        "apihelp-upload-param-filename": "Nom de fichier cible.",
        "apihelp-upload-param-comment": "Télécharger le commentaire. Utilisé aussi comme texte de la page initiale pour les nouveaux fichiers si <var>$1text</var> n’est pas spécifié.",
        "apihelp-upload-param-text": "Texte de page initiale pour les nouveaux fichiers.",
index 3eb939f..f9c87e6 100644 (file)
        "apihelp-import-param-interwikipage": "Para importacións interwiki: páxina a importar.",
        "apihelp-import-param-fullhistory": "Para importacións interwiki: importar o historial completo, non só a versión actual.",
        "apihelp-import-param-templates": "Para importacións interwiki: importar tódolos modelos incluídos.",
-       "apihelp-import-param-namespace": "Para importacións interwiki: importar a este espazo de nomes.",
-       "apihelp-import-param-rootpage": "Importar como subpáxina desta páxina.",
+       "apihelp-import-param-namespace": "Importar a este espazo de nomes. Ignora o parámetro <kbd>$1rootpage</kbd>.",
+       "apihelp-import-param-rootpage": "Importar como subpáxina desta páxina. Ignorado se se proporciona o parámetro <kbd>$1namespace</kbd>.",
        "apihelp-import-example-import": "Importar [[meta:Help:Parserfunctions]] ó espazo de nomes 100 con todo o historial.",
        "apihelp-login-description": "No caso dunha conexión correcta, as cookies necesarias incluiranse nas cabeceiras HTTP de resposta. No caso dunha conexión fallida, os intentos posteriores poden ser reducidos para limitar ataques automaticos de roubo de contrasinais.",
        "apihelp-login-param-name": "Nome de usuario.",
        "apihelp-parse-param-pageid": "Analizar o contido desta páxina. Ignora <var>$1page</var>.",
        "apihelp-parse-param-redirects": "Se <var>$1page</var> ou <var>$1pageid</var> apuntar a unha redirección, resólvea.",
        "apihelp-parse-param-oldid": "Analizar o contido desta revisión. Ignora <var>$1page</var> e <var>$1pageid</var>.",
+       "apihelp-parse-param-prop": "Que información obter:",
+       "apihelp-parse-paramvalue-prop-text": "Devolve o texto analizado do texto wiki.",
+       "apihelp-parse-paramvalue-prop-langlinks": "Devolve as interwikis do texto analizado.",
+       "apihelp-parse-paramvalue-prop-categories": "Devolve as categoría do texto analizado.",
+       "apihelp-parse-paramvalue-prop-categorieshtml": "Devolve a versión HTML das categorías.",
+       "apihelp-parse-paramvalue-prop-links": "Devolve as ligazóns internas do texto wiki analizado.",
+       "apihelp-parse-paramvalue-prop-templates": "Devolve os modelos do texto wiki analizado.",
+       "apihelp-parse-paramvalue-prop-images": "Devolve as imaxes do texto wiki analizado.",
+       "apihelp-parse-paramvalue-prop-externallinks": "Devolve as ligazóns externas no texto wiki analizado.",
+       "apihelp-parse-paramvalue-prop-sections": "Devolve as seccións do texto wiki analizado.",
+       "apihelp-parse-paramvalue-prop-revid": "Engade o identificador de edición do texto wiki analizado.",
+       "apihelp-parse-paramvalue-prop-displaytitle": "Engade o título do texto wiki analizado.",
+       "apihelp-parse-paramvalue-prop-headitems": "Devolve os elementos a poñer na <code>&lt;cabeceira&gt;</code> da páxina.",
+       "apihelp-parse-paramvalue-prop-headhtml": "Devolve <code>&lt;cabeceira&gt;</code> analizada da páxina.",
+       "apihelp-parse-paramvalue-prop-modules": "Devolve os módulos ResourceLoader usados na páxina.",
+       "apihelp-parse-paramvalue-prop-jsconfigvars": "Devolve as variables específicas de configuración JavaScript da páxina.",
+       "apihelp-parse-paramvalue-prop-encodedjsconfigvars": "Devolve as variables específicas de configuración JavaScript da páxina como unha cadea de texto JSON.",
+       "apihelp-parse-paramvalue-prop-indicators": "Devolve o HTML dos indicadores de estado de páxina usados na páxina.",
+       "apihelp-parse-paramvalue-prop-iwlinks": "Devolve as ligazóns interwiki do texto wiki analizado.",
+       "apihelp-parse-paramvalue-prop-wikitext": "Devolve o texto wiki orixinal que foi analizado.",
+       "apihelp-parse-paramvalue-prop-properties": "Obter varias propiedades definidas no texto wiki analizado.",
+       "apihelp-parse-paramvalue-prop-limitreportdata": "Devolve o informe de límite de forma estruturada. Non devolve datos cando <var>$1disablepp</var> está fixado.",
+       "apihelp-parse-paramvalue-prop-limitreporthtml": "Devolve a versión HTML do informe de límite. Non devolve datos cando <var>$1disablepp</var> está fixado.",
        "apihelp-parse-param-pst": "Fai unha transformación antes de gardar a entrada antes de analizala. Válida unicamente para usar con texto.",
        "apihelp-parse-param-onlypst": "Facer unha transformación antes de gardar (PST) a entrada, pero sen analizala. Devolve o mesmo wikitexto, despois de que a PST foi aplicada. Só válida cando se usa con <var>$1text</var>.",
        "apihelp-parse-param-effectivelanglinks": "Inclúe ligazóns de idioma proporcionadas polas extensións (para usar con <kbd>$1prop=langlinks</kbd>).",
        "apihelp-query+allfileusages-param-to": "Título do ficheiro no que rematar de enumerar.",
        "apihelp-query+allfileusages-param-prefix": "Buscar tódolos títulos de ficheiro que comezan con este valor.",
        "apihelp-query+allfileusages-param-unique": "Mostrar só nomes de ficheiro distintos. Non pode usarse con $1prop=ids.\nCando se usa como xenerador, produce páxinas obxectivo no canto de páxinas fonte.",
-       "apihelp-query+allfileusages-param-prop": "Que partes de información incluír:\n;ids:Engade o ID de páxina usada (non pode usarse con $1unique).\n;title:Engade o nome do ficheiro.",
+       "apihelp-query+allfileusages-param-prop": "Que partes de información incluír:\n;ids:Engade os IDs das páxinas usadas (non pode usarse con $1unique).\n;title:Engade o nome do ficheiro.",
        "apihelp-query+allfileusages-param-limit": "Número total de obxectos a devolver.",
        "apihelp-query+allfileusages-param-dir": "Dirección na cal listar.",
        "apihelp-query+allfileusages-example-B": "Lista títulos de ficheiro, incluíndo os   eliminados, cos IDs de páxina dos que proveñen, comezando en <kbd>B</kbd>.",
        "apihelp-query+blocks-param-users": "Lista de usuarios a buscar (opcional).",
        "apihelp-query+blocks-param-ip": "Obter todos os bloques aplicables a esta IPs ou a este rango CIDR, incluíndo bloques de rangos.\nNon pode usarse xunto con <var>$3users</var>. Os rangos CIDR maiores que IPv4/$1 ou IPv6/$2 non se aceptan.",
        "apihelp-query+blocks-param-limit": "Número máximo de bloques a listar.",
+       "apihelp-query+blocks-param-prop": "Que propiedades obter:\n;id:Engade o identificador do bloqueo.\n;user:Engade o nome de usario do usuario bloqueado.\n;userid:Engade o identificador de usuario do usuario bloqueado.\n;by:Engade o nome de usuario do usuario que fixo o bloqueo.\n;byid:Engade o identificador do usuario que fixo o bloqueo.\n;timestamp:Engade o selo de tempo de cando se realizou o bloqueo.\n;expiry:Engade o selo de tempo de cando remata o bloqueo.\n;reason:Engade a razón dada para o bloqueo.\n;range:Engade o rango de direccións IP afectadas polo bloqueo.\n;flags:Etiqueta o bloqueo con (autoblock, anononly, etc.).",
        "apihelp-query+blocks-param-show": "Só mostrar elementos correspondentes a eses criterios.\nPor exemplo, para ver só bloques indefinidos en direccións IP, ponga <kbd>$1show=ip|!temp</kbd>.",
        "apihelp-query+blocks-example-simple": "Listar bloques.",
        "apihelp-query+blocks-example-users": "Lista de bloques de usuarios <kbd>Alice</kbd> e <kbd>Bob</kbd>.",
        "apihelp-query+deletedrevs-param-excludeuser": "Non listar revisións deste usuario.",
        "apihelp-query+deletedrevs-param-namespace": "Só listar páxinas neste espazo de nomes.",
        "apihelp-query+deletedrevs-param-limit": "Máximo número de revisións a listar.",
+       "apihelp-query+deletedrevs-param-prop": "Que propiedades devolver:\n;revid:Engade o identificador de modificación da modificación borrada.\n;parentid:Engade o identificador de modificación da versión anterior da páxina.\n;user:Engade o usuario que fixo esa modificación.\n;userid:Engade o identificador de usuario que fixo esa modificación.\n;comment:Engade o comentario da modificación.\n;parsedcomment:Engade o comentario analizado da modificación.\n;minor:Indica se a modificación é menor.\n;len:Engade a lonxitude (bytes) da modificación.\n;sha1:Engade o SHA-1 (base 16) da modificación.\n;content:Engade o contido da modificación.\n;token:<span class=\"apihelp-deprecated\">Obsoleto.</span> Devolve o identificador da modificación.\n;tags:Etiquetas da modificación.",
        "apihelp-query+deletedrevs-example-mode1": "Listar as últimas revisións borradas das páxinas <kbd>Main Page</kbd> e <kbd>Talk:Main Page</kbd>, con contido (modo 1).",
        "apihelp-query+deletedrevs-example-mode2": "Listar as últimas 50 contribucións borradas de <kbd>Bob</kbd> (modo 2).",
        "apihelp-query+deletedrevs-example-mode3-main": "Listar as primeiras 50 revisións borradas no espazo de nomes principal (modo 3)",
        "apihelp-query+filearchive-param-dir": "Dirección na cal listar.",
        "apihelp-query+filearchive-param-sha1": "Función hash SHA1 da imaxe. Invalida $1sha1base36.",
        "apihelp-query+filearchive-param-sha1base36": "Función hash SHA1 da imaxe en base 36 (usado en MediaWiki).",
+       "apihelp-query+filearchive-param-prop": "Que información de imaxe devolver:\n;sha1:Engade a función hash SHA-1 da imaxe.\n;timestamp:Engade o selo de tempo da versión subida.\n;user:Engade o usuario que subiu a versión da imaxe.\n;size:Engade o tamaño da imaxe en bytes e a altura, anchura e contador de páxina (se é aplicable).\n;dimensions:Alias para o tamaño.\n;description:Engade a descrición da versión da imaxe.\n;parseddescription:Analiza a descrición na versión.\n;mime:Engade o tipo MIME da imaxe.\n;mediatype:Engade o tipo multimedia da imaxe.\n;metadata:Lista os metadatos Exif da versión da imaxe.\n;bitdepth:Engade a profundidade de bit da versión.\n;archivename:Engade o nome do ficheiro da versión do ficheiro para as versións que non son a última.",
        "apihelp-query+filearchive-example-simple": "Mostrar unha lista de tódolos fichieiros eliminados.",
        "apihelp-query+filerepoinfo-description": "Devolver a meta información sobre os repositorios de imaxes configurados na wiki.",
        "apihelp-query+filerepoinfo-param-prop": "Que propiedades do repositorio mostrar (pode haber máis dispoñible nalgunhas wikis):\n;apiurl:URL ó API do repositorio - útil para obter información das imaxes no host.\n;name:A clave do repositorio - usada p. ex. nas variables de retorno de <var>[[mw:Manual:$wgForeignFileRepos|$wgForeignFileRepos]]</var> e [[Special:ApiHelp/query+imageinfo|imageinfo]]\n;displayname:O nome lexible do wiki repositorio.\n;rooturl:URL raíz dos camiños de imaxe.\n;local:Se o repositorio é o repositorio local ou non.",
        "apihelp-query+linkshere-example-simple": "Obter unha lista que ligan á [[Main Page]]",
        "apihelp-query+linkshere-example-generator": "Obter a información das páxinas que ligan á [[Main Page]].",
        "apihelp-query+logevents-description": "Obter os eventos dos rexistros.",
+       "apihelp-query+logevents-param-prop": "Que propiedades obter:\n;ids:Engade o identificador do evento.\n;title:Engade o título da páxina para o evento.\n;type:Engade o tipo de evento.\n;user:Engade o usuario responsable do evento.\n;userid:Engade o identificador do usuario responsable do evento.\n;timestamp:Engade o selo de tempo do evento.\n;comment:Engade o comentario do evento.\n;parsedcomment:Engade o comentario analizado do evento.\n;details:Lista detalles adicionais do evento.\n;tags:Lista as etiquetas do evento.",
        "apihelp-query+logevents-param-type": "Filtrar as entradas do rexistro para mostrar só as deste tipo.",
        "apihelp-query+logevents-param-action": "Filtrar accións no rexistro para mostrar só esta acción. Ignora <var>$1type</var>. Accións comodín como  <kbd>action/*</kbd> permiten especificar calquera cadea para o asterisco.",
        "apihelp-query+logevents-param-start": "Selo de tempo no que comezar a enumeración.",
        "apihelp-query+pagepropnames-example-simple": "Obter os dez primeiros nomes de propiedade.",
        "apihelp-query+pageprops-description": "Obter varias propiedades definidas no contido da páxina.",
        "apihelp-query+pageprops-param-prop": "Listar só esas propiedades. Útil para verificar se unha páxina concreta usa unha propiedade de páxina determinada.",
-       "apihelp-query+pageprops-example-simple": "Obter as propiedades para <kbd>Category:Foo</kbd>.",
+       "apihelp-query+pageprops-example-simple": "Obter as propiedades para as páxinas <kbd>Main Page</kbd> e <kbd>MediaWiki</kbd>",
        "apihelp-query+pageswithprop-description": "Mostrar a lista de páxinas que empregan unha propiedade determinada.",
        "apihelp-query+pageswithprop-param-propname": "Propiedade de páxina pola que enumerar as páxinas.",
        "apihelp-query+pageswithprop-param-prop": "Que información incluír:\n;ids:Engade o ID da páxina.\n;title:Engade o título e o ID do espazo de nomes da páxina.\n;value:Engade o valor da propiedade da páxina.",
        "apihelp-query+querypage-param-page": "Nome da páxina especial. Teña en conta que diferencia entre maiúsculas e minúsculas.",
        "apihelp-query+querypage-param-limit": "Número de resultados a visualizar.",
        "apihelp-query+querypage-example-ancientpages": "Resultados devoltos de [[Special:Ancientpages]].",
+       "apihelp-query+random-description": "Obter un conxunto de páxinas aleatorias.\n\nAs páxinas están listadas nunha secuencia fixa, só o punto de comezo é aleatorio. Isto significa que se, por exemplo, a <samp>Main Page</samp> é a primeira páxina aleatoria da lista, a <samp>Lista de monos ficticios</samp> será <em>sempre</em> a segunda, <samp>Lista de xente en selos de Vanuatu</samp> será a terceira, etc.\n\nSe o númeor de páxinas do espazo de nomes é menor que <var>$1limit</var>, devolveranse menos páxinas. Non se devolverá dúas veces a mesma páxina.",
        "apihelp-query+random-param-namespace": "Devolver páxinas só neste espazo de nomes.",
        "apihelp-query+random-param-limit": "Limitar cantas páxinas aleatorias se van devolver.",
        "apihelp-query+random-param-redirect": "Cargar unha redirección aleatoria no canto dunha páxina aleatoria.",
        "apihelp-query+recentchanges-param-user": "Só listar cambios deste usuario.",
        "apihelp-query+recentchanges-param-excludeuser": "Non listar cambios deste usuario.",
        "apihelp-query+recentchanges-param-tag": "Só listar cambios marcados con esta etiqueta.",
+       "apihelp-query+recentchanges-param-prop": "Inclúe información adicional:\n;user:Engade o usuario responsable da modificación e marca se é unha dirección IP.\n;userid:Engade o identificador do usuario responsable da edición.\n;comment:Engade o comentario da edición.\n;parsedcomment:Engade o comentario analizado da edición.\n;flags:Engade os indicadores da edición.\n;timestamp:Engade o selo de tempo da edición.\n;title:Engade o título da páxina da edición.\n;ids:Engade o identificador da páxina, o identificador dos cambios recentes e o identificador da versión nova e da vella.\n;sizes:Engade a lonxitude nova e vella da páxina en bytes.\n;redirect:Pon unha marca se a páxina é unha redirección.\n;patrolled:Marca as edicións vixiables como vixiadas ou non vixiadas.\n;loginfo:Engade información do rexistro (identificador de rexistro, tipo de rexistro, etc) nas entradas do rexistro.\n;tags:Lista as etiquetas da entrada.\n;sha1:Engade o control de contido para as entradas asociadas a unha revisión.",
        "apihelp-query+recentchanges-param-token": "Usar <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd> no canto diso.",
        "apihelp-query+recentchanges-param-show": "Só mostrar elementos que cumpran esos criterios. Por exemplo, para ver só edicións menores feitas por usuarios conectados, activar $1show=minor|!anon.",
        "apihelp-query+recentchanges-param-limit": "Número total de páxinas a devolver.",
        "apihelp-query+revisions-example-first5-after": "Mostrar as cinco primeiras revisións da <kbd>Páxina Principal</kbd> feitas despois de 2006-05-01.",
        "apihelp-query+revisions-example-first5-not-localhost": "Mostrar as cinco primeiras revisións da <kbd>Páxina Principal</kbd> que non foron feitas polo usuario anónimo <kbd>127.0.0.1</kbd>.",
        "apihelp-query+revisions-example-first5-user": "Mostrar as cinco primeiras revisión da <kbd>Páxina Principal</kbd> feitas polo usuario <kbd>MediaWiki default</kbd>.",
+       "apihelp-query+revisions+base-param-prop": "Que propiedades mostrar para cada modificación:\n;ids:O identificador da modificación.\n;flags:Etiquetas de modificación(menor).\n;timestamp:Selo de tempo da modificación.\n;user:Usuario que fixo a modificación.\n;userid:Identificador de usuario que fixo a modificación.\n;size:Lonxitude (bytes) da modificación.\n;sha1:SHA-1 (base 16) da modificación.\n;contentmodel:Identificador do modelo de contido da modificación.\n;comment:Comentario do usuario que fixo a modificación.\n;parsedcomment:Comentario analizado do usuario que fixo a modificación.\n;content:Texto da modificación.\n;tags:Etiquetas da modificación.",
        "apihelp-query+revisions+base-param-limit": "Limitar cantas revisións se van devolver.",
        "apihelp-query+revisions+base-param-expandtemplates": "Expandir os modelos no contido da revisión (require $1prop=content).",
        "apihelp-query+revisions+base-param-generatexml": "Xenerar a árbore de análise XML para o contido da revisión (require $1prop=content).",
        "apihelp-query+search-param-namespace": "Buscar só nestes espazos de nomes.",
        "apihelp-query+search-param-what": "Que tipo de busca lanzar.",
        "apihelp-query+search-param-info": "Que metadatos devolver.",
+       "apihelp-query+search-param-prop": "Que propiedades devolver:\n;size:Engade o tamaño da páxina en bytes.\n;wordcount:Engade o número de palabras da páxina.\n;timestamp:Engade o selo de tempo da última vez que foi editada a páxina.\n;snippet:Engade o fragmento analizado da páxina.\n;titlesnippet:Engade un fragmento analizado do título da páxina.\n;redirectsnippet:Engade un fragmento analizado do título da redirección.\n;redirecttitle:Engade o título da redirección asociada.\n;sectionsnippet:Engade un fragmento analizado do título de sección asociado.\n;sectiontitle:Engade o título da sección asociada.\n;categorysnippet:Engade un fragmento analizado da categoría asociada.\n;isfilematch:Engade unha marca indicando se o resultado da busca é un ficheiro.\n;score:<span class=\"apihelp-deprecated\">Obsoleto e ignorado.</span>\n;hasrelated:<span class=\"apihelp-deprecated\">Obsoleto e ignorado.</span>",
        "apihelp-query+search-param-limit": "Número total de páxinas a devolver.",
        "apihelp-query+search-param-interwiki": "Incluir na busca resultados de interwikis, se é posible.",
        "apihelp-query+search-param-backend": "Que servidor de busca usar, se non se indica usa o que hai por defecto.",
        "apihelp-query+stashimageinfo-example-params": "Devolve as miniaturas de dous ficheiros almacenados.",
        "apihelp-query+tags-description": "Lista de marcas de cambios.",
        "apihelp-query+tags-param-limit": "Máximo número de etiquetas a listar.",
+       "apihelp-query+tags-param-prop": "Que propiedades recuperar:\n;name:Engade o nome da etiqueta.\n;displayname:Engade a mensaxe do sistema para a etiqueta.\n;description:Engade a descrición da etiqueta.\n;hitcount:Engade o número de modificacións e de entradas do rexistro que teñen esta etiqueta.\n;defined:Indica se a etiqueta está definida.\n;source:Obtén as fontes da etiqueta, que poden incluír <samp>extension</samp> para etiquetas definidas en extensión e <samp>manual</samp> para etiquetas que poden ser aplicadas manualmente polos usuarios.\n;active:Se a etiqueta aínda está a ser usada.",
        "apihelp-query+tags-example-simple": "Listar as marcas dispoñibles",
        "apihelp-query+templates-description": "Devolve todas as páxinas incluídas na páxina indicada.",
        "apihelp-query+templates-param-namespace": "Mostrar modelos só neste espazo de nomes.",
        "apihelp-query+usercontribs-param-user": "Usuarios para os que recuperar as contribucións.",
        "apihelp-query+usercontribs-param-userprefix": "Recuperar as contribucións de todos os usuarios cuxo nome comece por este valor. Ignora $1user.",
        "apihelp-query+usercontribs-param-namespace": "Só listar contribucións nestes espazos de nomes.",
+       "apihelp-query+usercontribs-param-prop": "Engade información adicional:\n;ids:Engade os identificadores de páxina e modificación.\n;title:Engade o título e o identificador do espazo de nomes da páxina.\n;timestamp:Engade o selo de tempo da modificación.\n;comment:Engade o comentario da modificación.\n;parsedcomment:Engade o comentario analizado da modificación.\n;size:Engade o novo tamaño da modificación.\n;sizediff:Engade o delta do tamaño da modificación comparada coa anterior.\n;flags:Engade os indicadores da modificación.\n;patrolled:Marca as modificacións vixiadas.\n;tags:Lista as etiquetas da modificación.",
        "apihelp-query+usercontribs-param-show": "Só mostrar elementos que cumpran estos criterios, p.ex. só edicións menores: <kbd>$2show=!minor</kbd>.\n\nSe está fixado <kbd>$2show=patrolled</kbd> ou <kbd>$2show=!patrolled</kbd>, as modificacións máis antigas que <var>[[mw:Manual:$wgRCMaxAge|$wgRCMaxAge]]</var> ($1 {{PLURAL:$1|segundo|segundos}}) non se mostrarán.",
        "apihelp-query+usercontribs-param-tag": "Só listar revisións marcadas con esta etiqueta.",
        "apihelp-query+usercontribs-param-toponly": "Listar só cambios que son a última revisión.",
        "apihelp-tag-param-revid": "Identificadores de unha ou máis revisións nas que engadir ou eliminar a etiqueta.",
        "apihelp-tag-param-logid": "Identificadores de unha ou máis entradas do rexistro nas que engadir ou eliminar a etiqueta.",
        "apihelp-tag-param-add": "Etiquetas a engadir. Só poden engadirse etiquetas definidas manualmente.",
+       "apihelp-tag-param-remove": "Etiquetas a eliminar. Só se poden eliminar as etiquetas definidas manualmente ou que non teñen ningunha definición.",
        "apihelp-tag-param-reason": "Razón para o cambio.",
        "apihelp-tag-example-rev": "Engadir a marca <kbd>vandalismo</kbd> á modificación con identificador 123 sen indicar unha razón.",
        "apihelp-tag-example-log": "Eliminar a etiqueta <kbd>publicidade</kbd> da entrada do rexistro con identificador 123 co motivo <kbd>aplicada incorrectamente</kbd>",
        "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-undelete-example-page": "Restaurar a <kbd>Páxina Principal</kbd>.",
        "apihelp-undelete-example-revisions": "Restaurar dúas revisións de <kbd>[[Main Page]]</kbd>.",
+       "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-text": "Texto da páxina inicial para novos ficheiros.",
        "apihelp-json-description": "Datos de saída en formato JSON.",
        "apihelp-json-param-callback": "Se está especificado, inclúe a saída na chamada da función indicada. Para maior seguridade, todos os datos específicos do usuario serán restrinxidos.",
        "apihelp-json-param-utf8": "Se está especificado, codifica a maioría (pero non todos) dos caracteres ASCII como UTF-8 no canto de reemprazalos con secuencias de escape hexadecimais. Por defecto cando <var>formatversion</var> non é <kbd>1</kbd>.",
+       "apihelp-json-param-ascii": "Se está indicado, codifica todos os caracteres que non sexan ASCII usando secuencias de escape hexadecimais. Por defecto cando <var>formatversion</var> é <kbd>1</kbd>.",
+       "apihelp-json-param-formatversion": "Formato de saída:\n;1:Formato compatible con versións anteriores(booleanos estilo XML,claves <samp>*</samp> para nodos, etc.).\n;2:Formato moderno experimental. Os detalles poden cambiar!\n;latest:Usa o último formato (actualmente kbd>2</kbd>), pode cambiar sen aviso previo.",
        "apihelp-jsonfm-description": "Datos de saída en formato JSON(impresión en HTML).",
        "apihelp-none-description": "Ningunha saída.",
        "apihelp-php-description": "Datos de saída en formato serializado de PHP.",
+       "apihelp-php-param-formatversion": "Formato de saída:\n;1:Formato compatible con versións anteriores(booleanos estilo XML,claves <samp>*</samp> para nodos, etc.).\n;2:Formato moderno experimental. Os detalles poden cambiar!\n;latest:Usa o último formato (actualmente kbd>2</kbd>), pode cambiar sen aviso previo.",
        "apihelp-phpfm-description": "Datos de saída en formato serializado de PHP(impresión en HTML).",
        "apihelp-rawfm-description": "Datos de saída cos elementos de depuración en formato JSON(impresión en HTML).",
        "apihelp-txt-description": "Datos de saída en formato PHP <code>print_r()</code>.",
        "apihelp-yaml-description": "Datos de saída en formato YAML.",
        "apihelp-yamlfm-description": "Datos de saída en formato YAML(impresión en HTML).",
        "api-format-title": "Resultado de API de MediaWiki",
+       "api-format-prettyprint-header": "Esta é a representación HTML do formato $1. HTML é bó para depurar, pero non é axeitado para usar nunha aplicación.\n\nEspecifique o parámetro <var>format</var> para cambiar o formato de saída. Para ver a representación non-HTML do formato $1, fixe <kbd>format=$2</kbd>.\n\n\nRevise a [[mw:API|documentación completa]], ou a [[Special:ApiHelp/main|axuda da API]] para obter máis información.",
        "api-orm-param-props": "Campos a consultar.",
        "api-orm-param-limit": "Número máximo de filas a mostrar.",
        "api-pageset-param-titles": "Lista de títulos nos que traballar.",
        "api-help-permissions": "{{PLURAL:$1|Permiso|Permisos}}:",
        "api-help-permissions-granted-to": "{{PLURAL:$1|Concedida a|Concedidas a}}: $2",
        "api-help-right-apihighlimits": "Usar os valores superiores das consultas da API (consultas lentas: $1; consultas rápidas: $2). Os límites para as consultas lentas tamén se aplican ós parámetros multivaluados.",
-       "api-credits-header": "Créditos"
+       "api-credits-header": "Créditos",
+       "api-credits": "Desenvolvedores da API:\n* Roan Kattouw (desenvolvedor principal, set. 2007-2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan (creador e desenvolvedor principal, set. 2006-sep. 2007)\n* Brad Jorsch (desenvolvedor principal, 2013-actualidade)\n\nEnvía comentarios, suxerencias e preguntas a mediawiki-api@lists.wikimedia.org\nou informa dun erro en https://phabricator.wikimedia.org/."
 }
index 68f4e40..a87861e 100644 (file)
@@ -3,7 +3,8 @@
                "authors": [
                        "Beta16",
                        "Nivit",
-                       "Toadino2"
+                       "Toadino2",
+                       "Gianfranco"
                ]
        },
        "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Documentazione (in inglese)]]\n* [[mw:API:FAQ|FAQ (in inglese)]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Mailing list]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Annunci sull'API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Bug & richieste]\n</div>\n<strong>Stato:</strong> Tutte le funzioni e caratteristiche mostrate su questa pagina dovrebbero funzionare, ma l'API è ancora in fase d'attivo sviluppo, e potrebbe cambiare in qualsiasi momenento. Iscriviti alla [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ the mediawiki-api-announce mailing list] per essere informato sugli aggiornamenti.\n\n<strong>Istruzioni sbagliate:</strong> quando vengono impartite all'API delle istruzioni sbagliate, un'intestazione HTTP verrà inviata col messaggio \"MediaWiki-API-Error\" e sia al valore dell'intestazione sia al codice d'errore verrà impostato lo stesso valore. Per maggiori informazioni leggi [[mw:API:Errors_and_warnings|API:Errori ed avvertimenti (in inglese)]].",
        "apihelp-main-param-format": "Formato dell'output.",
        "apihelp-main-param-assert": "Verifica che l'utente sia loggato se si è impostato <kbd>utente</kbd>, o che abbia i permessi di bot se si è impostato <kbd>bot</kbd>.",
        "apihelp-main-param-requestid": "Tutti i valori forniti saranno implementati nella risposta. Potrebbero venir utilizzati per distinguere le richieste.",
+       "apihelp-main-param-curtimestamp": "Includere il timestamp corrente nel risultato.",
        "apihelp-block-description": "Blocca  un utente.",
+       "apihelp-block-param-user": "Nome utente, indirizzo IP o range di IP da bloccare.",
        "apihelp-block-param-reason": "Motivo del blocco.",
+       "apihelp-block-param-nocreate": "Evitare la creazione di account.",
+       "apihelp-block-param-hidename": "Nascondi il nome utente dal registro dei blocchi (Richiede i permessi di <code>hideuser</code>).",
+       "apihelp-block-param-reblock": "Se l'utente è già bloccato, sovrascrivere il blocco esistente.",
+       "apihelp-block-param-watchuser": "Segui la pagina utente e le pagine di discussione utente dell'utente o dell'indirizzo IP.",
+       "apihelp-block-example-ip-simple": "Blocca l'indirizzo IP <kbd>192.0.2.5</kbd> per tre giorni con motivazione <kbd>Primo avvertimento</kbd>.",
+       "apihelp-block-example-user-complex": "Blocca l'utente <kbd>Vandalo</kbd> a tempo indeterminato con motivazione <kbd>Vandalismo</kbd>, e impediscigli la creazione di nuovi account e l'invio di e-mail.",
+       "apihelp-checktoken-description": "Verifica la validità di un token da <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.",
+       "apihelp-checktoken-param-type": "Tipo di token in corso di test.",
+       "apihelp-checktoken-param-token": "Token da testare.",
+       "apihelp-checktoken-param-maxtokenage": "Massima età consentita per il token, in secondi.",
+       "apihelp-checktoken-example-simple": "Verifica la validità di un token <kbd>csrf</kbd>.",
+       "apihelp-clearhasmsg-description": "Cancella il flag <code>hasmsg</code> per l'utente corrente.",
+       "apihelp-clearhasmsg-example-1": "Cancella il flag <code>hasmsg</code> per l'utente corrente.",
+       "apihelp-compare-description": "Trova la differenza tra 2 pagine.\n\nUn numero di revisione, il titolo di una pagina, o un ID di pagina deve essere indicato sia per il \"da\" che per lo \"a\".",
+       "apihelp-compare-param-fromtitle": "Primo titolo da confrontare.",
+       "apihelp-compare-param-fromid": "Primo ID di pagina da confrontare.",
+       "apihelp-compare-param-fromrev": "Prima revisione da confrontare.",
+       "apihelp-compare-param-totitle": "Primo titolo da confrontare.",
+       "apihelp-compare-param-toid": "Secondo ID di pagina da confrontare.",
+       "apihelp-compare-param-torev": "Seconda revisione da confrontare.",
+       "apihelp-compare-example-1": "Crea un diff tra revisione 1 e revisione 2.",
+       "apihelp-createaccount-description": "Crea un nuovo account utente.",
+       "apihelp-createaccount-param-name": "Nome Utente",
+       "apihelp-createaccount-param-password": "Password (verrà ignorata se è impostato <var>$1mailpassword</var>).",
+       "apihelp-createaccount-param-domain": "Dominio per l'autenticazione esterna (opzionale).",
+       "apihelp-createaccount-param-email": "Indirizzo Email dell'utente (opzionale).",
+       "apihelp-createaccount-param-realname": "Nome reale dell'utente (opzionale).",
+       "apihelp-createaccount-param-mailpassword": "Se impostato su un qualsiasi valore, una password random (casuale) verrà inviata all'utente.",
+       "apihelp-createaccount-param-reason": "Ragione, facoltativa, della creazione dell'account da inserire nei registri.",
+       "apihelp-createaccount-param-language": "Codice di lingua da impostare come predefinita per l'utente (opzionale, di default è la lingua del contenuto).",
+       "apihelp-createaccount-example-pass": "Crea l'utente <kbd>testuser</kbd> con password <kbd>test123</kbd>.",
+       "apihelp-createaccount-example-mail": "Crea l'utente <kbd>testmailuser</kbd> e mandagli via e-mail una password generata casualmente.",
+       "apihelp-delete-description": "Cancella una pagina.",
+       "apihelp-delete-param-title": "Titolo della pagina che si desidera eliminare. Non può essere usato insieme con <var>$1pageid</var>.",
+       "apihelp-delete-param-pageid": "ID di pagina della pagina da cancellare. Non può essere usato insieme con <var>$1title</var>.",
+       "apihelp-delete-param-reason": "Motivo della cancellazione. Se non indicato, verrà usata una motivazione generata automaticamente.",
+       "apihelp-delete-param-watch": "Aggiungi la pagina agli Osservati Speciali dell'utente corrente.",
+       "apihelp-delete-param-unwatch": "Rimuovi la pagina dagli Osservati Speciali dell'utente corrente.",
+       "apihelp-delete-example-simple": "Cancella la <kbd>Pagina Principale</kbd>.",
+       "apihelp-delete-example-reason": "Cancella la <kbd>Pagina Principale</kbd> con motivazione <kbd>Preparazione allo spostamento</kbd>.",
+       "apihelp-disabled-description": "Questo modulo è stato disabilitato.",
+       "apihelp-edit-description": "Crea e modifica pagine.",
+       "apihelp-edit-param-title": "Titolo della pagina da modificare. Non può essere usato insieme con <var>$1pageid</var>.",
+       "apihelp-edit-param-sectiontitle": "Il titolo per una nuova sezione.",
+       "apihelp-edit-param-text": "Contenuto della pagina.",
+       "apihelp-edit-param-summary": "Oggetto della modifica. Anche titolo della sezione se $1sezione=new e $1sectiontitle non è impostato.",
+       "apihelp-edit-param-tags": "Cambia i tag da applicare alla revisione.",
+       "apihelp-edit-param-minor": "Modifica minore.",
+       "apihelp-edit-param-notminor": "Modifica non minore.",
+       "apihelp-edit-param-bot": "Segna questa modifica come bot.",
+       "apihelp-edit-param-createonly": "Non modificare la pagina se già esiste.",
+       "apihelp-edit-param-nocreate": "Genera un errore se la pagina non esiste.",
+       "apihelp-edit-param-watch": "Aggiungi la pagina agli Osservati Speciali dell'utente corrente.",
+       "apihelp-edit-param-unwatch": "Rimuovi la pagina dagli Osservati Speciali dell'utente corrente.",
        "apihelp-emailuser-description": "Manda un'e-mail ad un utente.",
        "apihelp-emailuser-param-ccme": "Mandami una copia di questa mail.",
        "apihelp-expandtemplates-description": "Espandi tutti i template nel wikitesto.",
index 21a611c..fcae447 100644 (file)
@@ -30,6 +30,7 @@
        "apihelp-block-param-watchuser": "その利用者またはIPアドレスの利用者ページとトークページをウォッチします。",
        "apihelp-block-example-ip-simple": "IPアドレス <kbd>192.0.2.5</kbd> を <kbd>First strike<kbd> という理由で3日ブロックする",
        "apihelp-block-example-user-complex": "利用者 <kbd>Vandal</kbd> を <kbd>Vandalism</kbd> という理由で無期限ブロックし、新たなアカウント作成とメールの送信を禁止する。",
+       "apihelp-checktoken-description": "<kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd> のトークンの妥当性を確認します。",
        "apihelp-checktoken-param-type": "調べるトークンの種類。",
        "apihelp-checktoken-param-token": "調べるトークン。",
        "apihelp-checktoken-example-simple": "<kbd>csrf</kbd> トークンの妥当性を調べる。",
        "apihelp-edit-param-section": "節番号です。先頭の節の場合は <kbd>0</kbd>、新しい節の場合は <kbd>new</kbd>を指定します。",
        "apihelp-edit-param-sectiontitle": "新しい節の名前です。",
        "apihelp-edit-param-text": "ページの本文。",
+       "apihelp-edit-param-tags": "この版に適用する変更タグ。",
        "apihelp-edit-param-minor": "細部の編集",
+       "apihelp-edit-param-notminor": "細部の編集ではない。",
+       "apihelp-edit-param-basetimestamp": "編集前の版のタイムスタンプ。編集競合を検出するために使用されます。\n[[Special:ApiHelp/query+revisions|action=query&prop=revisions&rvprop=timestamp]] で取得できます。",
+       "apihelp-edit-param-starttimestamp": "編集作業を開始したときのタイムスタンプ。編集競合を検出するために使用されます。適切な値は <var>[[Special:ApiHelp/main|curtimestamp]]</var> を使用して編集作業を開始するとき (たとえば、編集するページの本文を読み込んだとき) に取得できます。",
        "apihelp-edit-param-createonly": "すでにそのページが存在する場合は編集を行いません。",
        "apihelp-edit-param-nocreate": "そのページが存在しない場合にエラーを返します。",
        "apihelp-edit-param-watch": "そのページを現在の利用者のウォッチリストに追加します。",
        "apihelp-edit-param-unwatch": "そのページを現在の利用者のウォッチリストから除去します。",
-       "apihelp-edit-param-undo": "この版を取り消します。$1text, $1prependtext および $1appendtext を上書きします。",
+       "apihelp-edit-param-prependtext": "このテキストをページの先頭に追加します。$1text をオーバーライドします。",
+       "apihelp-edit-param-undo": "この版を取り消します。$1text, $1prependtext および $1appendtext をオーバーライドします。",
        "apihelp-edit-param-undoafter": "$1undo からこの版までのすべての版を取り消します。設定しない場合、ひとつの版のみ取り消されます。",
        "apihelp-edit-param-token": "このトークンは常に最後のパラメーターとして、または少なくとも $1text パラメーターより後に送信されるべきです。",
        "apihelp-edit-example-edit": "ページを編集",
@@ -72,6 +78,7 @@
        "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-param-text": "変換するウィキテキストです。",
        "apihelp-expandtemplates-param-includecomments": "HTMLコメントを出力に含めるかどうか。",
        "apihelp-expandtemplates-example-simple": "ウィキテキスト <kbd><nowiki>{{Project:Sandbox}}</nowiki></kbd> を展開する。",
+       "apihelp-feedcontributions-description": "利用者の投稿記録フィードを返します。",
+       "apihelp-feedcontributions-param-feedformat": "フィードの形式。",
+       "apihelp-feedcontributions-param-user": "投稿記録を取得する利用者。",
+       "apihelp-feedcontributions-param-namespace": "この名前空間への投稿記録に絞り込む。",
+       "apihelp-feedcontributions-param-year": "この年以前。",
+       "apihelp-feedcontributions-param-month": "この月以前。",
+       "apihelp-feedcontributions-param-tagfilter": "このタグが付与された投稿記録に絞り込む。",
        "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-description": "最近の更新フィードを返します。",
+       "apihelp-feedrecentchanges-param-feedformat": "フィードの形式。",
+       "apihelp-feedrecentchanges-param-namespace": "この名前空間の結果のみに絞り込む。",
        "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-example-simple": "最近の更新を表示する。",
        "apihelp-feedrecentchanges-example-30days": "最近30日間の変更を表示する。",
+       "apihelp-feedwatchlist-description": "ウォッチリストのフィードを返します。",
+       "apihelp-feedwatchlist-param-feedformat": "フィードの形式。",
+       "apihelp-feedwatchlist-example-default": "ウォッチリストのフィードを表示する。",
        "apihelp-feedwatchlist-example-all6hrs": "ウォッチ中のページに対する過去6時間の更新をすべて表示する。",
+       "apihelp-filerevert-description": "ファイルを古い版に差し戻します。",
+       "apihelp-filerevert-param-filename": "対象のファイル名 (File: 接頭辞を含めない)。",
+       "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>)。<kbd>+</kbd> を使用して下位モジュールを指定できます。",
        "apihelp-help-example-recursive": "すべてのヘルプを1つのページに",
        "apihelp-help-example-help": "ヘルプ モジュール自身のヘルプ",
        "apihelp-help-example-query": "2つの下位モジュールのヘルプ",
+       "apihelp-imagerotate-description": "1つ以上の画像を回転させます。",
        "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-rootpage": "このページの下位ページとしてインポートする。",
-       "apihelp-import-example-import": "[[meta:Help:Parserfunctions]] をすべての履歴とともに名前空間100 にインポートする。",
+       "apihelp-import-param-interwikisource": "ウィキ間の取り込みの場合: 取り込み元のウィキ。",
+       "apihelp-import-param-interwikipage": "ウィキ間の取り込みの場合: 取り込むページ。",
+       "apihelp-import-param-fullhistory": "ウィキ間の取り込みの場合: 現在の版のみではなく完全な履歴を取り込む。",
+       "apihelp-import-param-templates": "ウィキ間の取り込みの場合: 読み込まれているテンプレートも取り込む。",
+       "apihelp-import-param-namespace": "この名前空間に取り込む。<kbd>$1rootpage</kbd>パラメータをオーバーライドします。",
+       "apihelp-import-param-rootpage": "このページの下位ページとして取り込む。<kbd>$1namespace</kbd> パラメータが入力された場合は無視されます。",
+       "apihelp-import-example-import": "[[meta:Help:Parserfunctions]] をすべての履歴とともに名前空間100に取り込む。",
        "apihelp-login-param-name": "利用者名。",
        "apihelp-login-param-password": "パスワード。",
        "apihelp-login-param-token": "最初のリクエストで取得したログイントークンです。",
        "apihelp-opensearch-param-suggest": "<var>[[mw:Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> が false の場合、何もしません。",
        "apihelp-opensearch-param-format": "出力する形式。",
        "apihelp-opensearch-example-te": "<kbd>Te</kbd> から始まるページを検索する。",
+       "apihelp-options-example-reset": "すべて初期設定に戻す。",
+       "apihelp-options-example-change": "<kbd>skin</kbd> および <kbd>hideminor</kbd> の個人設定を変更する。",
+       "apihelp-options-example-complex": "すべての個人設定を初期化し、<kbd>skin</kbd> および <kbd> nickname </kbd> を設定する。",
        "apihelp-paraminfo-description": "API モジュールに関する情報を取得します。",
        "apihelp-paraminfo-param-modules": "モジュールの名前のリスト (<var>action</var> および <var>format</var> パラメーターの値, または <kbd>main</kbd>). <kbd>+</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-patrol-description": "ページまたは版を巡回済みにします。",
        "apihelp-patrol-param-revid": "巡回済みにする版ID。",
        "apihelp-patrol-example-rcid": "最近の更新を巡回",
+       "apihelp-patrol-example-revid": "版を巡回済みにする。",
        "apihelp-protect-description": "ページの保護レベルを変更します。",
-       "apihelp-protect-param-title": "保護(解除)するページ名です。$1pageid とは同時に指定できません。",
-       "apihelp-protect-param-pageid": "保護(解除)するページIDです。$1title とは同時に指定できません。",
+       "apihelp-protect-param-title": "保護(解除)するページ名です。$1pageid とは同時に使用できません。",
+       "apihelp-protect-param-pageid": "保護(解除)するページIDです。$1title とは同時に使用できません。",
        "apihelp-protect-param-expiry": "有効期限です。タイムスタンプがひとつだけ指定された場合は、それがすべての保護に適用されます。無期限の保護を行う場合は<kbd>infinite</kbd>, <kbd>indefinite</kbd>, <kbd>infinity</kbd>, または <kbd>never</kbd> を指定します。",
        "apihelp-protect-param-reason": "保護(解除)の理由。",
        "apihelp-protect-param-watch": "指定されると、保護(解除)するページが現在の利用者のウォッチリストに追加されます。",
        "apihelp-protect-example-protect": "ページを保護する。",
        "apihelp-purge-example-simple": "ページ <kbd>Main Page</kbd> および <kbd>API</kbd> をパージする。",
        "apihelp-purge-example-generator": "標準名前空間にある最初の10ページをパージする。",
-       "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "<var>$3user</var> と同時に指定できません。",
+       "apihelp-query+allcategories-description": "すべてのカテゴリを一覧表示します。",
+       "apihelp-query+allcategories-param-from": "列挙を開始するカテゴリ。",
+       "apihelp-query+allcategories-param-to": "列挙を終了するカテゴリ。",
+       "apihelp-query+allcategories-param-prefix": "この値で始まるタイトルのカテゴリを検索します。",
+       "apihelp-query+allcategories-param-limit": "返すカテゴリの数。",
+       "apihelp-query+allcategories-example-generator": "<kbd>List</kbd> で始まるカテゴリページに関する情報を取得する。",
+       "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "<var>$3user</var> と同時に使用できません。",
+       "apihelp-query+alldeletedrevisions-param-start": "列挙の始点となるタイムスタンプ。",
+       "apihelp-query+alldeletedrevisions-param-end": "列挙の終点となるタイムスタンプ。",
+       "apihelp-query+alldeletedrevisions-param-from": "列挙の始点となるページ名。",
+       "apihelp-query+alldeletedrevisions-param-to": "列挙の終点となるページ名。",
+       "apihelp-query+alldeletedrevisions-param-prefix": "この値で始まるすべてのページ名を検索する。",
+       "apihelp-query+alldeletedrevisions-param-tag": "このタグが付与された版のみを一覧表示する。",
        "apihelp-query+alldeletedrevisions-param-user": "この利用者による版のみを一覧表示する。",
        "apihelp-query+alldeletedrevisions-param-excludeuser": "この利用者による版を一覧表示しない。",
        "apihelp-query+alldeletedrevisions-param-namespace": "この名前空間に含まれるページのみを一覧表示します。",
+       "apihelp-query+alldeletedrevisions-param-generatetitles": "ジェネレーターとして使用する場合、版IDではなくタイトルを生成します。",
+       "apihelp-query+alldeletedrevisions-example-user": "利用者 <kbd>Example</kbd> による削除された直近の50版を一覧表示する。",
        "apihelp-query+alldeletedrevisions-example-ns-main": "標準名前空間にある削除された最初の50版を一覧表示する。",
+       "apihelp-query+allfileusages-param-from": "列挙を開始するファイルのタイトル。",
+       "apihelp-query+allfileusages-param-to": "列挙を終了するファイルのタイトル。",
+       "apihelp-query+allfileusages-param-prefix": "この値で始まるすべてのファイルのタイトルを検索する。",
+       "apihelp-query+allimages-param-from": "列挙の始点となる画像タイトル。$1sort=name を指定した場合のみ使用できます。",
+       "apihelp-query+allimages-param-to": "列挙の終点となる画像タイトル。$1sort=name を指定した場合のみ使用できます。",
+       "apihelp-query+allimages-param-start": "列挙の始点となるタイムスタンプ。$1sort=timestamp を指定した場合のみ使用できます。",
+       "apihelp-query+allimages-param-end": "列挙の終点となるタイムスタンプ。$1sort=timestamp を指定した場合のみ使用できます。",
+       "apihelp-query+allimages-param-prefix": "この値で始まるすべての画像タイトルを検索する。$1sort=name を指定した場合のみ使用できます。",
+       "apihelp-query+allimages-param-user": "この利用者によりアップロードされたファイルのみを返す。$1sort=timestamp を指定した場合のみ使用できます。 $1filterbots とは同時に使用できません。",
+       "apihelp-query+allimages-param-mime": "検索対象のMIMEタイプ、たとえば <kbd>image/jpeg</kbd>。",
+       "apihelp-query+allimages-param-limit": "返す画像の総数。",
+       "apihelp-query+allimages-example-B": "<kbd>B</kbd> で始まるファイルの一覧を表示する。",
+       "apihelp-query+allimages-example-recent": "[[Special:NewFiles]] のように、最近アップロードされたファイルの一覧を表示する。",
+       "apihelp-query+allimages-example-mimetypes": "MIMEタイプが <kbd>image/png</kbd> または <kbd>image/gif</kbd> であるファイルの一覧を表示する",
+       "apihelp-query+allimages-example-generator": "<kbd>T</kbd> で始まる4つのファイルに関する情報を表示する。",
+       "apihelp-query+alllinks-description": "与えられた名前空間へのすべてのリンクを一覧表示します。",
+       "apihelp-query+alllinks-param-from": "列挙を開始するリンクのタイトル。",
+       "apihelp-query+alllinks-param-to": "列挙を終了するリンクのタイトル。",
+       "apihelp-query+alllinks-param-prefix": "この値で始まるすべてのリンクされたページを検索する。",
+       "apihelp-query+alllinks-example-B": "<kbd>B</kbd> で始まるリンクされたページ (存在しないページも含む)を、リンク元のページIDとともに表示する。",
        "apihelp-query+allmessages-param-args": "メッセージ中に展開される引数。",
        "apihelp-query+allmessages-param-filter": "この文字列を含んだ名前のメッセージのみを返す。",
        "apihelp-query+allmessages-param-customised": "変更された状態のメッセージのみを返す。",
        "apihelp-query+allmessages-param-lang": "返すメッセージの言語。",
+       "apihelp-query+allmessages-param-prefix": "この接頭辞を持つメッセージを返す。",
        "apihelp-query+allmessages-example-ipb": "<kbd>ipb-</kbd> で始まるメッセージを表示する。",
        "apihelp-query+allmessages-example-de": "ドイツ語のメッセージ <kbd>august</kbd> および <kbd>mainpage</kbd> を表示する。",
+       "apihelp-query+allpages-param-from": "列挙を開始するページ名。",
+       "apihelp-query+allpages-param-to": "列挙を終了するページ名。",
+       "apihelp-query+allpages-param-prefix": "この値で始まるすべてのページ名を検索します。",
+       "apihelp-query+allpages-param-prtype": "保護されているページに絞り込む。",
+       "apihelp-query+allpages-param-limit": "返すページの総数。",
+       "apihelp-query+allpages-example-B": "<kbd>B</kbd> で始まるページの一覧を表示する。",
+       "apihelp-query+allpages-example-generator": "<kbd>T</kbd> で始まる4つのページに関する情報を表示する。",
+       "apihelp-query+allpages-example-generator-revisions": "<kbd>Re</kbd> で始まる最初の非リダイレクトの2ページの内容を表示する。",
+       "apihelp-query+allredirects-param-from": "列挙を開始するリダイレクトのタイトル。",
+       "apihelp-query+allredirects-param-to": "列挙を終了するリダイレクトのタイトル。",
+       "apihelp-query+alltransclusions-param-prefix": "この値で始まるすべてのトランスクルードされているページを検索する。",
+       "apihelp-query+allusers-description": "すべての登録利用者を一覧表示します。",
+       "apihelp-query+allusers-param-from": "列挙を開始する利用者名。",
+       "apihelp-query+allusers-param-to": "列挙を終了する利用者名。",
+       "apihelp-query+allusers-param-prefix": "この値で始まるすべての利用者を検索する。",
+       "apihelp-query+allusers-param-group": "このグループに所属する利用者のみを結果に含める。",
+       "apihelp-query+allusers-param-excludegroup": "このグループに所属する利用者を結果から除外する。",
+       "apihelp-query+allusers-param-limit": "返す利用者名の総数。",
+       "apihelp-query+allusers-param-witheditsonly": "編集履歴のある利用者のみ一覧表示する。",
        "apihelp-query+allusers-param-activeusers": "最近 $1 {{PLURAL:$1|日間}}のアクティブな利用者のみを一覧表示する。",
        "apihelp-query+allusers-example-Y": "<kbd>Y</kbd> で始まる利用者を一覧表示する。",
+       "apihelp-query+backlinks-description": "与えられたページにリンクしているすべてのページを検索します。",
+       "apihelp-query+backlinks-param-title": "検索するページ名。<var>$1pageid</var> とは同時に使用できません。",
+       "apihelp-query+backlinks-param-pageid": "検索するページID。<var>$1title</var>とは同時に使用できません。",
        "apihelp-query+backlinks-example-simple": "<kbd>Main page<kbd> へのリンクを表示する。",
        "apihelp-query+backlinks-example-generator": "<kbd>Main page<kbd> にリンクしているページの情報を取得する。",
        "apihelp-query+blocks-description": "ブロックされた利用者とIPアドレスを一覧表示します。",
+       "apihelp-query+blocks-param-start": "列挙の始点となるタイムスタンプ。",
+       "apihelp-query+blocks-param-end": "列挙の終点となるタイムスタンプ。",
        "apihelp-query+blocks-param-ids": "一覧表示するブロックIDのリスト (任意)。",
+       "apihelp-query+blocks-param-users": "検索対象の利用者のリスト (任意)。",
        "apihelp-query+blocks-param-limit": "一覧表示するブロックの最大数。",
        "apihelp-query+blocks-example-simple": "ブロックを一覧表示する。",
        "apihelp-query+blocks-example-users": "利用者<kbd>Alice</kbd> および <kbd>Bob</kbd> のブロックを一覧表示する。",
+       "apihelp-query+categories-param-limit": "返すカテゴリの数。",
        "apihelp-query+categories-example-simple": "ページ <kbd>Albert Einstein</kbd> が属しているカテゴリの一覧を取得する。",
        "apihelp-query+categories-example-generator": "ページ <kbd>Albert Einstein</kbd> で使われているすべてのカテゴリに関する情報を取得する。",
        "apihelp-query+categoryinfo-description": "与えられたカテゴリに関する情報を返します。",
        "apihelp-query+categoryinfo-example-simple": "<kbd>Category:Foo</kbd> および <kbd>Category:Bar</kbd> に関する情報を取得する。",
+       "apihelp-query+categorymembers-description": "与えられたカテゴリ内のすべてのページを一覧表示します。",
+       "apihelp-query+categorymembers-param-title": "一覧表示するカテゴリ (必須)。<kbd>{{ns:category}}:</kbd> 接頭辞を含まなければなりません。<var>$1pageid</var> とは同時に使用できません。",
+       "apihelp-query+categorymembers-param-pageid": "一覧表示するカテゴリのページID. <var>$1title</var> とは同時に使用できません。",
        "apihelp-query+categorymembers-param-limit": "返すページの最大数。",
+       "apihelp-query+categorymembers-param-start": "列挙の始点となるタイムスタンプ。<kbd>$1sort=timestamp</kbd>を指定した場合のみ使用できます。",
+       "apihelp-query+categorymembers-param-end": "列挙の終点となるタイムスタンプ。<kbd>$1sort=timestamp</kbd>を指定した場合のみ使用できます。",
+       "apihelp-query+categorymembers-param-startsortkeyprefix": "列挙の始点となるソートキーの接頭辞。<kbd>$1sort=sortkey</kbd>を指定した場合のみ使用できます。<var>$1starthexsortkey</var>をオーバーライドします。",
        "apihelp-query+categorymembers-param-startsortkey": "代わりに $1starthexsortkey を使用してください。",
        "apihelp-query+categorymembers-param-endsortkey": "代わりに $1endhexsortkey を使用してください。",
        "apihelp-query+categorymembers-example-simple": "<kbd>Category:Physics</kbd> に含まれる最初の10ページを取得する。",
        "apihelp-query+categorymembers-example-generator": "<kbd>Category:Physics</kbd> に含まれる最初の10ページのページ情報を取得する。",
+       "apihelp-query+contributors-description": "ページへのログインした投稿者の一覧と匿名投稿者の数を取得します。",
+       "apihelp-query+contributors-param-limit": "返す投稿者の数。",
        "apihelp-query+contributors-example-simple": "<kbd>Main Page</kbd> への投稿者を表示する。",
        "apihelp-query+deletedrevisions-param-tag": "このタグが付与された版のみ表示します。",
        "apihelp-query+deletedrevisions-param-user": "この利用者による版のみを一覧表示。",
        "apihelp-query+deletedrevisions-param-limit": "一覧表示する版の最大数。",
        "apihelp-query+deletedrevisions-example-titles": "ページ <kbd>Main Page</kbd> および <kbd>Talk:Main Page</kbd> の削除された版とその内容を一覧表示する。",
        "apihelp-query+deletedrevisions-example-revids": "削除された版 <kbd>123456</kbd> に関する情報を一覧表示する。",
+       "apihelp-query+deletedrevs-param-from": "列挙の始点となるページ名。",
+       "apihelp-query+deletedrevs-param-to": "列挙の終点となるページ名。",
+       "apihelp-query+disabled-description": "このクエリ モジュールは無効化されています。",
+       "apihelp-query+embeddedin-param-title": "検索するページ名。$1pageid とは同時に使用できません。",
+       "apihelp-query+embeddedin-param-pageid": "検索するページID. $1titleとは同時に使用できません。",
+       "apihelp-query+embeddedin-example-generator": "<kbd>Template:Stub</kbd> をトランスクルードしているページに関する情報を取得する。",
+       "apihelp-query+extlinks-description": "与えられたページにあるすべての外部URL (インターウィキを除く) を返します。",
+       "apihelp-query+extlinks-param-limit": "返すリンクの数。",
+       "apihelp-query+extlinks-param-protocol": "URLのプロトコル。このパラメータが空であり、かつ<var>$1query</var> が設定されている場合, protocol は <kbd>http</kbd> となります。すべての外部リンクを一覧表示するためにはこのパラメータと <var>$1query</var> の両方を空にしてください。",
+       "apihelp-query+extlinks-example-simple": "<kbd>Main Page<kbd> の外部リンクの一覧を取得する。",
+       "apihelp-query+exturlusage-description": "与えられたURLを含むページを一覧表示します。",
+       "apihelp-query+exturlusage-example-simple": "<kbd>http://www.mediawiki.org</kbd> にリンクしているページを一覧表示する。",
        "apihelp-query+filearchive-example-simple": "削除されたファイルの一覧を表示する。",
        "apihelp-query+fileusage-example-simple": "[[:File:Example.jpg]] を使用しているページの一覧を取得する。",
        "apihelp-query+fileusage-example-generator": "[[:File:Example.jpg]] を使用しているページの情報を取得する。",
+       "apihelp-query+imageinfo-param-start": "一覧表示の始点となるタイムスタンプ。",
+       "apihelp-query+imageinfo-param-end": "一覧表示の終点となるタイムスタンプ。",
+       "apihelp-query+images-description": "与えられたページに含まれるすべてのファイルを返します。",
+       "apihelp-query+images-param-limit": "返す画像の数。",
        "apihelp-query+images-example-simple": "[[Main Page]] で使用されているファイルの一覧を取得する。",
        "apihelp-query+images-example-generator": "[[Main Page]] で使用されているファイルに関する情報を取得する。",
+       "apihelp-query+imageusage-param-title": "検索するページ名。$1pageid とは同時に使用できません。",
+       "apihelp-query+imageusage-param-pageid": "検索するページID. $1titleとは同時に使用できません。",
+       "apihelp-query+imageusage-example-simple": "[[:File:Albert Einstein Head.jpg]] を使用しているページを表示する。",
+       "apihelp-query+imageusage-example-generator": "[[:File:Albert Einstein Head.jpg]] を使用しているページに関する情報を取得する。",
        "apihelp-query+info-description": "ページの基本的な情報を取得します。",
        "apihelp-query+info-paramvalue-prop-protection": "それぞれのページの保護レベルを一覧表示する。",
        "apihelp-query+info-example-simple": "<kbd>Main Page</kbd> に関する情報を取得する。",
        "apihelp-query+iwbacklinks-example-simple": "[[wikibooks:Test]] へリンクしているページを取得する。",
        "apihelp-query+iwbacklinks-example-generator": "[[wikibooks:Test]] へリンクしているページの情報を取得する。",
+       "apihelp-query+iwlinks-param-limit": "返すウィキ間リンクの数。",
+       "apihelp-query+iwlinks-param-prefix": "この接頭辞のウィキ間リンクのみを返す。",
+       "apihelp-query+iwlinks-param-title": "検索するウィキ間リンク。<var>$1</var> と同時に使用しなければなりません。",
+       "apihelp-query+iwlinks-example-simple": "<kbd>Main Page</kbd> にあるウィキ間リンクを取得する。",
+       "apihelp-query+langbacklinks-param-lang": "言語間リンクの言語。",
+       "apihelp-query+langbacklinks-param-title": "検索する言語間リンク。$1lang と同時に使用しなければなりません。",
+       "apihelp-query+langbacklinks-param-limit": "返すページの総数。",
        "apihelp-query+langbacklinks-example-simple": "[[:fr:Test]] へリンクしているページを取得する。",
        "apihelp-query+langbacklinks-example-generator": "[[:fr:Test]] へリンクしているページの情報を取得する。",
+       "apihelp-query+langlinks-param-limit": "返す言語間リンクの数。",
+       "apihelp-query+langlinks-param-url": "完全なURLを取得するかどうか (<var>$1prop</var>とは同時に使用できません).",
+       "apihelp-query+langlinks-param-lang": "この言語コードの言語間リンクのみを返す。",
+       "apihelp-query+langlinks-param-title": "検索するリンク。<var>$1lang</var>と同時に使用しなければなりません。",
+       "apihelp-query+langlinks-example-simple": "<kbd>Main Page</kbd> にある言語間リンクを取得する。",
+       "apihelp-query+links-description": "ページからのすべてのリンクを返します。",
        "apihelp-query+links-param-namespace": "この名前空間へのリンクのみ表示する。",
        "apihelp-query+links-param-limit": "返すリンクの数。",
        "apihelp-query+links-example-simple": "<kbd>Main Page</kbd> からのリンクを取得する。",
        "apihelp-query+links-example-generator": "<kbd>Main Page</kbd> からリンクされているページに関する情報を取得する。",
        "apihelp-query+links-example-namespaces": "<kbd>Main Page</kbd> からの {{ns:user}} および {{ns:template}} 名前空間へのリンクを取得する。",
+       "apihelp-query+linkshere-example-simple": "[[Main Page]] にリンクしているページの一覧を取得する。",
+       "apihelp-query+linkshere-example-generator": "<kbd>[[Main page]]<kbd> にリンクしているページの情報を取得する。",
+       "apihelp-query+logevents-param-start": "列挙の始点となるタイムスタンプ。",
+       "apihelp-query+logevents-param-end": "列挙の終点となるタイムスタンプ。",
+       "apihelp-query+logevents-param-user": "与えられた利用者による記録項目に絞り込む。",
+       "apihelp-query+logevents-param-title": "そのページに関連する記録項目に絞り込む。",
+       "apihelp-query+logevents-param-namespace": "与えられた名前空間内の記録項目に絞り込む。",
+       "apihelp-query+logevents-param-prefix": "この接頭辞ではじまる記録項目に絞り込む。",
+       "apihelp-query+logevents-param-tag": "このタグが付与された記録項目のみ表示する。",
+       "apihelp-query+logevents-param-limit": "返す記録項目の総数。",
+       "apihelp-query+logevents-example-simple": "最近の記録項目を一覧表示する。",
+       "apihelp-query+pagepropnames-description": "Wiki内で使用されているすべてのページプロパティ名を一覧表示します。",
+       "apihelp-query+pagepropnames-param-limit": "返す名前の最大数。",
+       "apihelp-query+pagepropnames-example-simple": "最初の10個のプロパティ名を取得する。",
+       "apihelp-query+pageprops-example-simple": "<kbd>Category:Foo</kbd> のプロパティを取得する。",
+       "apihelp-query+pageswithprop-description": "与えられたページプロパティが使用されているすべてのページを一覧表示します。",
+       "apihelp-query+pageswithprop-param-limit": "返すページの最大数。",
+       "apihelp-query+pageswithprop-example-simple": "<code>&#123;&#123;DISPLAYTITLE:&#125;&#125;</code> を使用している最初の10ページを一覧表示する。",
+       "apihelp-query+pageswithprop-example-generator": "Get page info about first 10 pages using <code>_&#95;NOTOC_&#95;</code> を使用している最初の10ページのページ情報を取得する。",
+       "apihelp-query+prefixsearch-description": "ページ名の先頭一致検索を行います。",
+       "apihelp-query+prefixsearch-param-search": "検索文字列。",
+       "apihelp-query+prefixsearch-param-namespace": "検索する名前空間。",
+       "apihelp-query+prefixsearch-param-limit": "返す結果の最大数。",
+       "apihelp-query+prefixsearch-example-simple": "<kbd>meaning</kbd> で始まるページ名を検索する。",
+       "apihelp-query+protectedtitles-description": "作成保護が掛けられているページを一覧表示します。",
+       "apihelp-query+protectedtitles-param-namespace": "この名前空間に含まれるページのみを一覧表示します。",
+       "apihelp-query+protectedtitles-param-level": "この保護レベルのページのみを一覧表示します。",
+       "apihelp-query+protectedtitles-param-limit": "返すページの総数。",
+       "apihelp-query+protectedtitles-param-start": "一覧表示の始点となる保護タイムスタンプ。",
+       "apihelp-query+protectedtitles-param-end": "一覧表示の終点となる保護タイムスタンプ。",
+       "apihelp-query+protectedtitles-example-simple": "保護されているページを一覧表示する。",
+       "apihelp-query+protectedtitles-example-generator": "標準名前空間にある保護されたページへのリンクを検索する。",
+       "apihelp-query+querypage-param-page": "特別ページの名前です。これは大文字小文字を区別することに注意。",
+       "apihelp-query+querypage-param-limit": "返す結果の数。",
+       "apihelp-query+querypage-example-ancientpages": "[[Special:Ancientpages]] の結果を返す。",
+       "apihelp-query+random-param-namespace": "この名前空間にあるページのみを返します。",
+       "apihelp-query+random-example-simple": "標準名前空間から2つのページを無作為に返す。",
+       "apihelp-query+random-example-generator": "標準名前空間から無作為に選ばれた2つのページのページ情報を返す。",
+       "apihelp-query+recentchanges-description": "最近の更新を一覧表示します。",
+       "apihelp-query+recentchanges-param-start": "列挙の始点となるタイムスタンプ。",
+       "apihelp-query+recentchanges-param-end": "列挙の終点となるタイムスタンプ。",
+       "apihelp-query+recentchanges-param-namespace": "この名前空間の変更のみに絞り込む。",
+       "apihelp-query+recentchanges-param-user": "この利用者による変更のみを一覧表示する。",
+       "apihelp-query+recentchanges-param-excludeuser": "この利用者による変更を一覧表示しない。",
+       "apihelp-query+recentchanges-param-tag": "このタグが付与された版のみ一覧表示する。",
+       "apihelp-query+recentchanges-param-limit": "返す変更の総数。",
+       "apihelp-query+recentchanges-param-toponly": "最新の版である変更のみを一覧表示する。",
+       "apihelp-query+recentchanges-example-simple": "最近の更新を一覧表示する。",
+       "apihelp-query+redirects-description": "ページへのすべての転送を返します。",
+       "apihelp-query+redirects-param-limit": "返す転送の数。",
+       "apihelp-query+redirects-example-simple": "[[Main Page]] への転送の一覧を取得する。",
+       "apihelp-query+redirects-example-generator": "[[Main Page]] へのすべての転送ページに関する情報を取得する。",
+       "apihelp-query+revisions-param-user": "この利用者による版のみを結果に含める。",
+       "apihelp-query+revisions-param-excludeuser": "この利用者による版を結果に含めない。",
+       "apihelp-query+revisions-param-tag": "このタグが付与された版のみを一覧表示する。",
+       "apihelp-query+revisions-example-content": "ページ<kbd>API</kbd> および <kbd>Main Page</kbd> の最新の版のデータと本文を取得する。",
+       "apihelp-query+revisions-example-last5": "<kbd>Main Page</kbd> の直近の5版を取得する。",
+       "apihelp-query+revisions-example-first5": "<kbd>Main Page</kbd> の最初の5版を取得する。",
+       "apihelp-query+revisions-example-first5-after": "<kbd>Main Page</kbd> の 2006-05-01 以降の最初の5版を取得する。",
+       "apihelp-query+revisions-example-first5-not-localhost": "<kbd>Main Page</kbd> の匿名利用者 <kbd>127.0.0.1</kbd> 以外による最初の5版を取得する。",
+       "apihelp-query+revisions-example-first5-user": "<kbd>Main Page</kbd> の <kbd>MediaWiki default</kbd> による最初の5版を取得する。",
+       "apihelp-query+search-description": "全文検索を行います。",
+       "apihelp-query+search-param-search": "この値を含むすべてのページ名 (または本文) を検索します。",
+       "apihelp-query+search-param-namespace": "この名前空間内のみを検索します。",
+       "apihelp-query+search-param-what": "実行する検索の種類です。",
+       "apihelp-query+search-param-limit": "返すページの総数です。",
+       "apihelp-query+search-example-simple": "<kbd>meaning</kbd> を検索する。",
+       "apihelp-query+search-example-generator": "<kbd>meaning</kbd> の検索で返されたページのページ情報を取得する。",
+       "apihelp-query+tags-description": "変更タグを一覧表示します。",
+       "apihelp-query+tags-param-limit": "一覧表示するタグの最大数。",
+       "apihelp-query+tags-example-simple": "利用可能なタグを一覧表示する。",
+       "apihelp-query+templates-description": "与えられたページでトランスクルードされているすべてのページを返します。",
+       "apihelp-query+templates-param-namespace": "この名前空間のテンプレートのみ表示する。",
+       "apihelp-query+templates-param-limit": "返すテンプレートの数。",
+       "apihelp-query+templates-example-simple": "<kbd>Main Page</kbd> で使用されているテンプレートを取得する。",
+       "apihelp-query+templates-example-generator": "<kbd>Main Page</kbd> で使用されているテンプレートに関する情報を取得する。",
+       "apihelp-query+templates-example-namespaces": "<kbd>Main Page</kbd> でトランスクルードされている {{ns:user}} および {{ns:template}} 名前空間のページを取得する。",
+       "apihelp-query+tokens-description": "データ変更操作用のトークンを取得します。",
+       "apihelp-query+tokens-param-type": "リクエストするトークンの種類。",
+       "apihelp-query+tokens-example-simple": "csrfトークンを取得する (既定)。",
+       "apihelp-query+tokens-example-types": "ウォッチトークンおよび巡回トークンを取得する。",
+       "apihelp-query+transcludedin-description": "与えられたページをトランスクルードしているすべてのページを検索します。",
+       "apihelp-query+transcludedin-example-simple": "<kbd>Main Page</kbd> をトランスクルードしているページの一覧を取得する。",
+       "apihelp-query+transcludedin-example-generator": "<kbd>Main Page</kbd> をトランスクルードしているページに関する情報を取得する。",
+       "apihelp-query+usercontribs-description": "利用者によるすべての編集を取得します。",
+       "apihelp-query+usercontribs-param-limit": "返す投稿記録の最大数。",
+       "apihelp-query+usercontribs-param-user": "投稿記録を取得する利用者。",
+       "apihelp-query+usercontribs-param-userprefix": "この値で始まる名前のすべての利用者の投稿記録を取得します。$1user をオーバーライドします。",
+       "apihelp-query+usercontribs-param-namespace": "この名前空間への投稿記録のみを一覧表示する。",
+       "apihelp-query+usercontribs-param-tag": "このタグが付与された版のみを一覧表示する。",
+       "apihelp-query+usercontribs-param-toponly": "最新の版である変更のみを一覧表示する。",
+       "apihelp-query+usercontribs-example-user": "利用者 <kbd>Example</kbd> の投稿記録を表示する。",
+       "apihelp-query+users-param-token": "代わりに <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd> を使用してください。",
+       "apihelp-query+users-example-simple": "利用者 <kbd>Example</kbd> の情報を返す。",
+       "apihelp-query+watchlist-description": "現在の利用者のウォッチリストにあるページへの最近の更新を取得します。",
+       "apihelp-query+watchlist-param-start": "列挙の始点となるタイムスタンプ。",
+       "apihelp-query+watchlist-param-end": "列挙の終点となるタイムスタンプ。",
+       "apihelp-query+watchlist-param-namespace": "この名前空間の変更のみに絞り込む。",
+       "apihelp-query+watchlist-param-user": "この利用者による変更のみを一覧表示する。",
+       "apihelp-query+watchlist-param-excludeuser": "この利用者による変更を一覧表示しない。",
+       "apihelp-query+watchlistraw-description": "現在の利用者のウォッチリストにあるすべてのページを取得します。",
+       "apihelp-query+watchlistraw-param-namespace": "この名前空間に含まれるページのみを一覧表示します。",
        "apihelp-revisiondelete-description": "版の削除および復元を行います。",
        "apihelp-revisiondelete-param-reason": "削除または復元の理由。",
        "apihelp-revisiondelete-example-revision": "<kbd>Main Page</kbd> の版 <kbd>12345</kbd> の本文を隠す。",
        "apihelp-rollback-param-title": "巻き戻すページ名です。<var>$1pageid</var> とは同時に使用できません。",
        "apihelp-rollback-param-pageid": "巻き戻すページのページIDです。<var>$1title</var> とは同時に使用できません。",
+       "apihelp-rollback-example-simple": "利用者 <kbd>Example</kbd> による <kbd>Main Page</kbd> への最後の一連の編集を巻き戻す。",
+       "apihelp-tag-param-reason": "変更の理由。",
+       "apihelp-tag-example-log": "<kbd>Wrongly applied</kbd> という理由で <kbd>spam</kbd> タグを 記録項目ID 123 から取り除く",
+       "apihelp-tokens-param-type": "リクエストするトークンの種類。",
+       "apihelp-tokens-example-edit": "編集トークンを取得する (既定)。",
        "apihelp-unblock-description": "利用者のブロックを解除します。",
        "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-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-timestamps": "復元する版のタイムスタンプ。<var>$1timestamps</var> と <var>$1fileids</var> の両方が空の場合、すべての版が復元されます。",
        "apihelp-undelete-example-page": "<kbd>Main Page</kbd> を復元する。",
        "apihelp-undelete-example-revisions": "<kbd>Main Page</kbd> の2つの版を復元する。",
+       "apihelp-upload-param-watch": "このページをウォッチする。",
+       "apihelp-upload-param-ignorewarnings": "あらゆる警告を無視する。",
+       "apihelp-userrights-param-user": "利用者名。",
+       "apihelp-userrights-param-userid": "利用者ID。",
+       "apihelp-userrights-param-add": "利用者をこのグループに追加します。",
+       "apihelp-userrights-param-reason": "変更の理由。",
+       "apihelp-watch-example-watch": "<kbd>Main Page</kbd> をウォッチする。",
+       "apihelp-watch-example-unwatch": "<kbd>Main Page</kbd> のウォッチを解除する。",
        "apihelp-format-example-generic": "クエリの結果を $1 形式に整形します",
        "apihelp-dbg-description": "データを PHP の <code>var_export()</code> 形式で出力します。",
        "apihelp-dbgfm-description": "データを PHP の <code>var_export()</code> 形式 (HTML に埋め込んだ形式) で出力します。",
index 99e7897..8a6769d 100644 (file)
        "apihelp-block-param-anononly": "Bloß de nahmelohse Metmaaacher spärre, alsu donn et nahmelohse Beärbeide vun dä <i lang=\"en\" xml:lang=\"en\" title=\"Internet Protocol\">IP</i>-Addräß uß verhendere.",
        "apihelp-block-param-nocreate": "Et Neu-Aanmelde verbeede",
        "apihelp-block-param-autoblock": "Dun automattesch de läzde <i lang=\"en\" xml:lang=\"en\">IP</i>-Adräß schpärre, di dä Metmaacher jehatt hät, un och all di <i lang=\"en\" xml:lang=\"en\">IP</i>-Adräße, vun wo dä versöhk, jet ze ändere.",
+       "apihelp-block-param-noemail": "Sorresch derför, dat dä Metmaacher \n<i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„de eläktrohnesche Poß“\">e-mail</i> övver et Wiki verscheck. Bruch et Rääsch „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">blockemail</code>“.",
+       "apihelp-block-param-hidename": "Donn däm Metmaacher singe Nahme em Logbohch vum Metmaacher Schpärre verschteische. Bruch et Rääsch „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">hideuser</code>“.",
+       "apihelp-block-param-allowusertalk": "Lohß dä Metmaacher sing eije Klaafsigg verändere. Dat hängk aan „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[mw:Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>“.",
        "apihelp-block-param-reblock": "Wann dä Metmaacher als jeschpächd es, donn dat övverschrihve.",
        "apihelp-block-param-watchuser": "Donn de Metmaachersigg un de Klaafsigg dohzoh op mig Oppaßleß säze.",
        "apihelp-block-example-ip-simple": "Donn de <i lang=\"en\" xmL:lang=\"en\" title=\"Internet Protocol\">IP</i>-Addräß <kbd>192.0.2.5</kbd> för drei ääsch schpärre mem Jrond: <kbd>Eestschlaach</kbd>.",
+       "apihelp-checktoken-param-type": "De Zoot Makehrong zom Pröhfe.",
        "apihelp-checktoken-param-token": "De Makehrong zom Pröhve.",
+       "apihelp-checktoken-param-maxtokenage": "Et jrühßte zojelohße Allder fun dä Makehrong en Sekonde.",
+       "apihelp-checktoken-example-simple": "Pröhf de Jöltechkeit vun dä Makehrong „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">csrf</kbd>“.",
+       "apihelp-clearhasmsg-description": "Nemmp de Makehrong „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">hasmsg</code>“ fott vum aktoälle Metmaacher.",
+       "apihelp-clearhasmsg-example-1": "Nemm de Makehrong „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">hasmsg</code>“ fott vum aktoälle Metmaacher.",
        "apihelp-compare-description": "Donn de Ongerscheide zwesche zwai Sigge beschtemme.\n\nDo moß derför jeweils en Väsjohn, en Övverschreff för di Sigg, odder ener Sigg iehr Kännong aanjävve, för de beide Sigge.",
        "apihelp-compare-param-fromtitle": "Der Tettel vun dä eezte Sigg zom verjlihsche.",
        "apihelp-compare-param-fromid": "De Kännong vun dä eezte Sigg zom verjlihsche.",
@@ -43,6 +51,9 @@
        "apihelp-createaccount-example-pass": "Lääsch dä Metmaacher <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">testuser</kbd> aan, mem Paßwood <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">test123</kbd>.",
        "apihelp-createaccount-example-mail": "Lääsch dä Metmaacher <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">testmailuser</kbd> aan med emem zohfällesch ußjewörfelte Paßwoot un schegg_em dat övver de <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\">e-mail</i>.",
        "apihelp-delete-description": "Schmieß en Sigg fott.",
+       "apihelp-delete-param-title": "De Övverschreff vun dä Sigg zom fottschmiiße. Kam_mer nit zersamme met „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1pageid</var>“ bruche.",
+       "apihelp-delete-param-pageid": "De Kännong vun dä Sigg zom fottschmiiße. Kam_mer nit zersamme met „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1title</var>“ bruche.",
+       "apihelp-delete-param-reason": "Der Jrond för et Fottschmiiße. Wann dä nit aanjejovve es, weed ene automattesch usjräschnete Jrond jenumme.",
        "apihelp-delete-param-watch": "Donn di Sigg en däm aktoälle Metmaacher sing Oppaßleß opnämme.",
        "apihelp-delete-param-unwatch": "Schmihß di Sigg us däm aktoälle Metmaacher singe Oppaßless erus.",
        "apihelp-delete-param-oldimage": "Der Nahme vom ahle Beld zom fottschmiiße, wi hä vun [[Special:ApiHelp/query+imageinfo|action=query&prop=imageinfo&iiprop=archivename]] kütt.",
@@ -83,6 +94,7 @@
        "apihelp-expandtemplates-description": "Deiht alle Schablohne en Wikkitäx ömsäze.",
        "apihelp-expandtemplates-param-title": "De Övverschreff vun dä Sigg.",
        "apihelp-expandtemplates-param-text": "Dä Wikitäx zom ömwandelle.",
+       "apihelp-expandtemplates-param-revid": "De Kännong vun dä Väsjohn, för \n„<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\"><nowiki>{{REVISIONID}}</nowiki></code>“ un verwandte Wääte.",
        "apihelp-expandtemplates-param-includecomments": "Ov Aanmärkonge em <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"HyperText Markup Language\">HTML</i>-Fommaht med ußjejovve wähde sulle.",
        "apihelp-expandtemplates-param-generatexml": "Donn ene Boum vum <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Extensible Markup Language\">XML</i>-Paaser opboue. Es dorsch „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1prop=parsetree</code>“ ässäz.",
        "apihelp-feedcontributions-description": "Jidd ene Kannahl met de Beidräsch vun enem Metmaacher uß.",
        "apihelp-filerevert-description": "Säz en Dattei obb en ahle Väsohn zerök.",
        "apihelp-filerevert-param-filename": "De Zih_Dattei, der ohne „{{ne:file}}“ derför.",
        "apihelp-filerevert-param-comment": "Aanmärkong huh lahde.",
+       "apihelp-filerevert-param-archivename": "Dä nahme vum Aschihv vun dä Väsjohn för wider drop zerök ze jon.",
        "apihelp-filerevert-example-revert": "Donn <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Wiki.png</kbd> op di Väsohn vum <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">2011-03-05T15:27:40Z</kbd> zerök säze.",
        "apihelp-help-description": "zeisch Hölp för de aanjejovve Moduhle.",
        "apihelp-help-param-submodules": "Donn Hölp för de Ongermoduhle vun dämm aanjejovve Moduhl enschschlehße.",
        "apihelp-import-param-interwikipage": "För et Empottehre us enem andere Wikki: De Sigg zom Empottehre.",
        "apihelp-import-param-fullhistory": "För et Empottehre us enem andere Wikki: Donn de jannze Verjangeheid empottehre, nit blohß de aktoälle Väsjohn.",
        "apihelp-import-param-templates": "För et Empottehre us enem andere Wikki: Donn all de nühdejje Schablohne met empottehre.",
-       "apihelp-import-param-namespace": "För et Empottehre us enem andere Wikki: Donn ene heh dat Appachtemang empottehre.",
-       "apihelp-import-param-rootpage": "Als Ongersiff vun heh dä Sigg empottehre-",
+       "apihelp-import-param-namespace": "En heh dat Appachtemang emmpotehre. Övverjangk der Parramehter „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1rootpage</kbd>“ derbei.",
+       "apihelp-import-param-rootpage": "Als Ongersigg vun heh dä Sigg empottehre. Weed ävver övverjange, wann dä der Parramehter „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1namespace</kbd>“ derbei aanjejovve es.",
        "apihelp-import-example-import": "Donn di Sigg „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[meta:Help:Parserfunctions]]</code>“ en et Appachtemang 100 empottehre, met alle älldere Väsjohne.",
        "apihelp-login-param-name": "Metmaacher_Nahme.",
        "apihelp-login-param-password": "Paßwoot.",
        "apihelp-login-param-domain": "De Domaijn (kann fott bliehve)",
        "apihelp-login-example-login": "Enlogge.",
+       "apihelp-logout-description": "Donn ußlogge un maach de Dahte övver de Sezong fott.",
        "apihelp-logout-example-logout": "Donn dä aktoälle Metmaacher ußlogge.",
+       "apihelp-managetags-param-reason": "Ene Jrond för et Aanlähje, Fottschmiiße, Aanschallde un Ußschallde vun dä Makehrong, dä mer ävver nit aanjävve moß.",
        "apihelp-managetags-param-ignorewarnings": "Ov alle Warnonge övverjange wöhde sull, die bei dämm Opdracht opkumme.",
        "apihelp-managetags-example-create": "Donn en Makkehrong aanlähje 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-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-opensearch-param-search": "Noh wat söhke?",
        "apihelp-opensearch-param-limit": "De hühßte Aanzahl vun Äjeebnesse för zeröck ze jävve",
        "apihelp-opensearch-param-namespace": "En wällschem Appachtemang söhke.",
+       "apihelp-opensearch-param-suggest": "Don nix wann „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[mw:Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var>“ op „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">false</code>“ jesaz es.",
        "apihelp-opensearch-param-redirects": "Wi met Ömleidonge ömjonn?\n;return:Jivv de Ömleidonge sällver uß.\n;resolve:Jiff de Sigg uß, woh de Ömleidong hen jeiht. Dat künnt winnijer wi „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1limit</code>“ Sigge ußjävve.\nTradizonäll es dä Schtandatt „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">return</code>“ för „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1format=json</code>“ un „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">resolve</code>“ för alle anndere.",
        "apihelp-opensearch-param-format": "Et Fommaht zom Ußjävve.",
        "apihelp-opensearch-example-te": "Fengk Sigge, di met <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Te</kbd> aanfange.",
        "apihelp-paraminfo-param-formatmodules": "Leß met de Nahme vun de Moduhle zom Fommatehre (Wäät vum „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">format</var>“-Parramehter). Nemm schtatt dämm „<varlang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1modules</var>“.",
        "apihelp-paraminfo-example-1": "Zisch Aanjahbe övver <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[Special:ApiHelp/parse|action=parse]]</kbd>, <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[Special:ApiHelp/jsonfm|format=jsonfm]]</kbd>, <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[Special:ApiHelp/query+allpages|action=query&list=allpages]]</kbd>, un <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd>.",
        "apihelp-parse-param-summary": "De Zersammefaßong för ze pahse.",
+       "apihelp-parse-param-prop": "Wat för en schtöcker aan Ennfommazjuhne holle:",
+       "apihelp-parse-paramvalue-prop-text": "Jitt dä jepahßde Täx vum Wikkitäx uß.",
+       "apihelp-parse-paramvalue-prop-langlinks": "Jitt de Schprohche-Lengks em jepahßde Wikkitäx uß.",
+       "apihelp-parse-paramvalue-prop-categories": "Jitt de Saachjroppe em jepahßde Wikkitäx uß.",
+       "apihelp-parse-paramvalue-prop-categorieshtml": "Jitt de <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"HyperText Markup Language\">HTML</i>-Fazung vun de Saachjroppe us.",
+       "apihelp-parse-paramvalue-prop-links": "Jitt de entärne Lengks em jepahßde Wikkitäx uß.",
+       "apihelp-parse-paramvalue-prop-templates": "Jitt de Schablohne em jepahßde Wikkitäx uß.",
+       "apihelp-parse-paramvalue-prop-images": "Jitt de Belder em jepahßde Wikkitäx uß.",
+       "apihelp-parse-paramvalue-prop-externallinks": "Jitt de Lengks, di noh ußerhallev vum Wikki jonn, em jepahßde Wikkitäx uß.",
+       "apihelp-parse-paramvalue-prop-sections": "Jitt de Affschnedde em jepahßde Wikkitäx uß.",
+       "apihelp-parse-paramvalue-prop-revid": "Deiht de Kännong vun de Väsjohn vun dä jepahßde Sigg derbei.",
+       "apihelp-parse-paramvalue-prop-displaytitle": "Deiht de Övverschreff vum jepahßde Wikkitäx derbei.",
+       "apihelp-parse-paramvalue-prop-modules": "Jitt dem <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Delivery system in MediaWiki for the optimized run-time loading and managing of modules\">ResourceLoader</i> sing Moduhle uß, di en dä Sigg jebruch wähde.",
+       "apihelp-parse-paramvalue-prop-iwlinks": "Jitt de Engewikkilengks em jepahßde Wikkitäx uß.",
+       "apihelp-parse-paramvalue-prop-wikitext": "Jitt de der ojinahl Wikkitäx us, dä jepahß woode es.",
+       "apihelp-parse-paramvalue-prop-properties": "Jitt devärse Eijeschafte uß, di em jepahßde Wikkitäx faßjelaat woode sen.",
        "apihelp-parse-param-section": "Holl blohß dann der Ennhalld vun däm Affschnett met dä Nommer, udder wann „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">new</kbd>“ enjejovve es, maach ene neu Affschnett derbei.",
        "apihelp-parse-param-sectiontitle": "De Övverschreff för dä neuje Afschnet, wann <var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">section</var> = <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">new</kbd> es.\n\nAnders wi beim Beärbeide vun dä Sigg weed dä Parramehter nit dorsch de <var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">summary</var> ußjetuusch, wann hä fottjelohße udder läddesch es.",
        "apihelp-parse-param-disabletoc": "Donn et Ennhaldsverzeijscheneß en de Ußjahbe vottlohze.",
        "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-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-param-list": "Wat för en Leßte holle.",
        "apihelp-query-param-meta": "Wat för en Matta_Dahte ze holle.",
        "apihelp-query+allcategories-description": "Alle Saachjroppe opzälle.",
        "apihelp-query+allcategories-param-to": "De Saachjropp, bes woh hen opzälle.",
        "apihelp-query+allcategories-param-dir": "De Reijefollsch zum Zotehre.",
        "apihelp-query+allcategories-param-limit": "Wi vell Saachjroppe ußjävve?",
-       "apihelp-query+allcategories-param-prop": "Which properties to get:\n;size:Adds number of pages in the category.\n;hidden:Tags categories that are hidden with _&#95;HIDDENCAT_&#95;.\n<!-- \nhttps://translatewiki.net/wiki/Thread:Support/About_MediaWiki:Apihelp-query%2Ballcategories-param-prop/ksh\n-->",
+       "apihelp-query+allcategories-param-prop": "Wat för en Eijeschaffte holle: \n;size:Deiht de Aanzahl Sigge en dä Saachjropp derbei.\n;hidden:Makehrt de veschtoche Sachjroppe met „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">_&#95;HIDDENCAT_&#95;</code>“.",
        "apihelp-query+alldeletedrevisions-description": "Donn alle fottjeschmeße Väsjohne vun enem Metmaacher udder en enem Appachemang opleßte.",
        "apihelp-query+alldeletedrevisions-paraminfo-useronly": "Kam_mer blohß met <var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$3user</var> bruche.",
        "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "Kam_mer nit met <var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$3user</var> bruche.",
        "apihelp-query+allfileusages-param-to": "De Övverschreff vun dä Dattei, woh de Leß medd ophühre sull.",
        "apihelp-query+allfileusages-param-prefix": "Söhk noh alle Övverschreffte, di met heh däm Täx aanfange.",
        "apihelp-query+allfileusages-param-unique": "Donn blohß ongerscheidlijje Övverschreffte vun Datteije aanzeije. Kammer nit zesamme met „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1prop=ids<code>“ bruche.\nWann als ene  Jenerahtor enjesaz, bräng Zihlsigge un kein Kwällsigge.",
-       "apihelp-query+allfileusages-param-prop": "Which pieces of information to include:\n;ids:Adds the page ID of the using page (cannot be used with $1unique).\n;title:Adds the title of the file.\n<!-- \nhttps://translatewiki.net/wiki/Thread:Support/About_MediaWiki:Apihelp-query%2Ballfileusages-param-prop/ksh\n-->",
+       "apihelp-query+allfileusages-param-prop": "Wat för en Aanjahbe ennschlehße:\n;ids:Deiht de Kännonge vun dä Sigge derbei, di dat bruche. Kam_mer nit zersamme met „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1unique</code>“ bruche.\n;title:Deiht dä Dattei ehr Övverschreff derbei.",
        "apihelp-query+allfileusages-param-limit": "Wi vill sulle överhoup aanjezeisch wähde?",
        "apihelp-query+allfileusages-param-dir": "En wälsche Reijefollsch?",
        "apihelp-query+allfileusages-example-B": "Donn Övverschreffte vun Datteije aanzeije, och vun Datteije, di (noch) nit doh sin, zesame met dä Kännonge vun dä Sigge, woh se vun sin, aanjevange vun <kbd>B</kbd>.",
        "apihelp-query+allimages-description": "Donn alle Bellder der Reih noh opzälle.",
        "apihelp-query+allimages-param-sort": "De Eijeschavv öm dernoh ze zottehre.",
        "apihelp-query+allimages-param-dir": "En wälsche Reijefollsch?",
+       "apihelp-query+allimages-param-minsize": "Bejränz op Sigge met winneschßdens esu vill Bytes dren.",
+       "apihelp-query+allimages-param-maxsize": "Bejränz op Sigge met hüüschßdens esu vill Bytes dren.",
+       "apihelp-query+allimages-param-sha1": "Dam Bld sing <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"secure hash algorithm\">SHA-1</i>-Pröhvsomm. Övverjeiht „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1sha1base36</code>“.",
+       "apihelp-query+allimages-param-sha1base36": "Däm Beld sing <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"secure hash algorithm\">SHA-1</i>-Pröhvsomm op dä bahses 36. Weed em Mehdiajwikki jebruch.",
+       "apihelp-query+allimages-param-user": "Jiv blohß de Datteije uß, di vun heh däm Metmaacher huh jelahde wohde sin. Kam_mer blohß met „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1sort=timestamp</code>“ bruche.  Kam_mer nit met „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1filterbots</code>“ zersamme bruche.",
        "apihelp-query+allimages-param-limit": "Wi vell Bellder ennsjesamp ußjävve.",
+       "apihelp-query+allimages-example-B": "Zeisch en Leß met Sigge un bejenn mem Bohchschtabe <kbd>B</kbd>.",
        "apihelp-query+allimages-example-generator": "Zeisch Aanjahbe övver veer Bellder un bejenn mem Bohchschtabe <kbd>T</kbd>.",
        "apihelp-query+alllinks-description": "Donn alle Lengk opzälle, di en e beschtemmpt Appachtemang jonn.",
        "apihelp-query+alllinks-param-from": "De Övverschreff vun däm Lengk, woh de Leß medd aanfange sull.",
        "apihelp-query+alllinks-param-namespace": "Dat Appachtemang zom opzälle.",
        "apihelp-query+alllinks-param-limit": "Wi vill sulle överhoup aanjezeisch wähde?",
        "apihelp-query+alllinks-param-dir": "En wälsche Reijefollsch?",
+       "apihelp-query+alllinks-example-B": "Donn Övverschreffte aanzeije, woh Lengks drop jonnn, och di (noch) nit doh sin, zesame met dä Kännonge vun dä Sigge, woh se vun sin, aanjevange vun <kbd>B</kbd>.",
        "apihelp-query+alllinks-example-unique": "Leß ongerscheidlejje verlengk Övverschreffte.",
+       "apihelp-query+alllinks-example-unique-generator": "Hollt alle Övverschreffte, woh Lengks drop jonnn un makehr di (noch) nit doh sin.",
        "apihelp-query+alllinks-example-generator": "Holl Sigge, di di Lengks änthallde.",
        "apihelp-query+allmessages-description": "Donn em Wikki sing Täxte un Nohreescht ußjävve.",
+       "apihelp-query+allmessages-param-messages": "Wat för en Täxte un Nohreeschte usjävve. Der Schtandatt „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">*</kbd>“ bedügg alle Täxte un Nohreeschte.",
        "apihelp-query+allmessages-param-prop": "Wat för en Eijeschaffte holle.",
+       "apihelp-query+allmessages-param-nocontent": "Wann dat ennjeschalld es, donn dä ennhalt vun de Täxte un Nohreeschte nit medd ußjävve.",
        "apihelp-query+allmessages-param-args": "De Parramehtere för en dä Täx udder en di Nohreesch enzeföhje.",
        "apihelp-query+allmessages-param-filter": "Jiv blohß de Täxte un Nohreesche uß, woh heh dat Täxschtöck dren änthallde es.",
        "apihelp-query+allmessages-param-customised": "Jiv bloß de Täxte un Nohreesche en heh däm Zohschtand uß.",
        "apihelp-query+blocks-param-start": "Et Dattom un de Zigg vun woh aff opjezallt wähde sull.",
        "apihelp-query+blocks-param-end": "Et Dattom un de Zigg bes woh hen opjezallt wähde sull.",
        "apihelp-query+blocks-param-limit": "De hühßde Aanzahl Spärre zom opleste.",
-       "apihelp-query+blocks-param-prop": "Which properties to get:\n;id:Adds the ID of the block.\n;user:Adds the username of the blocked user.\n;userid:Adds the user ID of the blocked user.\n;by:Adds the username of the blocking user.\n;byid:Adds the user ID of the blocking user.\n;timestamp:Adds the timestamp of when the block was given.\n;expiry:Adds the timestamp of when the block expires.\n;reason:Adds the reason given for the block.\n;range:Adds the range of IP addresses affected by the block.\n;flags:Tags the ban with (autoblock, anononly, etc.).\n<!-- \nhttps://translatewiki.net/wiki/Thread:Support/About_MediaWiki:Apihelp-query%2Bblocks-param-prop/ksh\n-->",
+       "apihelp-query+blocks-param-prop": "Wat för en Eijeschaffte holle:\n;id:Deiht dä Spärr iehr Kännonge derbei.\n;user:Deiht dä Nahme vom jeschpächte Metmaacher derbei.\n;userid:Deiht de Kännong vum jeschpächte Metmaacher derbei.\n;by:Deiht dä Nahme vun däm Metmaacher derbei, dä jeschpächt hät.\n;byid:Deiht de Kännong vun däm Metmaacher derbei, dä jeschpächt hät.\n;timestamp:Deihd et Dattum un de Uhrzigg derbei, wann jeschpächt wood.\n;expiry:Deihd et Dattum un de Uhrzigg derbei, wann di Schparr eröm es.\n;reason:Deiht der Jrond för di Schparr derbei.\n;range:Deiht dä Berätt vun <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Internet Protocol\">IP</i>-Adräße för di Schparr derbei.\n;flags:makkehrt di Spärr met „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">autoblock</code>“, „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">anononly</code>“, un esu.",
        "apihelp-query+blocks-example-simple": "Schpärre opleßte.",
        "apihelp-query+blocks-example-users": "Donn de Schpärre vun dä Metmaacher <lang=\"en\" xml:lang=\"en\" dir=\"ltr\" kbd>Alice</kbd> un <lang=\"en\" xml:lang=\"en\" dir=\"ltr\" kbd>Bob</kbd> opleßte.",
        "apihelp-query+categories-description": "Donn alle Saachjroppe epleßte, woh di Sigge dren sin.",
-       "apihelp-query+categories-param-prop": "Which additional properties to get for each category:\n;sortkey:Adds the sortkey (hexadecimal string) and sortkey prefix (human-readable part) for the category.\n;timestamp:Adds timestamp of when the category was added.\n;hidden:Tags categories that are hidden with _&#95;HIDDENCAT_&#95;.\n<!-- \nhttps://translatewiki.net/wiki/Thread:Support/About_MediaWiki:Apihelp-query%2Bcategories-param-prop/ksh\n-->",
+       "apihelp-query+categories-param-prop": "Wat för en zohsäzlejje Eijeschaffte holle för jehde Saachjropp:\n;sortkey:Deiht dä Schlößel zom Zottehre vun dä Saachjropp derbei, en lange häxadezimahle Zahl, un der Schlößelvörsaz, woh ene Minsch jät med aanfange kann.\n;timestamp:Deihd en Dattom un en Zigg derbei, wann di Sachjrobb aanjelaat woode es.\n;hidden:Makehrt de veschtoche Sachjroppe met „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">_&#95;HIDDENCAT_&#95;</code>“.",
        "apihelp-query+categories-param-show": "Wat för en Zoot Saachjroppe zeije.",
        "apihelp-query+categories-param-limit": "Wi vell Saachjroppe ußjävve?",
        "apihelp-query+categories-param-dir": "En wälsche Reijefollsch?",
        "apihelp-query+deletedrevisions-param-limit": "De hühßde Aanzahl Väsjohne för opzeleßte.",
        "apihelp-query+deletedrevisions-param-prop": "Wat för en Eijeschaffte holle:\n;revid:Deiht de Kännong vun de fottjeschmeße Väsjohn derbei.\n;parentid:Deiht de Kännong vun de vörrejje Väsjohn vun dä Sigg derbei.\n;user:Deiht dä Metmaacher derbei, dä di Väsjohn jemaat hät.\n;userid:Deiht de Kännong vun däm Metmaacher derbei, dä di Väsjohn jemaat hät.\n;comment:Deiht et Väld „{{int:summary}}“ vun dä Väsjohn derbei.\n;parsedcomment:Deiht et jepaaste Väld „{{int:summary}}“ vun dä Väsjohn derbei.\n;minor:Makehronge, wann di Väsjohn en klein Mini_Änderong es.\n;len:Deiht de Läng (Aanzahl <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Bytes</i>) vun dä Väsjohn derbei.\n;sha1:Deiht dä <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"secure hash algorithm\">SHA-1 (base 16)</i> vun dä Väsjohn derbei.\n;content:Deiht der Ennhalld vun dä Väsjohn derbei.\n;tags:Makehronge för di Väsjohn.",
        "apihelp-query+deletedrevisions-example-revids": "Donn de Aanjahbe för de fottjeschmeße Väsjohn <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">123456</kbd> holle.",
+       "apihelp-query+deletedrevs-param-start": "Et Dattom un de Zigg vun woh aff opjezallt wähde sull.",
+       "apihelp-query+deletedrevs-param-end": "Et Dattom un de Zigg bes woh hen opjezallt wähde sull.",
+       "apihelp-query+deletedrevs-param-from": "Bejenn de Leß bei heh dä Överschreff.",
+       "apihelp-query+deletedrevs-param-to": "Hühr de Leß bei heh dä Överschreff oop.",
+       "apihelp-query+deletedrevs-param-prefix": "Söhk noh Sigge, woh de Övverschrevv esu aanfängk.",
+       "apihelp-query+deletedrevs-param-unique": "Donn blohß ein Väsjohn för jehde Sigg opleßte.",
+       "apihelp-query+deletedrevs-param-tag": "Donn blohß Väsjohne met heh dä Makehrong opleßte.",
+       "apihelp-query+deletedrevs-param-user": "Donn blohß Väsjohne vun heh däm Metmaacher opleßte.",
+       "apihelp-query+deletedrevs-param-excludeuser": "Donn kein Väsjohne vun heh däm Metmaacher opleßte.",
+       "apihelp-query+deletedrevs-param-namespace": "Donn blohß Sigge en heh däm Appachtemang opleßte.",
+       "apihelp-query+deletedrevs-param-limit": "De hühßde Aanzahl Väsjohne för opzeleßte.",
+       "apihelp-query+disabled-description": "Dat Moduhl för Frohre ze schtälle wohd affjeschalldt.",
+       "apihelp-query+duplicatefiles-description": "Donn alle Datteije opleßte, di desällve Prööfsomm han wi de aanjejovve Datteije.",
+       "apihelp-query+duplicatefiles-param-limit": "Wi vell datteije ußjävve.",
        "apihelp-query+duplicatefiles-param-dir": "En wälsche Reihjefollsch opleßte.",
+       "apihelp-query+duplicatefiles-param-localonly": "Lohr blohß noh Datteije heh em Wikki.",
+       "apihelp-query+duplicatefiles-example-simple": "Lohr noh Datteije, di dubbelte vun dä Dattei „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[:File:Albert Einstein Head.jpg]]</code>“ sin.",
+       "apihelp-query+duplicatefiles-example-generated": "Lohr noh Dubbelte vun alle Datteije.",
+       "apihelp-query+embeddedin-description": "Fengk alle Sigge, di di aanjejovve Dattei enneschlehße.",
        "apihelp-query+embeddedin-param-dir": "En wälsche Reihjefollsch opleßte.",
+       "apihelp-query+filearchive-description": "Donn alle fottjeschmeße Datteije der Reih noh opzälle.",
+       "apihelp-query+filearchive-param-from": "De Övverschreff vun däm Beld, woh de Leß medd aanfange sull.",
+       "apihelp-query+filearchive-param-to": "De Övverschreff vun däm Beld, woh de Leß medd ophühre sull.",
+       "apihelp-query+filearchive-param-prefix": "Söhk noh alle Övverschreffte vun Bellder, di met heh dämm Wäät bejenne.",
+       "apihelp-query+filearchive-param-limit": "Wi vell Bellder ensjesamp zeröckjävve.",
        "apihelp-query+filearchive-param-dir": "En wälsche Reijefollsch opleßte.",
+       "apihelp-query+filearchive-example-simple": "Zeijsch en leß met alle fottjeschmeße Datteije.",
        "apihelp-query+images-param-dir": "En wälsche Reijefollsch opleßte.",
        "apihelp-query+imageusage-param-namespace": "Dat Appachtemang zom opzälle.",
        "apihelp-query+imageusage-param-dir": "En wälsche Reijefollsch opleßte.",
        "apihelp-query+links-param-dir": "En wälsche Reihjefollsch opleßte.",
        "apihelp-query+pagepropnames-param-limit": "De jrüüßte Zahl Nahme för ußzejävve.",
        "apihelp-query+pagepropnames-example-simple": "Holl de eezde zehn Nahme vun Eijeschaffte.",
+       "apihelp-query+pageprops-example-simple": "Holl de Eijeschaffte för di Sigge „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Main Page</kbd>“ un „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">MediaWiki</kbd>“.",
        "apihelp-query+pageswithprop-param-limit": "De jrüüßte Zahl Sigge för ußzejävve.",
        "apihelp-query+pageswithprop-param-dir": "En wälsche Reihjefollsch opleßte.",
        "apihelp-query+prefixsearch-param-namespace": "En wällschem Appachtemang söhke.",
        "apihelp-tag-param-reason": "Dä Jrond för di Änderong.",
        "apihelp-tag-example-rev": "Donn de Makkehrong „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">vandalism</kbd>“ vun dä Väsjohn met dä Kännong „<kbd>123</kbd>“ fott nämme, der ohne ene Jrond ze nänne.",
        "apihelp-tag-example-log": "Donn de Makkehrong „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">spam</kbd>“ vun dämm Enndrahch met dä Kännong „<kbd>123</kbd>“ em Logbohch fott nämme un als Jrond draaach „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Wrongly applied</kbd>“ enn.",
+       "apihelp-upload-description": "Donn en Dattei huh lahde, udder holl der Zohschtand vun de onfähdesch huhjelahde Datteije .\n\nEt jitt ongerscheidlejje Metohde:\n* Donn de Ennhallde vun de Datteije tiräk huhlahde, övver der Parramehter „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1file</var>“.\n* Donn de Datteije en en Aanzahl Rötsche huhlahde, övver de Parramehter „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1filesize</var>“, „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1chunk</var>“, un „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1offset</var>“.\n* Lohß der ẞööver vum Wikki en Dattei vun enem <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Uniform Ressource Locator\">URL</i> holle, övver de Parramehter „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1url</var>“.\n* Lohß en Dattei fähdesch huhlahde, di zeläz nit fähdesch wohd, un met Warnonge schtonn jeblevve es övver de Parramehter „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1filekey</var>“.\nOpjepaß: dä „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">POST</code>“-Befähl vum <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"HyperText Transfer Protocol\">HTTP</i> moß als e Dattei-Huhlahde aanjeschtüßße wähde, allsu met „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">multipart/form-data</code>“, wam_mer dä Parramehter „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1file</var>“ scheck.",
        "api-help-source": "Quäll: $1",
        "api-help-source-unknown": "Quäll: <span class=\"apihelp-unknown\">onbikannt</span>",
        "api-help-license": "Lezänz: [[$1|$2]]",
index a40e4c1..95c7e86 100644 (file)
@@ -4,6 +4,11 @@
                        "George Animal"
                ]
        },
+       "apihelp-block-param-reason": "Sedemê bo astengkirinê.",
+       "apihelp-createaccount-param-name": "Navê bikarhêner.",
        "apihelp-delete-description": "Rûpelekê jê bibe.",
-       "apihelp-expandtemplates-param-title": "Sernavê rûpelê."
+       "apihelp-edit-param-text": "Naveroka rûpelê.",
+       "apihelp-edit-example-edit": "Rûpelekê biguherîne.",
+       "apihelp-expandtemplates-param-title": "Sernavê rûpelê.",
+       "apihelp-tag-param-reason": "Sedemê bo guherandinê."
 }
index 612625f..3917e83 100644 (file)
@@ -98,5 +98,6 @@
        "api-help-param-required": "Dëse Parameter ass obligatoresch.",
        "api-help-datatypes-header": "Datentypen",
        "api-help-param-type-user": "Typ: {{PLURAL:$1|1=Benotzernumm|2=Lëscht vu Benotzernimm}}",
-       "api-help-examples": "{{PLURAL:$1|Beispill|Beispiler}}:"
+       "api-help-examples": "{{PLURAL:$1|Beispill|Beispiler}}:",
+       "api-help-permissions": "{{PLURAL:$1|Autorisatioun|Autorisatiounen}}:"
 }
index 1efb45f..9315304 100644 (file)
@@ -4,35 +4,38 @@
                        "Bjankuloski06"
                ]
        },
-       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [https://www.mediawiki.org/wiki/API:Main_page Документација]\n* [https://www.mediawiki.org/wiki/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<strong>Статус:</strong> Сите ставки на страницава би требало да работат, но Извршникот сепак е во активна разработка, што значи дека може да се смени во секое време. Објавите за измени можете да ги дознавате ако се пријавите на [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ поштенскиот список „the mediawiki-api-announce“].\n\n<strong>Погрешни барања:</strong> Кога Извршникот ќе добие погрешни барања, ќе се испрати HTTP-заглавие со клучот „MediaWiki-API-Error“ и потоа на вредностите на заглавието и шифрата на грешката што ќе се појават ќе им биде зададена истата вредност. ПОвеќе информации ќе најдете на https://www.mediawiki.org/wiki/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<strong>Статус:</strong> Сите ставки на страницава би требало да работат, но Извршникот сепак е во активна разработка, што значи дека може да се смени во секое време. Објавите за измени можете да ги дознавате ако се пријавите на [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ поштенскиот список „the mediawiki-api-announce“].\n\n<strong>Погрешни барања:</strong> Кога Извршникот ќе добие погрешни барања, ќе се испрати HTTP-заглавие со клучот „MediaWiki-API-Error“ и потоа на вредностите на заглавието и шифрата на грешката што ќе се појават ќе им биде зададена истата вредност. ПОвеќе информации ќе најдете на  [[mw:API:Errors_and_warnings|Извршник: Грешки и предупредувања]].",
        "apihelp-main-param-action": "Кое дејство да се изврши.",
        "apihelp-main-param-format": "Формат на изводот.",
-       "apihelp-main-param-maxlag": "Максималниот заостаток може да се користи кога МедијаВики е воспоставен на грозд умножен од базата. За да спречите дополнителни заостатоци од дејства, овој параметар му наложува на клиентот да почека додека заостатокот не се намали под укажаната вредност. Во случај на преголем заостаток, системт ја дава грешката со код „maxlag“ со порака од обликот „Го чекам $host: има заостаток од $lag секунди“.<br />Погл. https://www.mediawiki.org/wiki/Manual:Maxlag_parameter за повеќе информации.",
+       "apihelp-main-param-maxlag": "Максималниот заостаток може да се користи кога МедијаВики е воспоставен на грозд умножен од базата. За да спречите дополнителни заостатоци од дејства, овој параметар му наложува на клиентот да почека додека заостатокот не се намали под укажаната вредност. Во случај на преголем заостаток, системт ја дава грешката со код <samp>maxlag</samp> со порака од обликот <samp>Го чекам $host: има заостаток од $lag секунди</samp>.<br />Погл. [[mw:Manual:Maxlag_parameter|Прирачник: Параметар Maxlag]]",
        "apihelp-main-param-smaxage": "Задајте му олку секунди на заглавитето <code>s-maxage</code>. Грешките никогаш не се чуваат во меѓускладот.",
        "apihelp-main-param-maxage": "Задајте му олку секунди на заглавитето <code>max-age</code>. Грешките никогаш не се чуваат во меѓускладот.",
-       "apihelp-main-param-assert": "Провери дали корисникот е најавен ако е зададено „user“ или дали го има корисничкото право на бот, ако е зададено „bot“.",
+       "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": "Кога му пристапувате на Пирлогот користејќи повеќедоменско AJAX-барање (CORS), задајте му го на ова изворниот домен. Ова мора да се вклучи во секое подготвително барање и затоа мора да биде дел од URI на барањето (не главната содржина во POST). Ова мора точно да се совпаѓа со еден од изворниците на заглавието Origin:, така што мора да е зададен на нешто како http://en.wikipedia.org or https://meta.wikimedia.org. Ако овој параметар не се совпаѓа со заглавието Origin:, ќе се појави одговор 403. Ако се совпаѓа, а изворникот е на бел список (на допуштени), тогаш ќе се зададе ззаглавието Контрола на пристап-Изворник.",
-       "apihelp-main-param-uselang": "Јазик за преведување на пораките. Список на јазични кодови ќе најдете на [[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]] со siprop=languages или укажете „user“ за да го користите тековно зададениот јазик корисникот, или пак укажете „content“ за да го користите јазикот на содржината на ова вики.",
+       "apihelp-main-param-origin": "Кога му пристапувате на Пирлогот користејќи повеќедоменско AJAX-барање (CORS), задајте му го на ова изворниот домен. Ова мора да се вклучи во секое подготвително барање и затоа мора да биде дел од URI на барањето (не главната содржина во POST). Ова мора точно да се совпаѓа со еден од изворниците на заглавието Origin:, така што мора да е зададен на нешто како <kbd>https://mk.wikipedia.org</kbd>  or <kbd>https://meta.wikimedia.org</kbd>. Ако овој параметар не се совпаѓа со заглавието <code>Origin</code>:, ќе се појави одговор 403. Ако се совпаѓа, а изворникот е на бел список (на допуштени), тогаш ќе се зададе заглавието <code>Access-Control-Allow-Origin</code>.",
+       "apihelp-main-param-uselang": "Јазик за преведување на пораките. Список на јазични кодови ќе најдете на <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> со <kbd>siprop=languages</kbd> или укажете <kbd>user</kbd> за да го користите тековно зададениот јазик корисникот, или пак укажете <kbd>content</kbd> за да го користите јазикот на содржината на ова вики.",
        "apihelp-block-description": "Блокирај корисник.",
        "apihelp-block-param-user": "Корисничко име, IP-адреса или IP-опсег ако сакате да блокирате.",
-       "apihelp-block-param-expiry": "Време на истек. Може да биде релативно (на пр. „5 месеци“ или „2 недели“) или пак апсолутно (на пр. „2014-09-18T12:34:56Z“). Ако го зададете „бесконечно“, „неодредено“ или „никогаш“, блокот ќе трае засекогаш.",
+       "apihelp-block-param-expiry": "Време на истек. Може да биде релативно (на пр. <kbd>5 months</kbd> или „2 недели“) или пак апсолутно (на пр. <kbd>2014-09-18T12:34:56Z</kbd>). Ако го зададете <kbd>infinite</kbd>, <kbd>indefinite</kbd> или <kbd>never</kbd>, блокот ќе трае засекогаш.",
        "apihelp-block-param-reason": "Причина за блокирање.",
        "apihelp-block-param-anononly": "Блокирај само анонимни корисници (т.е. оневозможи анонимно уредување од оваа IP-адреса).",
        "apihelp-block-param-nocreate": "Оневозможи создавање кориснички сметки.",
        "apihelp-block-param-autoblock": "Автоматски блокирај ја последно употребената IP-адреса и сите понатамошни IP-адреси од кои лицето ќе се обиде да се најави.",
-       "apihelp-block-param-noemail": "Оневозможи му на корисникот да испаќа е-пошта преку викито. (Го бара правото „блокирање е-пошта“).",
-       "apihelp-block-param-hidename": "Скриј го корисничкото име од дневникот на блокирања. (Го бара правото „скривање корисник“)",
+       "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-адресата 192.0.2.5 три дена со причината „Прва опомена“",
-       "apihelp-block-example-user-complex": "Блокирај го корисникот Вандал (Vandal) бесконечно со причината „Вандализам“ и оневозможи создавање на нови сметки и праќање е-пошта",
+       "apihelp-block-example-ip-simple": "Блокирај ја IP-адресата <kbd>192.0.2.5</kbd> три дена со причината <kbd>Прва опомена</kbd>.",
+       "apihelp-block-example-user-complex": "Блокирај го корисникот <kbd>Vandal</kbd> (Вандал) бесконечно со причината <kbd>Vandal</kbd> (Вандализам) и оневозможи создавање на нови сметки и праќање е-пошта.",
+       "apihelp-checktoken-description": "Проверка на полноважноста на шифрата од <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.",
+       "apihelp-checktoken-param-type": "Тип на шифра што се испробува.",
+       "apihelp-checktoken-param-token": "Шифра што се испробува.",
        "apihelp-clearhasmsg-description": "Ја отстранува ознаката „<code>hasmsg</code>“ од тековниот корисник.",
        "apihelp-clearhasmsg-example-1": "Отстрани ја ознаката „<code>hasmsg</code>“ од тековниот корисник",
-       "apihelp-compare-description": "Ð\94обиваÑ\9aе Ð½Ð° Ñ\80азлика Ð¿Ð¾Ð¼ÐµÑ\93Ñ\83 Ð´Ð²Ðµ Ñ\81Ñ\82Ñ\80аниÑ\86и.\n\nÐ\9cоÑ\80а Ð´Ð° Ñ\81е Ð´Ð¾Ð±Ð¸Ðµ Ð±Ñ\80оÑ\98 Ð½Ð° Ð¿Ñ\80еÑ\80абоÑ\82каÑ\82а, Ð½Ð°Ñ\81лов Ð½Ð° Ñ\81Ñ\82Ñ\80аниваÑ\82а Ð¸Ð»Ð¸ Ð¿Ð°Ðº Ð½ÐµÑ\98зина Ð½Ð°Ð·Ð½Ð°ÐºÐ°. Ð\92ажи Ð¸ за „од“ и за „на“.",
+       "apihelp-compare-description": "Ð\94обиваÑ\9aе Ð½Ð° Ñ\80азлика Ð¿Ð¾Ð¼ÐµÑ\93Ñ\83 Ð´Ð²Ðµ Ñ\81Ñ\82Ñ\80аниÑ\86и.\n\nÐ\9cоÑ\80а Ð´Ð° Ñ\81е Ð´Ð°Ð´Ðµ Ð±Ñ\80оÑ\98оÑ\82 Ð½Ð° Ð¿Ñ\80еÑ\80абоÑ\82каÑ\82а, Ð½Ð°Ñ\81ловоÑ\82 Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86аÑ\82а Ð¸Ð»Ð¸ Ð¿Ð°Ðº Ð½ÐµÑ\98зина Ð½Ð°Ð·Ð½Ð°ÐºÐ° за „од“ и за „на“.",
        "apihelp-compare-param-fromtitle": "Прв наслов за споредба.",
        "apihelp-compare-param-fromid": "Прва назнака на страница за споредба.",
        "apihelp-compare-param-fromrev": "Прва преработка за споредба.",
        "apihelp-createaccount-param-mailpassword": "Ако му се зададе било каква вредност, тогаш на корисникот ќе му биде испратена случајна лозинка.",
        "apihelp-createaccount-param-reason": "Незадолжителна прочина за создавање на сметката која ќе стои во дневниците.",
        "apihelp-createaccount-param-language": "Јазичен код кој ќе биде стандарден за корисникот (незадолжително, по основно: јазикот на самото вики).",
-       "apihelp-createaccount-example-pass": "Создај го корисникот „testuser“ со лозинката „test123“",
-       "apihelp-createaccount-example-mail": "Создај го корисникот „testmailuser“ и испрати случајно-создадена лозинка по е-пошта",
+       "apihelp-createaccount-example-pass": "Создај го корисникот <kbd>testuser</kbd> со лозинката <kbd>test123</kbd>.",
+       "apihelp-createaccount-example-mail": "Создај го корисникот <kbd>testmailuser</kbd> и испрати случајно-создадена лозинка по е-пошта.",
        "apihelp-delete-description": "Избриши страница.",
-       "apihelp-delete-param-title": "Наслов на страницата што сакате да ја избришете. Не може да се користи заедно со $1pageid.",
-       "apihelp-delete-param-pageid": "Назнака на страницата што сакате да ја избришете. Не може да се користи заедно со $1title.",
+       "apihelp-delete-param-title": "Наслов на страницата што сакате да ја избришете. Не може да се користи заедно со <var>$1pageid</var>.",
+       "apihelp-delete-param-pageid": "Назнака на страницата што сакате да ја избришете. Не може да се користи заедно со <var>$1title</var>.",
        "apihelp-delete-param-reason": "Причина за бришење. Ако не се зададе, ќе се наведе автоматска причина.",
-       "apihelp-delete-param-watch": "Додај ја страницата во набљудуваните.",
-       "apihelp-delete-param-watchlist": "Безусловно додај или отстрани ја страницата од набљудуваните, користете ги нагодувањата или не ги менувајте набљудуваните.",
-       "apihelp-delete-param-unwatch": "Отстрани ја страницата од набљудуваните.",
+       "apihelp-delete-param-watch": "Додај ја страницата во набљудуваните на тековниот корисник.",
+       "apihelp-delete-param-watchlist": "Безусловно додај или отстрани ја страницата од набљудуваните на тековниот корисник, користете ги нагодувањата или не ги менувајте набљудуваните.",
+       "apihelp-delete-param-unwatch": "Отстрани ја страницата од набљудуваните на тековниот корисник.",
        "apihelp-delete-param-oldimage": "Името на страта слика за бришење според добиеното од [[Special:ApiHelp/query+imageinfo|action=query&prop=imageinfo&iiprop=archivename]].",
-       "apihelp-delete-example-simple": "Избриши ја Главната страница",
-       "apihelp-delete-example-reason": "Избриши ја Главната страница со причината „Подготовка за преместување“",
+       "apihelp-delete-example-simple": "Избриши ја <kbd>Главна страница</kbd>.",
+       "apihelp-delete-example-reason": "Избриши ја <kbd>Главна страница</kbd> со причината <kbd>Подготовка за преместување</kbd>.",
        "apihelp-disabled-description": "Модулот е деактивиран.",
        "apihelp-edit-description": "Создај или уреди страници.",
-       "apihelp-edit-param-title": "Наслов на страницата што сакате да ја уредите. Не може да се користи заедно со $1pageid.",
-       "apihelp-edit-param-pageid": "Назнака на страницата што сакате да ја уредите. Не може да се користи заедно со $1title.",
-       "apihelp-edit-param-section": "Број на поднасловот. 0 за првиот, „new“ за нов.",
+       "apihelp-edit-param-title": "Наслов на страницата што сакате да ја уредите. Не може да се користи заедно со <var>$1pageid</var>.",
+       "apihelp-edit-param-pageid": "Назнака на страницата што сакате да ја уредите. Не може да се користи заедно со <var>$1title</var>.",
+       "apihelp-edit-param-section": "Број на поднасловот. <kbd>0</kbd> за првиот, <kbd>new</kbd> за нов.",
        "apihelp-edit-param-sectiontitle": "Назив на новиот поднаслов",
        "apihelp-edit-param-text": "Содржина на страницата.",
        "apihelp-edit-param-summary": "Опис на уредувањето. Ова е и назив на поднасловот кога не се зададени $1section=new и $1sectiontitle.",
        "apihelp-edit-param-notminor": "Неситно уредување.",
        "apihelp-edit-param-bot": "Означи го уредувањево како ботско.",
        "apihelp-edit-param-basetimestamp": "Датум и време на преработката на базата, кои се користат за утврдување на спротиставености во уредувањето. Може да се добие преку [[Special:ApiHelp/query+revisions|action=query&prop=revisions&rvprop=timestamp]].",
-       "apihelp-edit-param-starttimestamp": "Ð\94аÑ\82Ñ\83м Ð¸ Ð²Ñ\80еме ÐºÐ¾Ð³Ð° Ñ\81Ñ\82е Ð³Ð¾ Ð¿Ð¾Ñ\87нале Ñ\83Ñ\80едÑ\83ваÑ\9aеÑ\82о, ÐºÐ¾Ð¸ Ñ\81е ÐºÐ¾Ñ\80иÑ\81Ñ\82аÑ\82 Ð·Ð° Ñ\83Ñ\82вÑ\80дÑ\83ваÑ\9aе Ð½Ð° Ñ\81пÑ\80оÑ\82иÑ\81Ñ\82авеноÑ\81Ñ\82и Ð²Ð¾ Ñ\83Ñ\80едÑ\83ваÑ\9aаÑ\82а. Ð¡Ð¾Ð¾Ð´Ð²ÐµÑ\82наÑ\82а Ð²Ñ\80едноÑ\81Ñ\82 Ñ\81е Ð´Ð¾Ð±Ð¸Ð²Ð° ÐºÐ¾Ñ\80иÑ\81Ñ\82еÑ\98Ñ\9cи [[Special:ApiHelp/main|curtimestamp]] кога ќе почнете со уредување (на пр. кога ќе се вчита содржината што ќе ја уредувате).",
-       "apihelp-edit-param-recreate": "Занемари ги грешките што се појавуваат во врска со статијата што е избришана во меѓувреме.",
+       "apihelp-edit-param-starttimestamp": "Ð\94аÑ\82Ñ\83м Ð¸ Ð²Ñ\80еме ÐºÐ¾Ð³Ð° Ñ\81Ñ\82е Ð¿Ð¾Ñ\87нало Ñ\83Ñ\80едÑ\83ваÑ\9aеÑ\82о, ÐºÐ¾Ð¸ Ñ\81е ÐºÐ¾Ñ\80иÑ\81Ñ\82аÑ\82 Ð·Ð° Ñ\83Ñ\82вÑ\80дÑ\83ваÑ\9aе Ð½Ð° Ñ\81пÑ\80оÑ\82иÑ\81Ñ\82авеноÑ\81Ñ\82и Ð²Ð¾ Ñ\83Ñ\80едÑ\83ваÑ\9aаÑ\82а. Ð¡Ð¾Ð¾Ð´Ð²ÐµÑ\82наÑ\82а Ð²Ñ\80едноÑ\81Ñ\82 Ñ\81е Ð´Ð¾Ð±Ð¸Ð²Ð° ÐºÐ¾Ñ\80иÑ\81Ñ\82еÑ\98Ñ\9cи <var>[[Special:ApiHelp/main|curtimestamp]]</var> кога ќе почнете со уредување (на пр. кога ќе се вчита содржината што ќе ја уредувате).",
+       "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-watch": "Додај ја страницата во набљудуваните на тековниот корисник.",
+       "apihelp-edit-param-unwatch": "Отстрани ја страницата од набљудуваните на тековниот корисник.",
+       "apihelp-edit-param-watchlist": "Безусловно додај или отстрани ја страницата од набљудуваните на тековниот корисник, користете ги нагодувањата или не ги менувајте набљудуваните.",
        "apihelp-edit-param-md5": "MD5-тарабата на параметарот $1text, или параметрите $1prependtext и $1appendtext поврзани. Ако е зададено, уредувањето нема да се изврши без тарабата да биде исправна.",
        "apihelp-edit-param-prependtext": "Ставете го текстов на почетокот од страницата. Го заменува  $1text.",
        "apihelp-edit-param-appendtext": "Ставете го текстов на крајот од страницата. Го заменува $1text.\n\nКористете $1section=new наместо овој параметар за да приложите кон новиот поднаслов.",
        "apihelp-emailuser-param-subject": "Наслов.",
        "apihelp-emailuser-param-text": "Содржина.",
        "apihelp-emailuser-param-ccme": "Прати ми примерок и мене.",
-       "apihelp-emailuser-example-email": "Испрати е-пошта на корисникот „WikiSysop“ со текстот „Содржина“",
+       "apihelp-emailuser-example-email": "Испрати е-пошта на корисникот <kbd>WikiSysop</kbd> со текстот <kbd>Содржина</kbd>.",
        "apihelp-expandtemplates-description": "Ги проширува сите шаблони во викитекст.",
        "apihelp-expandtemplates-param-title": "Наслов на страница.",
        "apihelp-expandtemplates-param-text": "Викитекст за претворање.",
        "apihelp-expandtemplates-param-revid": "Назнака на преработката, за <nowiki>{{REVISIONID}}</nowiki> и слични променливи.",
-       "apihelp-expandtemplates-param-prop": "Кои информации треба да ги добиете:\n;wikitext:The expanded wikitext.\n;categories: Категориите присутно во вносот кои не се претставени во викитекстуалниот извод.\n;volatile: Дали изводот е месно врзан и не треба да се преупотребува на други места во страницата.\n;ttl: Максималното време по кое треба да се поништи меѓускладираниот резултат.\n;parsetree: XML-дрвото на расчленување за изводот.\nИмајте на ум дека ако не изберете никаква вредност, резултатот ќе го содржи викитекстот, но изводот ќе биде во застарен формат.",
+       "apihelp-expandtemplates-param-prop": "Кои информации треба да ги добиете:\n;wikitext:The expanded wikitext.\n;categories: Категориите присутно во вносот кои не се претставени во викитекстуалниот извод.\n;properties: Својства на страницата определени од проширени волшебни зборови во викитекстот.\n;volatile: Дали изводот е месно врзан и не треба да се преупотребува на други места во страницата.\n;ttl: Максималното време по кое треба да се поништи меѓускладираниот резултат.\n;parsetree: XML-дрвото на расчленување за изводот.\nИмајте на ум дека ако не изберете никаква вредност, резултатот ќе го содржи викитекстот, но изводот ќе биде во застарен формат.",
        "apihelp-expandtemplates-param-includecomments": "Дали во изводот да се вклучени HTML-коментари.",
        "apihelp-expandtemplates-param-generatexml": "Создај XML-дрво на расчленување (заменето со $1prop=parsetree).",
-       "apihelp-expandtemplates-example-simple": "Прошири го викитекстот „<nowiki>{{Project:Sandbox}}</nowiki>“",
+       "apihelp-expandtemplates-example-simple": "Прошири го викитекстот <kbd><nowiki>{{Project:Sandbox}}</nowiki></kbd>.",
        "apihelp-feedcontributions-description": "Дава канал со придонеси на корисник.",
        "apihelp-feedcontributions-param-feedformat": "Формат на каналот.",
        "apihelp-feedcontributions-param-user": "За кои корисници да се прикажуваат придонесите.",
        "apihelp-feedcontributions-param-toponly": "Прикажувај само последни преработки.",
        "apihelp-feedcontributions-param-newonly": "Прикажувај само новосоздадени страници",
        "apihelp-feedcontributions-param-showsizediff": "Покажувај ја големинската разлика меѓу преработките.",
-       "apihelp-feedcontributions-example-simple": "Покажувај придонеси на [[Корисник:Пример]]",
+       "apihelp-feedcontributions-example-simple": "Покажувај придонеси на <kbd>Пример</kbd>.",
        "apihelp-feedrecentchanges-description": "Дава канал со скорешни промени.",
        "apihelp-feedrecentchanges-param-feedformat": "Форматот на каналот.",
        "apihelp-feedrecentchanges-param-namespace": "На кој именски простор да се ограничат резултатите.",
        "apihelp-feedrecentchanges-param-hideanons": "Скриј ги промените направени од анонимни корисници.",
        "apihelp-feedrecentchanges-param-hideliu": "Скриј ги промените направени од регистрирани корисници.",
        "apihelp-feedrecentchanges-param-hidepatrolled": "Скриј ги испатролираните промени.",
-       "apihelp-feedrecentchanges-param-hidemyself": "СкÑ\80иÑ\98 Ð³Ð¸ Ð¼Ð¾Ð¸Ñ\82е Ð¿Ñ\80омени.",
+       "apihelp-feedrecentchanges-param-hidemyself": "СкÑ\80иÑ\98 Ð³Ð¸ Ð¿Ñ\80омениÑ\82е Ð½Ð° Ñ\82ековниоÑ\82 ÐºÐ¾Ñ\80иÑ\81ник.",
        "apihelp-feedrecentchanges-param-tagfilter": "Филтрирање по ознака.",
        "apihelp-feedrecentchanges-param-target": "Прикажи само промени на страници што водат од оваа.",
        "apihelp-feedrecentchanges-param-showlinkedto": "Наместо тоа, прикажи ги промените на страниците поврзани со избраната страница.",
        "apihelp-filerevert-param-archivename": "Архивски назив на преработката што ја повраќате.",
        "apihelp-filerevert-example-revert": "Врати ја <kbd>Wiki.png</kbd> на верзијата од <kbd>2011-03-05T15:27:40Z</kbd>",
        "apihelp-help-description": "Прикажувај помош за укажаните модули.",
-       "apihelp-help-param-modules": "Модули за приказ на помош за (вредности на параметрите action= и format=, или пак „main“). Може да се укажат подмодули со „+“.",
+       "apihelp-help-param-modules": "Модули за приказ на помош за (вредности на параметрите <var>action</var> и <var>format</var>, или пак <kbd>main</kbd>). Може да се укажат подмодули со <kbd>+</kbd>.",
        "apihelp-help-param-submodules": "Прикажувај и помош за подмодули на именуваниот модул.",
        "apihelp-help-param-recursivesubmodules": "Прикажувај и помош за подмодули рекурзивно.",
        "apihelp-help-param-helpformat": "Формат на изводот на помошта.",
        "apihelp-help-example-query": "Помош за два подмодула за барања",
        "apihelp-imagerotate-description": "Сврти една или повеќе слики.",
        "apihelp-imagerotate-param-rotation": "За колку степени да се сврти надесно.",
-       "apihelp-imagerotate-example-simple": "Сврти ја [[:Податотека:Пример.png]] за 90 степени",
-       "apihelp-imagerotate-example-generator": "Сврти ги сите слики во [[:Категорија:Некоја]] за 180 степени",
-       "apihelp-import-description": "Увези страница од друго вики или XML-податотека.\n\nИмајте на ум дека POST на HTTP мора да се изведе како подигање на податотеката (т.е. користејќи повеќеделни податоци/податоци од образец) кога ја испраќате податотеката за параметарот „xml“.",
+       "apihelp-imagerotate-example-simple": "Сврти ја <kbd>Податотека:Пример.png</kbd> за <kbd>90</kbd> степени.",
+       "apihelp-imagerotate-example-generator": "Сврти ги сите слики во <kbd>Категорија:Некоја</kbd> за <kbd>180</kbd> степени.",
+       "apihelp-import-description": "Увези страница од друго вики или XML-податотека.\n\nИмајте на ум дека POST на HTTP мора да се изведе како подигање на податотеката (т.е. користејќи повеќеделни податоци/податоци од образец) кога ја испраќате податотеката за параметарот <var>xml</var>.",
        "apihelp-import-param-summary": "Увези опис.",
        "apihelp-import-param-xml": "Подигната XML-податотека.",
        "apihelp-import-param-interwikisource": "За меѓујазични увози: од кое вики да се увезе.",
        "apihelp-import-param-interwikipage": "За меѓујазични увози: страница за увоз.",
        "apihelp-import-param-fullhistory": "За меѓујазични увози:: увези ја целата историја, а не само тековната верзија.",
        "apihelp-import-param-templates": "За меѓујазични увози: увези ги и сите вклучени шаблони.",
-       "apihelp-import-param-namespace": "Ð\97а Ð¼ÐµÑ\93Ñ\83Ñ\98азиÑ\87ни Ñ\83вози: Ñ\83вези Ð²Ð¾ Ð¾Ð²Ð¾Ñ\98 Ð¸Ð¼ÐµÐ½Ñ\81ки Ð¿Ñ\80оÑ\81Ñ\82оÑ\80.",
-       "apihelp-import-param-rootpage": "Увези како потстраница на страницава.",
+       "apihelp-import-param-namespace": "Увези Ð²Ð¾ Ð¾Ð²Ð¾Ñ\98 Ð¸Ð¼ÐµÐ½Ñ\81ки Ð¿Ñ\80оÑ\81Ñ\82оÑ\80. Ð¡Ðµ Ð½Ð°Ð¼ÐµÑ\82нÑ\83ва Ð²Ñ\80з Ð¿Ð°Ñ\80амеÑ\82аÑ\80оÑ\82 <kbd>$1rootpage</kbd>.",
+       "apihelp-import-param-rootpage": "Увези како потстраница на страницава. Се занемарува ако е укажан параметарот <kbd>$1namespace</kbd>.",
        "apihelp-import-example-import": "Увези [[meta:Help:Parserfunctions]] во именскиот простор 100 со целата историја.",
        "apihelp-login-description": "Најавете се и добијте колачиња за заверка.\n\nВо случај кога ќе се најавите успешно, потребните колачиња ќе се придодадат кон заглавијата на HTTP-одѕивот. Во случај да не успеете да се најавите, понатамошните обиди може да се ограничат за да се ограничат нападите со автоматизирано погодување на лозинката.",
        "apihelp-login-param-name": "Корисничко име.",
        "apihelp-logout-description": "Одјави се и исчисти ги податоците на седницата.",
        "apihelp-logout-example-logout": "Одјави го тековниот корисник",
        "apihelp-move-description": "Премести страница.",
-       "apihelp-move-param-from": "Ð\9dаÑ\81лов Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86аÑ\82а Ñ\88Ñ\82о Ñ\81акаÑ\82е Ð´Ð° Ñ\98а Ð¿Ñ\80емеÑ\81Ñ\82иÑ\82е. Ð\9dе Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ñ\81е ÐºÐ¾Ñ\80иÑ\81Ñ\82и Ð·Ð°ÐµÐ´Ð½Ð¾ Ñ\81о $1fromid.",
-       "apihelp-move-param-fromid": "Ð\9dазнака Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86аÑ\82а Ñ\88Ñ\82о Ñ\81акаÑ\82е Ð´Ð° Ñ\98а Ð¿Ñ\80емеÑ\81Ñ\82иÑ\82е. Ð\9dе Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ñ\81е ÐºÐ¾Ñ\80иÑ\81Ñ\82и Ð·Ð°ÐµÐ´Ð½Ð¾ Ñ\81о $1from.",
-       "apihelp-move-param-to": "Како сакате да гласи новиот наслов на страницата.",
-       "apihelp-move-param-reason": "Ð\9fÑ\80иÑ\87ина Ð·Ð° Ð¿Ñ\80емеÑ\81Ñ\82увањето.",
-       "apihelp-move-param-movetalk": "Ð\9fÑ\80емеÑ\81Ñ\82и ја и страницата за разговор, ако ја има.",
-       "apihelp-move-param-movesubpages": "Ð\9fÑ\80емеÑ\81Ñ\82и Ð¿Ð¾Ñ\82Ñ\81Ñ\82Ñ\80аниÑ\86и, Ð°ÐºÐ¾ Ð¸Ð¼Ð°",
+       "apihelp-move-param-from": "Ð\9dаÑ\81лов Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86аÑ\82а Ñ\88Ñ\82о Ñ\82Ñ\80еба Ð´Ð° Ñ\81е Ð¿Ñ\80емеÑ\81Ñ\82и. Ð\9dе Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ñ\81е ÐºÐ¾Ñ\80иÑ\81Ñ\82и Ð·Ð°ÐµÐ´Ð½Ð¾ Ñ\81о <var>$1fromid</var>.",
+       "apihelp-move-param-fromid": "Ð\9dазнака Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86аÑ\82а Ñ\88Ñ\82о Ñ\82Ñ\80еба Ð´Ð° Ñ\81е Ð¿Ñ\80емеÑ\81Ñ\82и. Ð\9dе Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ñ\81е ÐºÐ¾Ñ\80иÑ\81Ñ\82и Ð·Ð°ÐµÐ´Ð½Ð¾ Ñ\81о <var>$1from</var>.",
+       "apihelp-move-param-to": "Како да гласи новата страница.",
+       "apihelp-move-param-reason": "Ð\9fÑ\80иÑ\87ина Ð·Ð° Ð¿Ñ\80еименувањето.",
+       "apihelp-move-param-movetalk": "Ð\9fÑ\80еименÑ\83ваÑ\98 ја и страницата за разговор, ако ја има.",
+       "apihelp-move-param-movesubpages": "Ð\9fÑ\80еименÑ\83ваÑ\98 Ð¿Ð¾Ñ\82Ñ\81Ñ\82Ñ\80аниÑ\86и, Ð°ÐºÐ¾ Ð¸Ð¼Ð°.",
        "apihelp-move-param-noredirect": "Не прави пренасочување.",
-       "apihelp-move-param-watch": "Додај ги страницата и пренасочувањето во набљудуваните.",
-       "apihelp-move-param-unwatch": "Отстрани ги страницата и пренасочувањето од набљудуваните.",
-       "apihelp-move-param-watchlist": "Безусловно додај или отстрани ја страницата од набљудуваните, користете ги нагодувањата или не ги менувајте набљудуваните.",
+       "apihelp-move-param-watch": "Додај ги страницата и пренасочувањето во набљудуваните на тековниот корисник.",
+       "apihelp-move-param-unwatch": "Отстрани ги страницата и пренасочувањето од набљудуваните на тековниот корисник.",
+       "apihelp-move-param-watchlist": "Безусловно додај или отстрани ја страницата од набљудуваните на тековниот корисник, користете ги нагодувањата или не ги менувајте набљудуваните.",
        "apihelp-move-param-ignorewarnings": "Занемари предупредувања.",
-       "apihelp-move-example-move": "Премести го „Лош наслов“ на „Добар наслов“, неоставајќи пренасочување",
+       "apihelp-move-example-move": "Премести го <kbd>Лош наслов</kbd> на <kbd>Добар наслов</kbd>, неоставајќи пренасочување",
        "apihelp-opensearch-description": "Пребарување на викито со протоколот OpenSearch.",
        "apihelp-opensearch-param-search": "Низа за пребарување.",
        "apihelp-opensearch-param-limit": "Максималниот број на резултати за прикажување.",
        "apihelp-opensearch-param-namespace": "Именски простори за пребарување.",
-       "apihelp-opensearch-param-suggest": "Не прави ништо ако [https://www.mediawiki.org/wiki/Manual:$wgEnableOpenSearchSuggest $wgEnableOpenSearchSuggest] е неточно.",
+       "apihelp-opensearch-param-suggest": "Не прави ништо ако <var>[[mw:Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> е неточно.",
        "apihelp-opensearch-param-redirects": "Како да се работи со пренасочувања:\n;return: Дај го самото пренасочување.\n;resolve: Дај ја целната страница. Може да даде помалку од $1limit резултати.\nОд историски причини, по основно е „return“ за $1format=json и „resolve“ за други формати.",
        "apihelp-opensearch-param-format": "Формат на изводот.",
-       "apihelp-opensearch-example-te": "Најди страници што почнуваат со „Те“",
+       "apihelp-opensearch-example-te": "Најди страници што почнуваат со <kbd>Те</kbd>.",
        "apihelp-options-description": "Смени ги нагодувањата на тековниот корисник.\n\nМожат да се зададат само можностите заведени во јадрото или во едно од воспоставените додатоци, или пак можности со клуч кој ја има претставката „userjs-“ (предвиден за употреба од кориснички скрипти).",
        "apihelp-options-param-reset": "Ги враќа поставките по основно.",
-       "apihelp-options-param-resetkinds": "Писок на типови можности за повраток кога е зададена можноста „$1reset“.",
+       "apihelp-options-param-resetkinds": "Писок на типови можности за повраток кога е зададена можноста <var>$1reset</var>.",
        "apihelp-options-param-change": "Список на промени во форматот name=value (на пр. skin=vector). Вредностите не треба да содржат исправени црти. Ако не зададете вредност (дури ни знак за равенство), на пр., можност|другаможност|..., ќе биде зададена вредноста на можноста по основно.",
-       "apihelp-options-param-optionname": "Назив на можноста што треба да ѝ се зададе на вредноста дадена од „$1optionvalue“.",
-       "apihelp-options-param-optionvalue": "Вредноста на можноста укажана од „$1optionnam“. Може да содржи исправени црти.",
+       "apihelp-options-param-optionname": "Назив на можноста што треба да ѝ се зададе на вредноста дадена од <var>$1optionvalue</var>.",
+       "apihelp-options-param-optionvalue": "Вредноста на можноста укажана од <var>$1optionname</var>. Може да содржи исправени црти.",
        "apihelp-options-example-reset": "Врати ги сите поставки по основно",
-       "apihelp-options-example-change": "Смени ги поставките „skinЗ“ и „hideminor“",
-       "apihelp-options-example-complex": "Врати ги сите нагодувања по основно, а потоа задај ги „skin“ и „nickname“",
+       "apihelp-options-example-change": "Смени ги поставките <kbd>skin</kbd и <kbd>hideminor</kbd>.",
+       "apihelp-options-example-complex": "Врати ги сите нагодувања по основно, а потоа задај ги <kbd>skin</kbd> и <kbd>nickname</kbd>.",
        "apihelp-paraminfo-description": "Набави информации за извршнички (API) модули.",
-       "apihelp-paraminfo-param-modules": "Список на називи на модули (вредности на параметрите action= и format=, или пак „main“). Може да се укажат подмодули со „+“.",
+       "apihelp-paraminfo-param-modules": "Список на називи на модули (вредности на параметрите <var>action</var> и <var>format</var>, или пак <kbd>main</kbd>). Може да се укажат подмодули со <kbd>+</kbd>.",
        "apihelp-paraminfo-param-helpformat": "Формат на помошните низи.",
-       "apihelp-paraminfo-param-querymodules": "Список на називи на модули за барања (вредност на параметарот prop=, meta= или list=). Користете го „$1modules=query+foo“ наместо „$1querymodules=foo“.",
-       "apihelp-paraminfo-param-mainmodule": "Добави информации и за главниот (врховен) модул. Користете го „$1modules=main“ наместо тоа.",
+       "apihelp-paraminfo-param-querymodules": "Список на називи на модули за барања (вредност на параметарот <var>prop</var>, <var>meta</var> или <var>list</var>). Користете го <kbd>$1modules=query+foo</kbd> наместо <kbd>$1querymodules=foo</kbd>.",
+       "apihelp-paraminfo-param-mainmodule": "Добави информации и за главниот (врховен) модул. Користете го <kbd>$1modules=main</kbd> наместо тоа.",
        "apihelp-paraminfo-param-pagesetmodule": "Дај ги сите информации и за модулот на збирот страници (укажувајќи titles= и сродни).",
-       "apihelp-paraminfo-param-formatmodules": "Список на називи на форматни модули (вредностза параметарот format=). Наместо тоа, користете го „$1modules“.",
+       "apihelp-paraminfo-param-formatmodules": "Список на називи на форматни модули (вредностза параметарот <var>format</var>). Наместо тоа, користете го <var>$1modules</var>.",
        "apihelp-parse-param-summary": "Опис за расчленување.",
        "apihelp-parse-param-preview": "Расчлени во прегледен режим.",
        "apihelp-parse-param-sectionpreview": "Расчлени во прегледен режим на поднасловот (го овозможува и прегледниот режим).",
        "apihelp-protect-param-reason": "Причиина за (од)заштитување",
        "apihelp-protect-example-protect": "Заштити страница",
        "apihelp-purge-param-forcelinkupdate": "Поднови ги табелите со врски.",
-       "apihelp-purge-example-simple": "Превчитај ги „Главна страница“ и „Извршник“",
+       "apihelp-purge-example-simple": "Превчитај ги <kbd>Главна страница</kbd> и <kbd>Извршник</kbd>.",
        "apihelp-query-param-list": "Кои списоци да се набават.",
        "apihelp-query-param-meta": "Кои метаподатоци да се набават.",
        "apihelp-query+allcategories-description": "Наброј ги сите категории.",
        "apihelp-query+allcategories-param-dir": "Насока на подредувањето.",
        "apihelp-query+alldeletedrevisions-param-from": "Почни го исписот од овој наслов.",
        "apihelp-query+alldeletedrevisions-param-to": "Запри го исписот на овој наслов.",
-       "apihelp-query+alldeletedrevisions-example-user": "СпиÑ\81ок Ð½Ð° Ð¿Ð¾Ñ\81ледниÑ\82е 50 Ð¸Ð·Ð±Ñ\80иÑ\88ани Ð¿Ñ\80идонеÑ\81и Ð½Ð° Ð\9aоÑ\80иÑ\81ник:Ð\9fÑ\80имеÑ\80",
-       "apihelp-query+alldeletedrevisions-example-ns-main": "Список на последните 50 избришани преработки во главниот именски простор",
-       "apihelp-query+allimages-example-B": "Прикажи список на податотеки што почнуваат со буквата „Б“",
+       "apihelp-query+alldeletedrevisions-example-user": "СпиÑ\81ок Ð½Ð° Ð¿Ð¾Ñ\81ледниÑ\82е 50 Ð¸Ð·Ð±Ñ\80иÑ\88ани Ð¿Ñ\80идонеÑ\81и Ð½Ð° ÐºÐ¾Ñ\80иÑ\81никоÑ\82 <kbd>Ð\9fÑ\80имеÑ\80<kbd>.",
+       "apihelp-query+alldeletedrevisions-example-ns-main": "Список на последните 50 избришани преработки во главниот именски простор.",
+       "apihelp-query+allimages-example-B": "Прикажи список на податотеки што почнуваат со буквата <kbd>Б</kbd>.",
        "apihelp-query+allimages-example-recent": "Прикажи список на неодамна подигнати податотеки сличен на [[Special:NewFiles]]",
-       "apihelp-query+allimages-example-generator": "Прикажи информации за околу 4 податотеки што почнуваат со буквата „Т“",
+       "apihelp-query+allimages-example-generator": "Прикажи информации за околу 4 податотеки што почнуваат со буквата <kbd>Т</kbd>.",
        "apihelp-query+alllinks-description": "Наброј ги сите врски што водат кон даден именски простор.",
        "apihelp-query+alllinks-param-from": "Наслов на врската од која ќе почне набројувањето.",
        "apihelp-query+alllinks-param-to": "Наслов на врската на која ќе запре набројувањето.",
        "apihelp-query+alllinks-param-prefix": "Пребарај ги сите сврзани наслови што почнуваат со оваа вредност.",
-       "apihelp-query+alllinks-param-unique": "Прикажувај само различни поврзани наслови. Не може да се користи со $1prop=ids.\nКога се користи како создавач, дава целни страници наместо изворни.",
+       "apihelp-query+alllinks-param-unique": "Прикажувај само различни поврзани наслови. Не може да се користи со <kbd>$1prop=ids</kbd>.\nКога се користи како создавач, дава целни страници наместо изворни.",
+       "apihelp-query+alllinks-param-prop": "Кои информации да се вклучат:\n;ids:Ја додава назнаката на страницата на која е врската (не може да се користи со <var>$1unique</var>).\n;title:Го додава насловот на врската.",
        "apihelp-query+alllinks-param-namespace": "Именскиот простор што се набројува.",
        "apihelp-query+alllinks-param-limit": "Колку вкупно ставки да се дадат.",
        "apihelp-query+alllinks-param-dir": "Насока на исписот.",
-       "apihelp-query+alllinks-example-B": "Списока на наслови со врски, вклучувајќи ги отсутните, со назнаки на нивните страници, почнувајќи од Б",
+       "apihelp-query+alllinks-example-B": "Списока на наслови со врски, вклучувајќи ги отсутните, со назнаки на нивните страници, почнувајќи од <kbd>Б</kbd>.",
        "apihelp-query+alllinks-example-unique": "Испиши единствени наслови со врски",
        "apihelp-query+alllinks-example-unique-generator": "Ги дава сите наслови со врски, означувајќи ги отсутните",
        "apihelp-query+alllinks-example-generator": "Дава страници што ги содржат врските",
        "apihelp-query+allmessages-param-to": "Дај пораки што завршуваат со оваа порака.",
        "apihelp-query+allmessages-param-title": "Назив на страницата што ќе се користи во контекст кога се расчленува порака (за можноста $1enableparser).",
        "apihelp-query+allmessages-param-prefix": "Дај пораки со оваа претставка.",
-       "apihelp-query+allmessages-example-ipb": "Прикажи ги пораките што започнуваат со „ipb-“",
-       "apihelp-query+allmessages-example-de": "Прикажи ги пораките „август“ и „главна страница“ на германски",
+       "apihelp-query+allmessages-example-ipb": "Прикажи ги пораките што започнуваат со <kbd>ipb-</kbd>.",
+       "apihelp-query+allmessages-example-de": "Прикажи ги пораките <kbd>august</kbd> and <kbd>mainpage</kbd> на германски.",
        "apihelp-query+allpages-description": "Наброј ги сите страници последователно во даден именски простор.",
        "apihelp-query+allpages-param-from": "Наслов на страницата од која ќе почне набројувањето.",
        "apihelp-query+allpages-param-to": "Наслов на страницата на која ќе запре набројувањето.",
        "apihelp-query+allpages-param-minsize": "Ограничи на страници со барем олку бајти.",
        "apihelp-query+allpages-param-maxsize": "Ограничи на страници со највеќе олку бајти.",
        "apihelp-query+allpages-param-prtype": "Ограничи на само заштитени страници.",
-       "apihelp-query+backlinks-example-simple": "Прикажи врски до [[Главна страница|Главната страница]]",
-       "apihelp-query+backlinks-example-generator": "Дава информации за страниците што водат до [[Главна страница|Главната страница]]",
+       "apihelp-query+backlinks-example-simple": "Прикажи врски до <kbd>Главна страница<kbd>.",
+       "apihelp-query+backlinks-example-generator": "Дава информации за страниците што водат до <kbd>Главна страница<kbd>.",
        "apihelp-query+blocks-description": "Список на сите блокирани корисници и IP-адреси",
        "apihelp-query+blocks-param-start": "Од кој датум и време да почне набројувањето.",
        "apihelp-query+blocks-param-end": "На кој датум и време да запре набројувањето.",
        "apihelp-query+blocks-param-ids": "Список на назнаки на блоковите за испис (незадолжително)",
        "apihelp-query+blocks-param-users": "Список на корисници што ќе се пребаруваат (незадолжително)",
+       "apihelp-query+deletedrevs-paraminfo-modes": "{{PLURAL:$1|Режим|Режими}}: $2",
        "apihelp-query+imageinfo-param-urlheight": "Слично на $1urlwidth.",
-       "apihelp-query+revisions-example-last5": "Дај ги последните 5 преработки на „Главна страница“",
-       "apihelp-query+revisions-example-first5": "Дај ги првите 5 преработки на „Главна страница“",
-       "apihelp-query+revisions-example-first5-after": "Дај ги првите 5 преработки на „Главна страница“ направени по 2006-05-01 (1 мај 2006 г.)",
-       "apihelp-query+revisions-example-first5-not-localhost": "Дај ги првите 5 преработки на „Главна страница“ кои не се направени од анонимниот корисник „127.0.0.1“",
-       "apihelp-query+revisions-example-first5-user": "Дај ги првите 5 преработки на „Главна страница“ кои се направени од корисникот „зададен од МедијаВики“ (MediaWiki default)",
-       "apihelp-query+search-example-simple": "Побарај „meaning“",
-       "apihelp-query+search-example-text": "Побарај го „meaning“ по текстовите",
-       "apihelp-query+search-example-generator": "Дај информации за страниците што излегуваат во резултатите од пребарувањето на „meaning“",
+       "apihelp-query+revisions-example-last5": "Дај ги последните 5 преработки на <kbd>Главна страница</kbd>.",
+       "apihelp-query+revisions-example-first5": "Дај ги првите 5 преработки на <kbd>Главна страница</kbd>.",
+       "apihelp-query+revisions-example-first5-after": "Дај ги првите 5 преработки на <kbd>Главна страница</kbd> направени по 2006-05-01 (1 мај 2006 г.)",
+       "apihelp-query+revisions-example-first5-not-localhost": "Дај ги првите 5 преработки на <kbd>Главна страница</kbd> кои не се направени од анонимниот корисник „127.0.0.1“",
+       "apihelp-query+revisions-example-first5-user": "Дај ги првите 5 преработки на <kbd>Главна страница</kbd> кои се направени од корисникот „зададен од МедијаВики“ (<kbd>MediaWiki default</kbd>)",
+       "apihelp-query+search-example-simple": "Побарај <kbd>meaning</kbd>.",
+       "apihelp-query+search-example-text": "Побарај го <kbd>meaning</kbd> по текстовите.",
+       "apihelp-query+search-example-generator": "Дај информации за страниците што излегуваат во резултатите од пребарувањето на <kbd>meaning</kbd>.",
        "apihelp-query+siteinfo-description": "Дај општи информации за мрежното место.",
        "apihelp-upload-param-filename": "Целно име на податотеката.",
-       "apihelp-upload-param-comment": "Коментар при подигање. Се користи и како првичен текст на страницата за нови податотеки ако не е укажано „$1text“.",
+       "apihelp-upload-param-comment": "Коментар при подигање. Се користи и како првичен текст на страницата за нови податотеки ако не е укажано <var>$1text</var>.",
        "apihelp-upload-param-text": "Првичен текст на страницата за нови податотеки.",
        "apihelp-upload-param-watch": "Набљудувај ја страницата.",
-       "apihelp-upload-param-watchlist": "Безусловно додај или отстрани ја страницата од набљудуваните, користете ги нагодувањата или не ги менувајте набљудуваните.",
+       "apihelp-upload-param-watchlist": "Безусловно додај или отстрани ја страницата од набљудуваните на тековниот корисник; користете ги нагодувањата или не ги менувајте набљудуваните.",
        "apihelp-upload-param-ignorewarnings": "Занемари предупредувања.",
        "apihelp-upload-param-file": "Содржина на податотеката.",
        "apihelp-upload-param-url": "Од која URL-адреса да се преземе податотеката.",
        "apihelp-upload-param-statuskey": "Дај ја состојбата на подигнатост за овој податотечен клуч (подигање по URL-адреса).",
        "apihelp-upload-param-checkstatus": "Дај ја состојбата на подигнатост само за дадениот податотечен клуч.",
        "apihelp-upload-example-url": "Подигни од URL-адреса",
+       "apihelp-userrights-param-user": "Корисничко име.",
        "apihelp-userrights-param-userid": "Корисничка назнака.",
        "apihelp-userrights-param-add": "Стави го корисникот во следниве групи.",
        "apihelp-userrights-param-remove": "Отстрани го корисникот од следниве групи.",
        "apihelp-userrights-param-reason": "Причина за промената.",
-       "apihelp-watch-example-watch": "Набљудувај ја страницата „Главна страница“",
-       "apihelp-watch-example-unwatch": "Отстрани ја страницата „Главна страница“ од набљудуваните",
+       "apihelp-userrights-example-user": "Додај го корисникот <kbd>FooBot</kbd> во групата <kbd>bot</kbd> и отстрани го од групите <kbd>sysop</kbd> и <kbd>bureaucrat</kbd>.",
+       "apihelp-userrights-example-userid": "Додај го корисникот со назнака <kbd>123</kbd> во групата <kbd>bot</kbd> и отстрани го од групите <kbd>sysop</kbd> и <kbd>bureaucrat</kbd>.",
+       "apihelp-watch-description": "Додај или отстрани страници од набљудуваните на тековниот корисник.",
+       "apihelp-watch-param-title": "Страницата што се става во или отстранува од набљудуваните. Наместо ова, користете <var>$1titles</var>.",
+       "apihelp-watch-param-unwatch": "Ако е зададено, страницата ќе биде отстранета од наместо ставена во набљуваните.",
+       "apihelp-watch-example-watch": "Набљудувај ја страницата <kbd>Главна страница</kbd>.",
+       "apihelp-watch-example-unwatch": "Отстрани ја страницата <kbd>Главна страница</kbd> од набљудуваните.",
        "apihelp-watch-example-generator": "Набљудувај ги првите неколку страници во главниот именски простор",
        "apihelp-format-example-generic": "Форматирај го резултатот од барањето во $1-формат",
-       "apihelp-dbg-description": "Давај го изводот во PHP-форматот var_export().",
-       "apihelp-dbgfm-description": "Давај го изводот во PHP-форматот var_export() (подобрен испис во HTML).",
-       "apihelp-dump-description": "Давај го изводот во PHP-форматот var_dump().",
-       "apihelp-dumpfm-description": "Давај го изводот во PHP-форматот var_dump() (подобрен испис во HTML).",
+       "apihelp-dbg-description": "Давај го изводот во PHP-форматот <code>var_export()</code> .",
+       "apihelp-dbgfm-description": "Давај го изводот во PHP-форматот <code>var_export()</code> (подобрен испис во HTML).",
+       "apihelp-dump-description": "Давај го изводот во PHP-форматот <code>var_dump()</code>.",
+       "apihelp-dumpfm-description": "Давај го изводот во PHP-форматот <code>var_dump()</code> (подобрен испис во HTML).",
        "apihelp-json-description": "Давај го изводот во JSON-формат.",
        "apihelp-json-param-callback": "Ако е укажано, го обвива изводот во даден повик на функција. За безбедност, ќе се ограничат сите податоци што се однесуваат на корисниците.",
-       "apihelp-json-param-utf8": "Ако е укажано, ја ги шифрира највеќето (но не сите) не-ASCII знаци како UTF-8 наместо да ги заменува со хексадецимални изводни низи.",
+       "apihelp-json-param-utf8": "Ако е укажано, ги шифрира највеќето (но не сите) не-ASCII знаци како UTF-8 наместо да ги заменува со хексадецимални изводни низи. Ова е стандардно кога <var>formatversion</var> не е <kbd>1</kbd>.",
+       "apihelp-json-param-ascii": "Ако е укажано, ги шифрира сите не-ASCII знаци како хексадецимални изводни низи. Ова е стандардно кога <var>formatversion</var> is <kbd>1</kbd>.",
+       "apihelp-json-param-formatversion": "Форматирање на изводот:\n;1:Назадно-складен формат (булови во XML-стил, клучеви <samp>*</samp> за содржински јазли и тн.).\n;2:Пробен современ формат. Поединостите може да се изменат!\n;најнов:Користење на најновиот формат (тековно <kbd>2</kbd>), може да се смени без предупредување.",
        "apihelp-jsonfm-description": "Давај го изводот во JSON-формат (подобрен испис во HTML).",
        "apihelp-none-description": "Де давај извод.",
        "apihelp-php-description": "Давај го изводот во серијализиран PHP-формат.",
+       "apihelp-php-param-formatversion": "Форматирање на изводот:\n;1:Назадно-складен формат (булови во XML-стил, клучеви <samp>*</samp> за содржински јазли и тн.).\n;2:Пробен современ формат. Поединостите може да се изменат!\n;најнов:Користење на најновиот формат (тековно <kbd>2</kbd>), може да се смени без предупредување.",
        "apihelp-phpfm-description": "Давај го изводот во серијализиран PHP-формат (подобрен испис во HTML).",
        "apihelp-rawfm-description": "Давај го изводот со елементи за отстранување грешки во JSON-формат (подобрен испис во HTML).",
-       "apihelp-txt-description": "Давај го изводот во PHP-форматот print_r().",
-       "apihelp-txtfm-description": "Давај го изводот во PHP-форматот print_r() (подобрен испис во HTML).",
+       "apihelp-txt-description": "Давај го изводот во PHP-форматот <code>print_r()</code>.",
+       "apihelp-txtfm-description": "Давај го изводот во PHP-форматот <code>print_r()</code> (подобрен испис во HTML).",
        "apihelp-wddx-description": "Давај го изводот во WDDX-формат.",
        "apihelp-wddxfm-description": "Давај го изводот во WDDX-формат (подобрен испис во HTML).",
        "apihelp-xml-description": "Давај го изводот во XML-формат.",
-       "apihelp-xml-param-xslt": "Ако е укажано, додава &lt;xslt&gt; како стилска страница. Ова треба да е викистраница во именскиот простор МедијаВики (MediaWiki) чиј наслов завршува со „.xsl“.",
+       "apihelp-xml-param-xslt": "Ако е укажано, ја додава именуваната страница како XSL-стилска страница. Вредноста мора да биде наслов во именскиот простор „{{ns:mediawiki}}“ што ќе завршува со <code>.xsl</code>.",
        "apihelp-xml-param-includexmlnamespace": "Ако е укажано, додава именски простор XML.",
        "apihelp-xmlfm-description": "Давај го изводот во XML-формат (подобрен испис во HTML).",
        "apihelp-yaml-description": "Давај го изводот во YAML-формат.",
        "apihelp-yamlfm-description": "Давај го изводот во YAML-формат (подобрен испис во HTML).",
        "api-format-title": "Резултат од Извршникот на МедијаВики",
-       "api-format-prettyprint-header": "Ð\88а Ð³Ð»ÐµÐ´Ð°Ñ\82е HTML-пÑ\80еÑ\82Ñ\81Ñ\82аваÑ\82а Ð½Ð° Ñ\84оÑ\80маÑ\82оÑ\82 $1. HTML Ðµ Ð´Ð¾Ð±Ð°Ñ\80 Ð·Ð° Ð¾Ñ\82Ñ\81Ñ\82Ñ\80анÑ\83ваÑ\9aе Ð½Ð° Ð³Ñ\80еÑ\88ки, Ð½Ð¾ Ð½Ðµ Ðµ Ð¿Ð¾Ð³Ð¾Ð´ÐµÐ½ Ð·Ð° Ñ\83поÑ\82Ñ\80еба Ð²Ð¾ Ð¸Ð·Ð²Ñ\80Ñ\88ник.\n\nУкажеÑ\82е Ð³Ð¾ Ð¿Ð°Ñ\80амеÑ\82аÑ\80оÑ\82 Ð·Ð° Ñ\84оÑ\80маÑ\82 Ð·Ð° Ð´Ð° Ð³Ð¾ Ñ\81мениÑ\82е Ð¸Ð·Ð²Ð¾Ð´Ð½Ð¸Ð¾Ñ\82 Ñ\84оÑ\80маÑ\82. Ð\97а Ð´Ð° Ð³Ð¸ Ð²Ð¸Ð´Ð¸Ñ\82е Ð¿Ñ\80еÑ\82Ñ\81Ñ\82авиÑ\82е Ð½Ð° Ñ\84оÑ\80маÑ\82оÑ\82 $1 Ð²Ð¾Ð½ HTML, Ð·Ð°Ð´Ð°Ñ\98Ñ\82е format=$2.\n\nÐ\9fовеÑ\9cе Ð¸Ð½Ñ\84оÑ\80маÑ\86ии Ñ\9cе Ð½Ð°Ñ\98деÑ\82е Ð½Ð° [https://www.mediawiki.org/wiki/API Ñ\86елоÑ\81наÑ\82а Ð´Ð¾ÐºÑ\83менÑ\82аÑ\86иÑ\98а], или пак [[Special:ApiHelp/main|помош со извршникот]].",
+       "api-format-prettyprint-header": "Ð\9eва Ðµ HTML-пÑ\80еÑ\82Ñ\81Ñ\82ава Ð½Ð° Ñ\84оÑ\80маÑ\82оÑ\82 $1. HTML Ðµ Ð´Ð¾Ð±Ð°Ñ\80 Ð·Ð° Ð¾Ñ\82Ñ\81Ñ\82Ñ\80анÑ\83ваÑ\9aе Ð½Ð° Ð³Ñ\80еÑ\88ки, Ð½Ð¾ Ð½Ðµ Ðµ Ð¿Ð¾Ð³Ð¾Ð´ÐµÐ½ Ð·Ð° Ñ\83поÑ\82Ñ\80еба Ð²Ð¾ Ð¸Ð·Ð²Ñ\80Ñ\88ник.\n\nУкажеÑ\82е Ð³Ð¾ Ð¿Ð°Ñ\80амеÑ\82аÑ\80оÑ\82 <var>format</var> Ð·Ð° Ð´Ð° Ð³Ð¾ Ñ\81мениÑ\82е Ð¸Ð·Ð²Ð¾Ð´Ð½Ð¸Ð¾Ñ\82 Ñ\84оÑ\80маÑ\82. Ð\97а Ð´Ð° Ð³Ð¸ Ð²Ð¸Ð´Ð¸Ñ\82е Ð¿Ñ\80еÑ\82Ñ\81Ñ\82авиÑ\82е Ð½Ð° Ñ\84оÑ\80маÑ\82оÑ\82 $1 Ð²Ð¾Ð½ HTML, Ð·Ð°Ð´Ð°Ñ\98Ñ\82е <kbd>format=$2</kbd>.\n\nÐ\9fовеÑ\9cе Ð¸Ð½Ñ\84оÑ\80маÑ\86ии Ñ\9cе Ð½Ð°Ñ\98деÑ\82е Ð½Ð° [[mw:API|Ñ\86елоÑ\81наÑ\82а Ð´Ð¾ÐºÑ\83менÑ\82аÑ\86иÑ\98а]], или пак [[Special:ApiHelp/main|помош со извршникот]].",
        "api-orm-param-props": "Полиња за пребарување.",
        "api-orm-param-limit": "Макс. број на редови во изводот.",
        "api-pageset-param-titles": "Список на наслови на кои ќе се работи",
        "api-pageset-param-pageids": "Список на назнаки за страници на кои ќе се работи",
        "api-pageset-param-revids": "Список на назнаки на преработки на кои ќе се работи",
-       "api-pageset-param-generator": "Дај го списокот на страници на кои ќе се работи исполнувајќи го укажаниот модул за барање.\n\n'''НАПОМЕНА:''' називите на создавачките параметри мора да ја имаат претставката „g“. Погледајте ги примерите.",
+       "api-pageset-param-generator": "Дај го списокот на страници на кои ќе се работи исполнувајќи го укажаниот модул за барање.\n\n<strong>Напомена:</strong> називите на создавачките параметри мора да ја имаат претставката „g“. Погледајте ги примерите.",
+       "api-pageset-param-redirects-generator": "Автоматски решавај пренасочувања во <var>$1titles</var>, <var>$1pageids</var> и <var>$1revids</var>, како и во страниците што ги дава <var>$1generator</var>.",
+       "api-pageset-param-redirects-nogenerator": "Автоамтски решавај пренасочувања во <var>$1titles</var>, <var>$1pageids</var> и <var>$1revids</var>.",
+       "api-pageset-param-converttitles": "Ако е потребно, претворај ги насловите во други варијанти. Работи само ако јазикот на викито поддржува претворање на варијанти. Такви се $1.",
        "api-help-title": "Помош со Извршникот на МедијаВики",
        "api-help-lead": "Ова е самосоздадена документациска страница за извршникот на МедијаВики.\n\nДокументација и примери: https://www.mediawiki.org/wiki/API",
        "api-help-main-header": "Главен модул",
        "api-help-flag-writerights": "За овој модул се потребни права на пишување.",
        "api-help-flag-mustbeposted": "Овој модул прифаќа само POST-барања.",
        "api-help-flag-generator": "Овој модул може да се користи како создавач.",
+       "api-help-source": "Извор: $1",
+       "api-help-source-unknown": "Извор: <span class=\"apihelp-unknown\">непознат</span>",
+       "api-help-license": "Лиценца: [[$1|$2]]",
+       "api-help-license-noname": "Лиценца: [[$1|Погл. врската]]",
+       "api-help-license-unknown": "Лиценца: <span class=\"apihelp-unknown\">непозната</span>",
        "api-help-parameters": "{{PLURAL:$1|Параметар|Параметри}}:",
        "api-help-param-deprecated": "Застарен.",
        "api-help-param-required": "Овој параметар е задолжителен.",
-       "api-help-param-list": "{{PLURAL:$1|1=Една вредност|2=Вредности (одделени со „{{!}}“)}}: $2",
+       "api-help-datatypes-header": "Типови на податоци",
+       "api-help-param-type-limit": "Тип: цел број или <kbd>max</kbd>",
+       "api-help-param-type-integer": "Тип: {{PLURAL:$1|1=цел број|2=список на цели броеви}}",
+       "api-help-param-type-boolean": "Тип: булов ([[Special:ApiHelp/main#main/datatypes|подробно]])",
+       "api-help-param-type-timestamp": "Тип: {{PLURAL:$1|1=време и датум|2=список на времиња и датуми}} ([[Special:ApiHelp/main#main/datatypes|допуштени формати]])",
+       "api-help-param-type-user": "Тип: {{PLURAL:$1|1=корисничко име|2=список на кориснички имиња}}",
+       "api-help-param-list": "{{PLURAL:$1|1=Една вредност|2=Вредности (одделете ги со <kbd>{{!}}</kbd>)}}: $2",
        "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Мора да биде празно|Може да биде празно или $2}}",
        "api-help-param-limit": "Не се допушта повеќе од $1.",
        "api-help-param-limit2": "Не се допушта повеќе од $1 ($2 за ботови).",
        "api-help-param-integer-max": "{{PLURAL:$1|1=Вредноста не може да изнесува|2=Вредностите е може да изнесуваат}} повеќе од $3.",
        "api-help-param-integer-minmax": "{{PLURAL:$1|1=Вредноста мора да изнесува|2=Вредностите мораат да изнесуваат}} помеѓу $2 и $3.",
        "api-help-param-upload": "Мора да биде објавено како податотечно подигање користејќи податоци кои се повеќеделни или од образец.",
-       "api-help-param-multi-separate": "Одделувајте ги вредностите со „|“.",
+       "api-help-param-multi-separate": "Одделувајте ги вредностите со <kbd>|</kbd>.",
        "api-help-param-multi-max": "Максималниот број на вредности изнесува {{PLURAL:$1|$1}} ({{PLURAL:$2|$2}} за ботови).",
        "api-help-param-default": "По основно: $1",
        "api-help-param-default-empty": "По основно: <span class=\"apihelp-empty\">(празно)</span>",
        "api-help-param-token": "Шифра „$1“ добиена од [[Special:ApiHelp/query+tokens|action=query&meta=tokens]]",
        "api-help-param-token-webui": "За складност, се прифаќа и шифрата што се користи за обичниот кориснички посредник.",
-       "api-help-param-disabled-in-miser-mode": "Исклучено поради [https://www.mediawiki.org/wiki/Manual:$wgMiserMode скржавиот режим].",
+       "api-help-param-disabled-in-miser-mode": "Исклучено поради [[mw:Manual:$wgMiserMode|скржавиот режим]].",
+       "api-help-param-limited-in-miser-mode": "<strong>Напомена:</strong> Бидејќи сте во [[mw:Manual:$wgMiserMode|скржав режим]], користејќи го ова може да добиете помалку од <var>$1limit</var> резултати пред да продолжите; во крајни случаи може да не добиете ниеден резултат.",
+       "api-help-param-direction": "Во која насока да се набројува:\n;понови:Прво најстарите. Напомена: $1start мора да биде пред $1end.\n;постари:Прво најновите (по основно). Напомена: $1start мора да биде подоцна од $1end.",
+       "api-help-param-continue": "Употребете го ова за да продолжите кога има повеќе расположиви резултати.",
        "api-help-param-no-description": "<span class=\"apihelp-empty\">(нема опис)</span>",
        "api-help-examples": "{{PLURAL:$1|Пример|Примери}}:",
        "api-help-permissions": "{{PLURAL:$1|Дозвола|Дозволи}}:",
index 3b6f8ea..c4ade1a 100644 (file)
@@ -37,6 +37,8 @@
        "apihelp-expandtemplates-param-title": "Títol de la pagina.",
        "apihelp-expandtemplates-param-text": "Wikitèxte de convertir.",
        "apihelp-feedcontributions-param-feedformat": "Lo format del flux.",
+       "apihelp-feedcontributions-param-year": "A partir de l’annada (e mai recent) :",
+       "apihelp-feedcontributions-param-month": "A partir del mes (e mai recent) :",
        "apihelp-feedrecentchanges-param-feedformat": "Lo format del flux.",
        "apihelp-feedrecentchanges-param-tagfilter": "Filtrar per balisa.",
        "apihelp-filerevert-param-comment": "Telecargar lo comentari.",
@@ -47,6 +49,7 @@
        "apihelp-login-param-password": "Senhal.",
        "apihelp-login-param-domain": "Domeni (facultatiu).",
        "apihelp-login-example-login": "Se connectar.",
+       "apihelp-managetags-description": "Efectuar de prètzfaches de gestion relatius a la modificacion de las balisas.",
        "apihelp-move-description": "Desplaçar una pagina.",
        "apihelp-opensearch-param-search": "Cadena de recèrca.",
        "apihelp-parse-example-page": "Analisar una pagina.",
index 22fa657..a9f569f 100644 (file)
        "apihelp-block-param-user": "Nazwa użytkownika, adres IP lub zakres adresów IP, które chcesz zablokować.",
        "apihelp-block-param-reason": "Powód blokady.",
        "apihelp-block-param-nocreate": "Zapobiegnij utworzeniu konta.",
-       "apihelp-block-param-watchuser": "Obserwuj stronę użytkownika i jego IP oraz jego stronę dyskusji.",
+       "apihelp-block-param-watchuser": "Obserwuj stronę użytkownika i jego IP oraz ich strony dyskusji.",
        "apihelp-block-example-ip-simple": "Zablokuj IP <kbd>192.0.2.5</kbd> na 3 dni za <kbd>Pierwszy atak</kbd>.",
+       "apihelp-block-example-user-complex": "Zablokuj użytkownika <kbd>Vandal</kbd> na zawsze za <kbd>Vandalism</kbd> i uniemożliwij utworzenie nowego konta oraz wysyłanie emaili.",
+       "apihelp-checktoken-param-type": "Typ tokenu do przetestowania.",
+       "apihelp-checktoken-param-token": "Token do przetestowania.",
+       "apihelp-checktoken-param-maxtokenage": "Maksymalny wiek tokenu, w sekundach.",
+       "apihelp-compare-param-fromtitle": "Pierwszy tytuł do porównania.",
+       "apihelp-compare-param-fromrev": "Pierwsza wersja do porównania.",
+       "apihelp-compare-param-totitle": "Drugi tytuł do porównania.",
+       "apihelp-compare-param-toid": "Numer drugiej strony do porównania.",
+       "apihelp-compare-param-torev": "Druga wersja do porównania.",
+       "apihelp-createaccount-description": "Utwórz nowe konto.",
        "apihelp-createaccount-param-name": "Nazwa użytkownika",
+       "apihelp-createaccount-param-domain": "Domena uwierzytelniania zewnętrznego (opcjonalnie).",
+       "apihelp-createaccount-param-token": "Token tworzenia konta uzyskany w pierwszym zapytaniu.",
+       "apihelp-createaccount-param-email": "Adres email użytkownika (opcjonalne).",
+       "apihelp-createaccount-param-realname": "Prawdziwe imię i nazwisko użytkownika (opcjonalne).",
+       "apihelp-createaccount-param-reason": "Opcjionalny powód tworzenia konta (aby został umieszczony w logu).",
+       "apihelp-createaccount-example-pass": "Utwórz użytkownika <kbd>testuser</kbd> z hasłem <kbd>test123</kbd>.",
        "apihelp-delete-description": "Usuń stronę.",
-       "apihelp-delete-param-watch": "Dodaj stronę do twojej listy obserwowanych.",
-       "apihelp-delete-param-unwatch": "Usuń stronę z twojej listy obserwowanych.",
-       "apihelp-delete-example-simple": "Usuń stronę główną",
+       "apihelp-delete-param-watch": "Dodaj stronę do obecnej listy obserwowanych.",
+       "apihelp-delete-param-unwatch": "Usuń stronę z obecnej listy obserwowanych.",
+       "apihelp-delete-example-simple": "Usuń <kbd>Stronę Główną</kbd>.",
        "apihelp-disabled-description": "Ten moduł został wyłączony.",
        "apihelp-edit-description": "Utwórz i edytuj strony.;",
+       "apihelp-edit-param-sectiontitle": "Tytuł nowej sekcji.",
        "apihelp-edit-param-text": "Zawartość strony.",
        "apihelp-edit-param-minor": "Drobna zmiana.",
        "apihelp-edit-param-notminor": "Nie drobna zmiana.",
        "apihelp-edit-param-bot": "Oznacz tę edycję jako edycję bota.",
+       "apihelp-edit-param-createonly": "Nie edytuj strony, jesli już istnieje.",
        "apihelp-edit-param-watch": "Dodaj stronę do aktualnej listy obserwacji użytkownika.",
        "apihelp-edit-param-unwatch": "Usuń stronę z aktualnej listy obserwacji użytkownika.",
+       "apihelp-edit-param-redirect": "Automatycznie rozwiązuj przekierowania.",
        "apihelp-edit-example-edit": "Edytuj stronę",
        "apihelp-emailuser-description": "Wyślij e‐mail do użytkownika.",
+       "apihelp-emailuser-param-target": "Użytkownik, do którego wysyłany jest e-mail.",
+       "apihelp-emailuser-param-text": "Treść emaila.",
+       "apihelp-emailuser-param-ccme": "Wyślij kopię wiadomości do mnie.",
+       "apihelp-expandtemplates-param-title": "Tytuł strony.",
+       "apihelp-expandtemplates-param-text": "Wikitext do przekonwertowania.",
+       "apihelp-feedrecentchanges-param-namespace": "Przestrzeń nazw, do której ograniczone są wyniki.",
+       "apihelp-feedrecentchanges-param-invert": "Wszystkie przestrzenie nazw oprócz wybranej.",
+       "apihelp-feedrecentchanges-param-limit": "Maksymalna liczba zwracanych wyników.",
+       "apihelp-feedrecentchanges-param-hideminor": "Ukryj drobne zmiany.",
+       "apihelp-feedrecentchanges-param-hidebots": "Ukryj zmiany zrobione przez boty.",
+       "apihelp-feedrecentchanges-param-hideanons": "Ukryj zmiany zrobione przez anonimowych użytkowników.",
+       "apihelp-feedrecentchanges-param-hideliu": "Ukryj zmiany zrobione przez zarejestrowanych użytkowników.",
+       "apihelp-feedrecentchanges-param-hidepatrolled": "Ukryj sprawdzone zmiany.",
+       "apihelp-feedrecentchanges-param-hidemyself": "Ukryj zmiany zrobione przez obecnego użytkownika.",
+       "apihelp-feedrecentchanges-param-tagfilter": "Filtruj po znacznikach.",
        "apihelp-feedrecentchanges-example-simple": "Pokaż ostatnie zmiany.",
+       "apihelp-feedrecentchanges-example-30days": "Pokaż ostatnie zmiany z 30 dni.",
+       "apihelp-filerevert-description": "Przywróć plik do starej wersji.",
+       "apihelp-filerevert-param-filename": "Docelowa nazwa pliku bez prefiksu Plik:",
+       "apihelp-filerevert-param-comment": "Prześlij komentarz.",
        "apihelp-help-description": "Wyświetl pomoc dla określonych modułów.",
        "apihelp-help-param-modules": "Moduły do wyświetlenia pomocy dla (wartości <var>action</var> i <var>format</var> parametry, lub <kbd>main</kbd>). Może określić podmoduły z <kbd>+</kbd>.",
        "apihelp-help-param-recursivesubmodules": "Zawiera pomoc dla podmodułów rekursywnie.",
        "apihelp-help-example-main": "Pomoc dla modułu głównego",
        "apihelp-help-example-recursive": "Cała pomoc na jednej stronie.",
        "apihelp-help-example-help": "Pomoc dla modułu pomocy",
+       "apihelp-imagerotate-description": "Obróć jeden lub wiecej obrazków.",
+       "apihelp-imagerotate-param-rotation": "Stopni w prawo, aby obrócić zdjęcie.",
+       "apihelp-import-param-xml": "Przesłany plik XML.",
        "apihelp-login-param-name": "Nazwa użytkownika.",
        "apihelp-login-param-password": "Hasło.",
+       "apihelp-login-param-domain": "Domena (opcjonalnie).",
+       "apihelp-login-param-token": "Token logowania zdobyty w pierwszym zapytaniu.",
+       "apihelp-login-example-gettoken": "Zdobądź token logowania.",
        "apihelp-login-example-login": "Zaloguj się",
+       "apihelp-logout-description": "Wyloguj i wyczyść dane sesji.",
+       "apihelp-logout-example-logout": "Wyloguj obecnego użytkownika.",
        "apihelp-managetags-param-ignorewarnings": "Czy zignorować ostrzeżenia, które pojawiają się w trakcie operacji.",
        "apihelp-move-description": "Przenieś stronę.",
        "apihelp-move-param-reason": "Powód zmiany nazwy.",
+       "apihelp-move-param-movetalk": "Zmień nazwę strony dyskusji, jeśli istnieje.",
+       "apihelp-move-param-noredirect": "Nie twórz przekierowania.",
        "apihelp-move-param-ignorewarnings": "Ignoruj wszystkie ostrzeżenia.",
+       "apihelp-opensearch-param-search": "Wyszukaj tekst.",
+       "apihelp-opensearch-param-limit": "Maksymalna liczba zwracanych wyników.",
+       "apihelp-opensearch-param-namespace": "Przestrzenie nazw do przeszukania.",
+       "apihelp-opensearch-param-format": "Format danych wyjściowych.",
+       "apihelp-opensearch-example-te": "Znajdź strony zaczynające się od <kbd>Te</kbd>.",
+       "apihelp-options-example-reset": "Resetuj wszystkie preferencje.",
+       "apihelp-paraminfo-description": "Zdobądź informacje o modułach API.",
+       "apihelp-patrol-description": "Sprawdź stronę lub edycję.",
+       "apihelp-patrol-param-revid": "Numer edycji do sprawdzenia.",
+       "apihelp-patrol-example-rcid": "Sprawdź ostatnią zmianę.",
+       "apihelp-patrol-example-revid": "Sprawdź edycje.",
+       "apihelp-protect-description": "Zmień poziom zabezpieczenia strony.",
+       "apihelp-protect-param-reason": "Powód zabezpieczania/odbezpieczania.",
+       "apihelp-protect-param-cascade": "Włacz ochronę kaskadową (chronione są wszystkie strony zawarte w tej stronie). Ignorowane jeśli wszystkie poziomy ochrony nie wspierają kaskadowania.",
        "apihelp-protect-example-protect": "Zabezpiecz stronę",
        "apihelp-query+allpages-example-B": "Pokaż listę stron rozpoczynających się na literę <kbd>B</kbd>.",
+       "apihelp-query+allredirects-description": "Lista wszystkich przekierowań do przestrzeni nazw.",
+       "apihelp-query+categorymembers-description": "Wszystkie strony w danej kategorii.",
        "apihelp-query+filearchive-example-simple": "Pokaż listę wszystkich usuniętych plików.",
        "apihelp-query+imageinfo-paramvalue-prop-canonicaltitle": "Dodaje kanoniczny tytuł pliku.",
        "apihelp-query+imageinfo-paramvalue-prop-dimensions": "Alias rozmiaru.",
        "apihelp-query+recentchanges-example-simple": "Lista ostatnich zmian.",
        "apihelp-query+search-description": "Wykonaj wyszukiwanie pełnotekstowe.",
        "apihelp-query+watchlist-param-excludeuser": "Nie wyświetlaj zmian wykonanych przez tego użytkownika.",
+       "apihelp-tag-param-reason": "Powód zmiany.",
        "apihelp-unblock-param-reason": "Powód odblokowania.",
        "apihelp-undelete-param-reason": "Powód przywracania.",
        "apihelp-upload-param-filename": "Nazwa pliku docelowego.",
index 876f598..24b63e0 100644 (file)
        "apihelp-parse-param-pageid": "{{doc-apihelp-param|parse|pageid}}",
        "apihelp-parse-param-redirects": "{{doc-apihelp-param|parse|redirects}}",
        "apihelp-parse-param-oldid": "{{doc-apihelp-param|parse|oldid}}",
-       "apihelp-parse-param-prop": "{{doc-apihelp-param|parse|prop}}",
+       "apihelp-parse-param-prop": "{{doc-apihelp-param|parse|prop|paramvalues=1}}",
+       "apihelp-parse-paramvalue-prop-text": "{{doc-apihelp-paramvalue|parse|prop|text}}",
+       "apihelp-parse-paramvalue-prop-langlinks": "{{doc-apihelp-paramvalue|parse|prop|langlinks}}",
+       "apihelp-parse-paramvalue-prop-categories": "{{doc-apihelp-paramvalue|parse|prop|categories}}",
+       "apihelp-parse-paramvalue-prop-categorieshtml": "{{doc-apihelp-paramvalue|parse|prop|categorieshtml}}",
+       "apihelp-parse-paramvalue-prop-links": "{{doc-apihelp-paramvalue|parse|prop|links}}",
+       "apihelp-parse-paramvalue-prop-templates": "{{doc-apihelp-paramvalue|parse|prop|templates}}",
+       "apihelp-parse-paramvalue-prop-images": "{{doc-apihelp-paramvalue|parse|prop|images}}",
+       "apihelp-parse-paramvalue-prop-externallinks": "{{doc-apihelp-paramvalue|parse|prop|externallinks}}",
+       "apihelp-parse-paramvalue-prop-sections": "{{doc-apihelp-paramvalue|parse|prop|sections}}",
+       "apihelp-parse-paramvalue-prop-revid": "{{doc-apihelp-paramvalue|parse|prop|revid}}",
+       "apihelp-parse-paramvalue-prop-displaytitle": "{{doc-apihelp-paramvalue|parse|prop|displaytitle}}",
+       "apihelp-parse-paramvalue-prop-headitems": "{{doc-apihelp-paramvalue|parse|prop|headitems}}",
+       "apihelp-parse-paramvalue-prop-headhtml": "{{doc-apihelp-paramvalue|parse|prop|headhtml}}",
+       "apihelp-parse-paramvalue-prop-modules": "{{doc-apihelp-paramvalue|parse|prop|modules}}",
+       "apihelp-parse-paramvalue-prop-jsconfigvars": "{{doc-apihelp-paramvalue|parse|prop|jsconfigvars}}",
+       "apihelp-parse-paramvalue-prop-encodedjsconfigvars": "{{doc-apihelp-paramvalue|parse|prop|encodedjsconfigvars}}",
+       "apihelp-parse-paramvalue-prop-indicators": "{{doc-apihelp-paramvalue|parse|prop|indicators}}",
+       "apihelp-parse-paramvalue-prop-iwlinks": "{{doc-apihelp-paramvalue|parse|prop|iwlinks}}",
+       "apihelp-parse-paramvalue-prop-wikitext": "{{doc-apihelp-paramvalue|parse|prop|wikitext}}",
+       "apihelp-parse-paramvalue-prop-properties": "{{doc-apihelp-paramvalue|parse|prop|properties}}",
+       "apihelp-parse-paramvalue-prop-limitreportdata": "{{doc-apihelp-paramvalue|parse|prop|limitreportdata}}",
+       "apihelp-parse-paramvalue-prop-limitreporthtml": "{{doc-apihelp-paramvalue|parse|prop|limitreporthtml}}",
        "apihelp-parse-param-pst": "{{doc-apihelp-param|parse|pst}}",
        "apihelp-parse-param-onlypst": "{{doc-apihelp-param|parse|onlypst}}",
        "apihelp-parse-param-effectivelanglinks": "{{doc-apihelp-param|parse|effectivelanglinks}}",
index c47d254..04e9a43 100644 (file)
@@ -1,9 +1,12 @@
 {
        "@metadata": {
                "authors": [
-                       "AntanO"
+                       "AntanO",
+                       "கலைவாணன்"
                ]
        },
+       "apihelp-import-param-namespace": "இதனைப் பெயர்வெளிக்கு இறக்குமதி செய்யவும். <kbd>$1rootpage</kbd> அளவுருவை மீறச்செய்யும்.",
+       "apihelp-import-param-rootpage": "இப்பக்கத்தின் துணைப்பக்கமாக இறக்குமதி செய்யவும். <kbd>$1namespace</kbd> அளவுரு வழங்கப்பட்டிருந்தால் இது புறக்கணிக்கப்படும்.",
        "api-help-source": "மூலம்: $1",
        "api-help-license": "அனுமதி: [[$1|$2]]",
        "api-help-license-noname": "அனுமதி: [[$1|இணைப்பைப் பார்]]"
index e49d68f..ff265cd 100644 (file)
        "apihelp-import-param-interwikipage": "用于跨wiki导入:导入的页面。",
        "apihelp-import-param-fullhistory": "用于跨wiki导入:完整导入历史,而不只是最新版本。",
        "apihelp-import-param-templates": "用于跨wiki导入:连带导入所有包含的模板。",
-       "apihelp-import-param-namespace": "用于跨wiki导入:导入到此名字空间。",
-       "apihelp-import-param-rootpage": "导入作为此页面的子页面。",
+       "apihelp-import-param-namespace": "导入至此名字空间。重写<kbd>$1rootpage</kbd>参数。",
+       "apihelp-import-param-rootpage": "作为此页面的子页面导入。如果提供<kbd>$1namespace</kbd>参数则忽略。",
        "apihelp-import-example-import": "将页面[[meta:Help:Parserfunctions]]连带完整历史导入至100名字空间。",
        "apihelp-login-description": "登录并获得身份验证Cookie。\n\n在成功登录的情况下,所需的Cookie将包含在HTTP响应头中。在登录失败的情况下,进一步的尝试可能会被自动密码猜解攻击的限制所遏制。",
        "apihelp-login-param-name": "用户名。",
        "apihelp-parse-param-pageid": "解析此页的内容。覆盖<var>$1page</var>。",
        "apihelp-parse-param-redirects": "如果<var>$1page</var>或<var>$1pageid</var>被设置为一个重定向,则解析它。",
        "apihelp-parse-param-oldid": "解析该修订版本的内容。覆盖<var>$1page</var>和<var>$1pageid</var>。",
+       "apihelp-parse-paramvalue-prop-categorieshtml": "提供HTML版本分类。",
+       "apihelp-parse-paramvalue-prop-modules": "提供在页面中使用的ResourceLoader模块。",
        "apihelp-parse-param-pst": "在解析输入前,对输入做一次保存前变换处理。仅当使用文本时有效。",
        "apihelp-parse-param-effectivelanglinks": "包含由扩展提供的语言链接(用于与<kbd>$1prop=langlinks</kbd>一起使用)。",
        "apihelp-parse-param-section": "只检索此段数的内容,或只当<kbd>new</kbd>生成新的段落时检索。\n\n<kbd>new</kbd>段落只当指定<var>text</var>时受尊重。",
        "apihelp-query+allfileusages-param-prop": "要包含的信息束:\n;ids:添加使用中的页面的页面ID(不能与$1unique一起使用)。\n;title:添加文件的标题。",
        "apihelp-query+allfileusages-param-limit": "要返回的总计项目。",
        "apihelp-query+allfileusages-param-dir": "罗列所采用的方向。",
-       "apihelp-query+allfileusages-example-unique": "列出唯一性的文件标题",
-       "apihelp-query+allfileusages-example-unique-generator": "获取所有文件标题,并标记出缺失者",
-       "apihelp-query+allfileusages-example-generator": "获取包含这些文件的页面",
+       "apihelp-query+allfileusages-example-B": "列举文件标题,包含丢失的文件、它们来自的页面ID,以<kbd>B</kbd>开头。",
+       "apihelp-query+allfileusages-example-unique": "列出唯一文件标题。",
+       "apihelp-query+allfileusages-example-unique-generator": "获取所有文件标题,并标记出缺失者。",
+       "apihelp-query+allfileusages-example-generator": "获取包含这些文件的页面。",
        "apihelp-query+allimages-description": "按顺序枚举所有图像。",
        "apihelp-query+allimages-param-sort": "要作为排序方式的属性。",
        "apihelp-query+allimages-param-dir": "罗列所采用的方向。",
        "apihelp-query+allimages-example-recent": "显示一个最近上传文件的列表,类似[[Special:NewFiles]]。",
        "apihelp-query+allimages-example-mimetypes": "显示带MIME类型<kbd>image/png</kbd>或<kbd>image/gif</kbd>的文件列表",
        "apihelp-query+allimages-example-generator": "显示有关4个以<kbd>T</kbd>开头的文件的信息。",
+       "apihelp-query+alllinks-param-from": "要列举的起始标题链接。",
+       "apihelp-query+alllinks-param-to": "要列举的最终标题链接。",
        "apihelp-query+alllinks-param-namespace": "要列举的名字空间。",
        "apihelp-query+alllinks-param-limit": "总共要返回多少个项目。",
        "apihelp-query+alllinks-param-dir": "列出方向。",
        "apihelp-query+allmessages-description": "返回来自该网站的消息。",
        "apihelp-query+allmessages-param-messages": "要输出的消息。<kbd>*</kbd>(默认)表示所有消息。",
        "apihelp-query+allmessages-param-prop": "要获取的属性。",
+       "apihelp-query+allmessages-param-args": "要替代进消息的参数。",
        "apihelp-query+allmessages-param-customised": "只返回在此定制情形下的消息。",
        "apihelp-query+allmessages-param-lang": "返回这种语言的信息。",
        "apihelp-query+allmessages-param-from": "从此消息开始返回消息。",
        "apihelp-query+allmessages-param-prefix": "返回带有该前缀的消息。",
        "apihelp-query+allmessages-example-ipb": "显示以<kbd>ipb-</kbd>开始的消息。",
        "apihelp-query+allmessages-example-de": "显示德语版的<kbd>august</kbd>和<kbd>mainpage</kbd>消息。",
+       "apihelp-query+allpages-param-from": "枚举的起始页面标题。",
+       "apihelp-query+allpages-param-to": "枚举的结束页面标题。",
        "apihelp-query+allpages-param-namespace": "要列举的名字空间。",
        "apihelp-query+allpages-param-filterredir": "要列出哪些页面。",
        "apihelp-query+allpages-param-minsize": "限于至少这么多字节的页面。",
        "apihelp-query+allpages-example-generator": "显示有关4个以字母<kbd>T</kbd>开头的页面的信息。",
        "apihelp-query+allpages-example-generator-revisions": "显示前2个以<kbd>Re</kbd>开头的非重定向页面的内容。",
        "apihelp-query+allredirects-description": "列出至一个名字空间的重定向。",
+       "apihelp-query+allredirects-param-from": "要列举的起始重定向标题。",
+       "apihelp-query+allredirects-param-to": "要列举的最终重定向标题。",
        "apihelp-query+allredirects-param-namespace": "要列举的名字空间。",
        "apihelp-query+allredirects-param-limit": "返回的总计项目数。",
        "apihelp-query+allredirects-param-dir": "罗列所采用的方向。",
        "apihelp-query+backlinks-example-simple": "显示至<kbd>Main page<kbd>的链接。",
        "apihelp-query+backlinks-example-generator": "获得关于链接至<kbd>Main page<kbd>的页面的信息。",
        "apihelp-query+blocks-description": "列出所有被封禁的用户和IP地址。",
+       "apihelp-query+blocks-param-start": "枚举的起始时间戳。",
+       "apihelp-query+blocks-param-end": "枚举的结束时间戳。",
        "apihelp-query+blocks-param-ids": "要列出的封禁ID列表(可选)。",
        "apihelp-query+blocks-param-users": "要搜索的用户列表(可选)。",
        "apihelp-query+blocks-param-prop": "要获取的属性:\n;id:添加封禁ID。\n;user:添加被封禁用户的用户名。\n;userid:添加被封禁用户的用户ID。\n;by:添加执行封禁的用户的用户名。\n;byid:添加执行封禁的用户的用户ID。\n;timestamp:添加封禁生效时的时间戳。\n;expiry:添加封禁截止时的时间戳。\n;reason:添加封禁原因。\n;range:添加受封禁影响的IP地址段。\n;flags:标记编辑禁止(自动封禁、仅限匿名用户等)。",
        "apihelp-query+deletedrevs-paraminfo-modes": "{{PLURAL:$1|模式}}:$2",
        "apihelp-query+deletedrevs-param-from": "从此标题开始列出。",
        "apihelp-query+deletedrevs-param-to": "列出至此标题为止。",
+       "apihelp-query+deletedrevs-param-tag": "只列出被此标签标记的修订。",
        "apihelp-query+deletedrevs-param-user": "只列出此用户做出的修订。",
        "apihelp-query+deletedrevs-param-excludeuser": "不要列出此用户做出的修订。",
        "apihelp-query+deletedrevs-param-namespace": "只列出此名字空间的页面。",
        "apihelp-query+exturlusage-param-namespace": "要列举的页面名字空间。",
        "apihelp-query+exturlusage-param-limit": "返回多少页面。",
        "apihelp-query+exturlusage-example-simple": "显示链接至<kbd>http://www.mediawiki.org</kbd>的页面。",
+       "apihelp-query+filearchive-description": "循序列举所有被删除的文件。",
        "apihelp-query+filearchive-param-from": "枚举的起始图片标题。",
        "apihelp-query+filearchive-param-to": "枚举的结束图片标题。",
        "apihelp-query+filearchive-param-prefix": "搜索所有以此值开头的图像标题。",
        "apihelp-query+filearchive-param-sha1base36": "基于base 36的图片的SHA1哈希值(用于MediaWiki)。",
        "apihelp-query+filearchive-example-simple": "显示已删除文件列表",
        "apihelp-query+filerepoinfo-example-simple": "获得有关文件存储库的信息。",
+       "apihelp-query+fileusage-description": "查找所有使用指定文件的页面。",
        "apihelp-query+fileusage-param-prop": "要获取的属性:\n;pageid:每个页面的页面ID。\n;title:每个页面的标题。\n;redirect:标记作为重定向的页面。",
        "apihelp-query+fileusage-param-namespace": "只包括这些名字空间的页面。",
        "apihelp-query+fileusage-param-limit": "返回多少。",
        "apihelp-query+imageinfo-param-prop": "要获取的文件信息:",
        "apihelp-query+imageinfo-paramvalue-prop-timestamp": "添加时间戳至上传的版本。",
        "apihelp-query+imageinfo-paramvalue-prop-comment": "此版本的摘要。",
+       "apihelp-query+imageinfo-paramvalue-prop-parsedcomment": "解析版本上的注释。",
+       "apihelp-query+imageinfo-paramvalue-prop-canonicaltitle": "添加文件的规范标题。",
+       "apihelp-query+imageinfo-paramvalue-prop-url": "为文件及其描述页面提供URL。",
        "apihelp-query+imageinfo-paramvalue-prop-dimensions": "大小别名。",
        "apihelp-query+imageinfo-paramvalue-prop-sha1": "为文件加入SHA-1哈希值。",
        "apihelp-query+imageinfo-paramvalue-prop-mime": "添加文件的MIME类型。",
        "apihelp-query+imageinfo-paramvalue-prop-mediatype": "添加文件媒体类型。",
+       "apihelp-query+imageinfo-param-limit": "每个文件返回多少文件修订。",
        "apihelp-query+imageinfo-param-start": "开始列举的时间戳。",
        "apihelp-query+imageinfo-param-end": "列举的结束时间戳。",
        "apihelp-query+imageinfo-param-urlheight": "与$1urlwidth类似。",
        "apihelp-query+info-paramvalue-prop-watched": "列出每个页面的被监视状态。",
        "apihelp-query+info-paramvalue-prop-watchers": "监视人员数,如果允许。",
        "apihelp-query+info-paramvalue-prop-readable": "用户是否可以阅读此页面。",
+       "apihelp-query+info-paramvalue-prop-preload": "提供由EditFormPreloadText返回的文本。",
        "apihelp-query+info-param-testactions": "测试当前用户是否可以在页面上执行某种操作。",
        "apihelp-query+info-param-token": "请改用[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]。",
        "apihelp-query+info-example-simple": "获得有关页面<kbd>Main Page</kbd>的信息。",
        "apihelp-query+pagepropnames-description": "列出wiki中所有使用中的页面属性名称。",
        "apihelp-query+pagepropnames-param-limit": "返回名称的最大数量。",
        "apihelp-query+pagepropnames-example-simple": "获取前10个属性名称。",
-       "apihelp-query+pageprops-example-simple": "è\8e·å¾\97ç\94¨äº\8e<kbd>Category:Foo</kbd>的属性。",
+       "apihelp-query+pageprops-example-simple": "è\8e·å\8f\96ç\94¨äº\8e页é\9d¢<kbd>Main Page</kbd>å\92\8c<kbd>MediaWiki</kbd>的属性。",
        "apihelp-query+pageswithprop-description": "列出所有使用指定页面属性的页面。",
        "apihelp-query+pageswithprop-param-limit": "返回页面的最大数量。",
        "apihelp-query+pageswithprop-param-dir": "排序的方向。",
        "apihelp-query+revisions-example-first5-not-localhost": "获取<kbd>Main Page</kbd>的前5次不是由匿名用户<kbd>127.0.0.1</kbd>做出的修订。",
        "apihelp-query+revisions-example-first5-user": "获取<kbd>Main Page</kbd>的前5次由用户<kbd>MediaWiki default</kbd>做出的修订。",
        "apihelp-query+revisions+base-param-limit": "限制返回多少修订。",
+       "apihelp-query+search-description": "执行一次全文本搜索。",
        "apihelp-query+search-param-search": "搜索所有拥有此值的页面标题(或内容)。",
        "apihelp-query+search-param-namespace": "只在这些名字空间搜索。",
+       "apihelp-query+search-param-what": "要执行的搜索类型。",
        "apihelp-query+search-param-info": "要返回的元数据。",
+       "apihelp-query+search-param-prop": "要返回的属性:\n;size:Adds the size of the page in bytes.\n;wordcount:Adds the word count of the page.\n;timestamp:Adds the timestamp of when the page was last edited.\n;snippet:Adds a parsed snippet of the page.\n;titlesnippet:Adds a parsed snippet of the page title.\n;redirectsnippet:Adds a parsed snippet of the redirect title.\n;redirecttitle:Adds the title of the matching redirect.\n;sectionsnippet:Adds a parsed snippet of the matching section title.\n;sectiontitle:Adds the title of the matching section.\n;categorysnippet:Adds a parsed snippet of the matching category.\n;isfilematch:Adds a boolean indicating if the search matched file content.\n;score:<span class=\"apihelp-deprecated\">Deprecated and ignored.</span>\n;hasrelated:<span class=\"apihelp-deprecated\">Deprecated and ignored.</span>",
        "apihelp-query+search-param-limit": "返回的总计页面数。",
        "apihelp-query+search-param-interwiki": "搜索结果中包含跨wiki结果,如果可用。",
        "apihelp-query+search-example-simple": "搜索<kbd>meaning</kbd>。",
        "apihelp-query+search-example-text": "搜索文本<kbd>meaning</kbd>。",
        "apihelp-query+search-example-generator": "获得有关搜索<kbd>meaning</kbd>返回页面的页面信息。",
+       "apihelp-query+siteinfo-param-showalldb": "列出所有数据库服务器,不只是最落后的那个。",
        "apihelp-query+siteinfo-param-numberingroup": "列出用户组中的用户数。",
+       "apihelp-query+siteinfo-param-inlanguagecode": "用于本地化语言名称(尽可能)和皮肤名称的语言代码。",
        "apihelp-query+siteinfo-example-simple": "获取网站信息",
        "apihelp-query+siteinfo-example-interwiki": "获取本地跨wiki前缀列表",
        "apihelp-query+siteinfo-example-replag": "检查当前的响应延迟。",
        "apihelp-revisiondelete-param-show": "每次修订要恢复显示的东西。",
        "apihelp-revisiondelete-param-reason": "删除或恢复的原因。",
        "apihelp-revisiondelete-example-revision": "隐藏<kbd>首页</kbd>的修订版本<kbd>12345</kbd>的内容。",
+       "apihelp-revisiondelete-example-log": "隐藏日志记录<kbd>67890</kbd>上的所有数据,原因<kbd>BLP violation</kbd>。",
        "apihelp-rollback-param-title": "要回退的页面标题。不能与<var>$1pageid</var>一起使用。",
        "apihelp-rollback-param-pageid": "要回退的页面的页面 ID。不能与<var>$1title</var>一起使用。",
        "apihelp-rollback-param-watchlist": "无条件地将页面加入至当前用户的监视列表或将其移除,使用设置或不更改监视。",
        "apihelp-rsd-example-simple": "导出RSD架构",
        "apihelp-setnotificationtimestamp-param-entirewatchlist": "工作于所有已监视页面。",
        "apihelp-setnotificationtimestamp-example-all": "重置整个监视列表的通知状态。",
+       "apihelp-setnotificationtimestamp-example-page": "重置用于<kbd>Main page</kbd>的通知状态。",
        "apihelp-setnotificationtimestamp-example-pagetimestamp": "设置<kbd>Main page</kbd>的通知时间戳,这样所有从2012年1月1日起的编辑都会是未复核的。",
        "apihelp-setnotificationtimestamp-example-allpages": "重置在<kbd>{{ns:user}}</kbd>名字空间中的页面的通知状态。",
+       "apihelp-tag-description": "从个别修订或日志记录中添加或移除更改标签。",
        "apihelp-tag-param-rcid": "要添加或移除标签的一个或更多的最近更改ID。",
        "apihelp-tag-param-revid": "要添加或移除标签的一个或更多的修订ID。",
        "apihelp-tag-param-logid": "要添加或移除标签的一个或更多的日志记录ID。",
        "apihelp-dump-description": "输出数据为PHP的<code>var_dump()</code>格式。",
        "apihelp-dumpfm-description": "输出数据为PHP的<code>var_dump()</code>格式(HTML优质打印效果)。",
        "apihelp-json-description": "输出数据为JSON格式。",
+       "apihelp-json-param-utf8": "如果指定,使用十六进制转义序列将大多数(但不是全部)非ASCII的字符编码为UTF-8,而不是替换它们。默认当<var>formatversion</var>不是<kbd>1</kbd>时。",
+       "apihelp-json-param-ascii": "如果指定,使用十六进制转义序列将所有非ASCII编码。默认当<var>formatversion</var>为<kbd>1</kbd>时。",
        "apihelp-json-param-formatversion": "输出格式:\n;1:向后兼容格式(XML样式布尔值、用于内容节点的<samp>*</samp>键等)。\n;2:实验现代格式。细节可以更改!\n;latest:使用最新格式(当前为<kbd>2</kbd>),可以在没有警告的情况下更改。",
        "apihelp-jsonfm-description": "输出数据为JSON格式(HTML优质打印效果)。",
        "apihelp-none-description": "不输出任何东西。",
        "api-help-param-deprecated": "不推荐使用。",
        "api-help-param-required": "这个参数是必须的。",
        "api-help-datatypes-header": "数据类型",
+       "api-help-datatypes": "一些API参数类型需要进一步解释:\n;boolean\n:布尔参数就像HTML复选框一样工作:如果指定参数,无论何值都被认为是真。如果要假值,则可完全忽略参数。\n;timestamp\n:Timestamps may be specified in several formats. ISO 8601 date and time is recommended. All times are in UTC, any included timezone is ignored.\n:* ISO 8601日期和时间,<kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>Z</kbd>(标点和<kbd>Z</kbd>是可选项)\n:* ISO 8601 date and time with (ignored) fractional seconds, <kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>.<var>00001</var>Z</kbd> (dashes, colons, and <kbd>Z</kbd> are optional)\n:* MediaWiki格式,<kbd><var>2001</var><var>01</var><var>15</var><var>14</var><var>56</var><var>00</var></kbd>\n:* Generic numeric format, <kbd><var>2001</var>-<var>01</var>-<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd> (optional timezone of <kbd>GMT</kbd>, <kbd>+<var>##</var></kbd>, or <kbd>-<var>##</var></kbd> is ignored)\n:* EXIF格式,<kbd><var>2001</var>:<var>01</var>:<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* RFC 2822 format (timezone may be omitted), <kbd><var>Mon</var>, <var>15</var> <var>Jan</var> <var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* RFC 850 format (timezone may be omitted), <kbd><var>Monday</var>, <var>15</var>-<var>Jan</var>-<var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* C ctime format, <kbd><var>Mon</var> <var>Jan</var> <var>15</var> <var>14</var>:<var>56</var>:<var>00</var> <var>2001</var></kbd>\n:* Seconds since 1970-01-01T00:00:00Z as a 1 to 13 digit integer",
        "api-help-param-type-limit": "类型:整数或<kbd>max</kbd>",
        "api-help-param-type-integer": "类型:{{PLURAL:$1|1=整数|2=整数列表}}",
        "api-help-param-type-boolean": "类型:布尔值([[Special:ApiHelp/main#main/datatypes|详细信息]])",
index dc3cc2d..3db32ba 100644 (file)
        "apihelp-opensearch-param-limit": "回傳的結果數量上限。",
        "apihelp-opensearch-param-namespace": "搜尋的命名空間。",
        "apihelp-opensearch-param-format": "輸出的格式。",
+       "apihelp-options-param-reset": "重設偏好設定為網站預設值。",
        "apihelp-options-example-reset": "重設所有偏好設定",
+       "apihelp-parse-example-page": "解析一個頁面。",
+       "apihelp-parse-example-text": "解析 wikitext。",
+       "apihelp-parse-example-texttitle": "解析 wikitext,指定頁面標題。",
+       "apihelp-parse-example-summary": "解析一個摘要。",
+       "apihelp-patrol-description": "巡查一個頁面或修訂。",
+       "apihelp-patrol-param-rcid": "要巡查的近期變更 ID。",
+       "apihelp-patrol-param-revid": "要巡查的修訂 ID。",
+       "apihelp-patrol-example-rcid": "巡查一個近期變更。",
+       "apihelp-patrol-example-revid": "巡查一個修訂。",
+       "apihelp-protect-description": "變更頁面的保護層級。",
+       "apihelp-protect-param-title": "要(解除)保護頁面的標題。 不能與 $1pageid 一起使用。",
+       "apihelp-protect-param-pageid": "要(解除)保護頁面的 ID。 不能與 $1title 一起使用。",
+       "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-query+allcategories-param-limit": "要回傳的分類數量。",
        "apihelp-query+allfileusages-param-limit": "要回傳的項目總數。",
        "apihelp-query+allimages-param-limit": "要回傳的圖片總數。",
index a55e25a..31ee487 100644 (file)
@@ -554,10 +554,10 @@ class MessageCache {
                        $codes = array_keys( Language::fetchLanguageNames() );
                }
 
-               global $wgMemc;
+               $cache = ObjectCache::getMainWANInstance();
                foreach ( $codes as $code ) {
                        $sidebarKey = wfMemcKey( 'sidebar', $code );
-                       $wgMemc->delete( $sidebarKey );
+                       $cache->delete( $sidebarKey, 5 );
                }
 
                // Update the message in the message blob store
index 43f957c..7da25fe 100644 (file)
@@ -382,8 +382,9 @@ class ChangeTags {
         * @return Status
         * @since 1.25
         */
-       public static function addTagsAccompanyingChangeWithChecks( array $tags,
-               $rc_id, $rev_id, $log_id, $params, User $user ) {
+       public static function addTagsAccompanyingChangeWithChecks(
+               array $tags, $rc_id, $rev_id, $log_id, $params, User $user
+       ) {
 
                // are we allowed to do this?
                $result = self::canAddTagsAccompanyingChange( $tags, $user );
@@ -393,7 +394,7 @@ class ChangeTags {
                }
 
                // do it!
-               self::addTags( $tagsToAdd, $rc_id, $rev_id, $log_id, $params );
+               self::addTags( $tags, $rc_id, $rev_id, $log_id, $params );
 
                return Status::newGood( true );
        }
@@ -517,7 +518,6 @@ class ChangeTags {
                if ( $rev_id ) {
                        $rev = Revision::newFromId( $rev_id );
                        if ( $rev ) {
-                               $title = $rev->getTitle();
                                $logEntry->setTarget( $rev->getTitle() );
                        }
                } elseif ( $log_id ) {
@@ -706,6 +706,7 @@ class ChangeTags {
         * @param User $user Who to attribute the action to
         * @param int $tagCount For deletion only, how many usages the tag had before
         * it was deleted.
+        * @return int ID of the inserted log entry
         * @since 1.25
         */
        protected static function logTagManagementAction( $action, $tag, $reason,
@@ -1063,21 +1064,18 @@ class ChangeTags {
         * @since 1.25
         */
        public static function listExtensionActivatedTags() {
-               // Caching...
-               global $wgMemc;
-               $key = wfMemcKey( 'active-tags' );
-               $tags = $wgMemc->get( $key );
-               if ( $tags ) {
-                       return $tags;
-               }
-
-               // ask extensions which tags they consider active
-               $extensionActive = array();
-               Hooks::run( 'ChangeTagsListActive', array( &$extensionActive ) );
-
-               // Short-term caching.
-               $wgMemc->set( $key, $extensionActive, 300 );
-               return $extensionActive;
+               return ObjectCache::getMainWANInstance()->getWithSetCallback(
+                       wfMemcKey( 'active-tags' ),
+                       function() {
+                               // Ask extensions which tags they consider active
+                               $extensionActive = array();
+                               Hooks::run( 'ChangeTagsListActive', array( &$extensionActive ) );
+                               return $extensionActive;
+                       },
+                       300,
+                       array( wfMemcKey( 'active-tags' ) ),
+                       array( 'lockTSE' => INF )
+               );
        }
 
        /**
@@ -1104,28 +1102,21 @@ class ChangeTags {
         * @since 1.25
         */
        public static function listExplicitlyDefinedTags() {
-               // Caching...
-               global $wgMemc;
-               $key = wfMemcKey( 'valid-tags-db' );
-               $tags = $wgMemc->get( $key );
-               if ( $tags ) {
-                       return $tags;
-               }
-
-               $emptyTags = array();
-
-               // Some DB stuff
-               $dbr = wfGetDB( DB_SLAVE );
-               $res = $dbr->select( 'valid_tag', 'vt_tag', array(), __METHOD__ );
-               foreach ( $res as $row ) {
-                       $emptyTags[] = $row->vt_tag;
-               }
-
-               $emptyTags = array_filter( array_unique( $emptyTags ) );
-
-               // Short-term caching.
-               $wgMemc->set( $key, $emptyTags, 300 );
-               return $emptyTags;
+               $fname = __METHOD__;
+
+               return ObjectCache::getMainWANInstance()->getWithSetCallback(
+                       wfMemcKey( 'valid-tags-db' ),
+                       function() use ( $fname ) {
+                               $dbr = wfGetDB( DB_SLAVE );
+                               $tags = $dbr->selectFieldValues(
+                                       'valid_tag', 'vt_tag', array(), $fname );
+
+                               return array_filter( array_unique( $tags ) );
+                       },
+                       300,
+                       array( wfMemcKey( 'valid-tags-db' ) ),
+                       array( 'lockTSE' => INF )
+               );
        }
 
        /**
@@ -1138,21 +1129,17 @@ class ChangeTags {
         * @since 1.25
         */
        public static function listExtensionDefinedTags() {
-               // Caching...
-               global $wgMemc;
-               $key = wfMemcKey( 'valid-tags-hook' );
-               $tags = $wgMemc->get( $key );
-               if ( $tags ) {
-                       return $tags;
-               }
-
-               $emptyTags = array();
-               Hooks::run( 'ListDefinedTags', array( &$emptyTags ) );
-               $emptyTags = array_filter( array_unique( $emptyTags ) );
-
-               // Short-term caching.
-               $wgMemc->set( $key, $emptyTags, 300 );
-               return $emptyTags;
+               return ObjectCache::getMainWANInstance()->getWithSetCallback(
+                       wfMemcKey( 'valid-tags-hook' ),
+                       function() {
+                               $tags = array();
+                               Hooks::run( 'ListDefinedTags', array( &$tags ) );
+                               return array_filter( array_unique( $tags ) );
+                       },
+                       300,
+                       array( wfMemcKey( 'valid-tags-hook' ) ),
+                       array( 'lockTSE' => INF )
+               );
        }
 
        /**
@@ -1161,10 +1148,12 @@ class ChangeTags {
         * @since 1.25
         */
        public static function purgeTagCacheAll() {
-               global $wgMemc;
-               $wgMemc->delete( wfMemcKey( 'active-tags' ) );
-               $wgMemc->delete( wfMemcKey( 'valid-tags-db' ) );
-               $wgMemc->delete( wfMemcKey( 'valid-tags-hook' ) );
+               $cache = ObjectCache::getMainWANInstance();
+
+               $cache->touchCheckKey( wfMemcKey( 'active-tags' ) );
+               $cache->touchCheckKey( wfMemcKey( 'valid-tags-db' ) );
+               $cache->touchCheckKey( wfMemcKey( 'valid-tags-hook' ) );
+
                self::purgeTagUsageCache();
        }
 
@@ -1173,8 +1162,9 @@ class ChangeTags {
         * @since 1.25
         */
        public static function purgeTagUsageCache() {
-               global $wgMemc;
-               $wgMemc->delete( wfMemcKey( 'change-tag-statistics' ) );
+               $cache = ObjectCache::getMainWANInstance();
+
+               $cache->delete( wfMemcKey( 'change-tag-statistics' ) );
        }
 
        /**
@@ -1187,36 +1177,55 @@ class ChangeTags {
         * @return array Array of string => int
         */
        public static function tagUsageStatistics() {
-               // Caching...
-               global $wgMemc;
-               $key = wfMemcKey( 'change-tag-statistics' );
-               $stats = $wgMemc->get( $key );
-               if ( $stats ) {
-                       return $stats;
-               }
-
-               $out = array();
+               $fname = __METHOD__;
+
+               return ObjectCache::getMainWANInstance()->getWithSetCallback(
+                       wfMemcKey( 'change-tag-statistics' ),
+                       function() use ( $fname ) {
+                               $out = array();
+
+                               $dbr = wfGetDB( DB_SLAVE, 'vslow' );
+                               $res = $dbr->select(
+                                       'change_tag',
+                                       array( 'ct_tag', 'hitcount' => 'count(*)' ),
+                                       array(),
+                                       $fname,
+                                       array( 'GROUP BY' => 'ct_tag', 'ORDER BY' => 'hitcount DESC' )
+                               );
 
-               $dbr = wfGetDB( DB_SLAVE, 'vslow' );
-               $res = $dbr->select(
-                       'change_tag',
-                       array( 'ct_tag', 'hitcount' => 'count(*)' ),
-                       array(),
-                       __METHOD__,
-                       array( 'GROUP BY' => 'ct_tag', 'ORDER BY' => 'hitcount DESC' )
+                               foreach ( $res as $row ) {
+                                       $out[$row->ct_tag] = $row->hitcount;
+                               }
+
+                               foreach ( ChangeTags::listDefinedTags() as $tag ) {
+                                       if ( !isset( $out[$tag] ) ) {
+                                               $out[$tag] = 0;
+                                       }
+                               }
+
+                               return $out;
+                       },
+                       300,
+                       array( wfMemcKey( 'change-tag-statistics' ) ),
+                       array( 'lockTSE' => INF )
                );
+       }
 
-               foreach ( $res as $row ) {
-                       $out[$row->ct_tag] = $row->hitcount;
-               }
-               foreach ( self::listDefinedTags() as $tag ) {
-                       if ( !isset( $out[$tag] ) ) {
-                               $out[$tag] = 0;
-                       }
-               }
-
-               // Cache for a very short time
-               $wgMemc->set( $key, $out, 300 );
-               return $out;
+       /**
+        * Indicate whether change tag editing UI is relevant
+        *
+        * Returns true if the user has the necessary right and there are any
+        * editable tags defined.
+        *
+        * This intentionally doesn't check "any addable || any deletable", because
+        * it seems like it would be more confusing than useful if the checkboxes
+        * suddenly showed up because some abuse filter stopped defining a tag and
+        * then suddenly disappeared when someone deleted all uses of that tag.
+        *
+        * @param User $user
+        * @return bool
+        */
+       public static function showTagEditingUI( User $user ) {
+               return $user->isAllowed( 'changetags' ) && (bool)self::listExplicitlyDefinedTags();
        }
 }
index 12b0c39..b20794b 100644 (file)
@@ -46,6 +46,9 @@ class ConfigFactory {
         */
        private static $self;
 
+       /**
+        * @return ConfigFactory
+        */
        public static function getDefaultInstance() {
                if ( !self::$self ) {
                        self::$self = new self;
index 9c2435a..f8d0879 100644 (file)
@@ -629,7 +629,7 @@ abstract class ContentHandler {
 
                // hook: get difference engine
                $differenceEngine = null;
-               if ( !wfRunHooks( 'GetDifferenceEngine',
+               if ( !Hooks::run( 'GetDifferenceEngine',
                        array( $context, $old, $new, $refreshCache, $unhide, &$differenceEngine )
                ) ) {
                        return $differenceEngine;
index 713c5cb..2ca79cd 100644 (file)
@@ -132,7 +132,7 @@ interface IContextSource {
        public function getStats();
 
        /**
-        * Get a Message object with context set
+        * Get a Message object with context set.  See wfMessage for parameters.
         *
         * @return Message
         */
diff --git a/includes/db/DBConnRef.php b/includes/db/DBConnRef.php
new file mode 100644 (file)
index 0000000..7045494
--- /dev/null
@@ -0,0 +1,46 @@
+<?php
+/**
+ * Helper class to handle automatically marking connections as reusable (via RAII pattern)
+ * as well handling deferring the actual network connection until the handle is used
+ *
+ * @ingroup Database
+ * @since 1.22
+ */
+class DBConnRef implements IDatabase {
+       /** @var LoadBalancer */
+       private $lb;
+
+       /** @var DatabaseBase|null */
+       private $conn;
+
+       /** @var array|null */
+       private $params;
+
+       /**
+        * @param LoadBalancer $lb
+        * @param DatabaseBase|array $conn Connection or (server index, group, wiki ID) array
+        */
+       public function __construct( LoadBalancer $lb, $conn ) {
+               $this->lb = $lb;
+               if ( $conn instanceof DatabaseBase ) {
+                       $this->conn = $conn;
+               } else {
+                       $this->params = $conn;
+               }
+       }
+
+       public function __call( $name, $arguments ) {
+               if ( $this->conn === null ) {
+                       list( $db, $groups, $wiki ) = $this->params;
+                       $this->conn = $this->lb->getConnection( $db, $groups, $wiki );
+               }
+
+               return call_user_func_array( array( $this->conn, $name ), $arguments );
+       }
+
+       public function __destruct() {
+               if ( $this->conn !== null ) {
+                       $this->lb->reuseConnection( $this->conn );
+               }
+       }
+}
index 0bef28a..97073dd 100644 (file)
@@ -69,6 +69,8 @@ abstract class DatabaseBase implements IDatabase {
        protected $mLBInfo = array();
        protected $mDefaultBigSelects = null;
        protected $mSchemaVars = false;
+       /** @var array */
+       protected $mSessionVars = array();
 
        protected $preparedArgs;
 
@@ -141,6 +143,13 @@ abstract class DatabaseBase implements IDatabase {
         */
        private $mTrxAutomaticAtomic = false;
 
+       /**
+        * Track the seconds spent in write queries for the current transaction
+        *
+        * @var float
+        */
+       private $mTrxWriteDuration = 0.0;
+
        /**
         * @since 1.21
         * @var resource File handle for upgrade
@@ -473,6 +482,18 @@ abstract class DatabaseBase implements IDatabase {
                );
        }
 
+       /**
+        * Get the time spend running write queries for this
+        *
+        * High times could be due to scanning, updates, locking, and such
+        *
+        * @return float|bool Returns false if not transaction is active
+        * @since 1.26
+        */
+       public function pendingWriteQueryDuration() {
+               return $this->mTrxLevel ? $this->mTrxWriteDuration : false;
+       }
+
        /**
         * Is a connection to the database open?
         * @return bool
@@ -794,15 +815,17 @@ abstract class DatabaseBase implements IDatabase {
                        }
                }
 
+               $this->mSessionVars = $params['variables'];
+
                /** Get the default table prefix*/
-               if ( $tablePrefix == 'get from global' ) {
+               if ( $tablePrefix === 'get from global' ) {
                        $this->mTablePrefix = $wgDBprefix;
                } else {
                        $this->mTablePrefix = $tablePrefix;
                }
 
                /** Get the database schema*/
-               if ( $schema == 'get from global' ) {
+               if ( $schema === 'get from global' ) {
                        $this->mSchema = $wgDBmwschema;
                } else {
                        $this->mSchema = $schema;
@@ -907,6 +930,7 @@ abstract class DatabaseBase implements IDatabase {
                        $p['password'] = isset( $p['password'] ) ? $p['password'] : false;
                        $p['dbname'] = isset( $p['dbname'] ) ? $p['dbname'] : false;
                        $p['flags'] = isset( $p['flags'] ) ? $p['flags'] : 0;
+                       $p['variables'] = isset( $p['variables'] ) ? $p['variables'] : array();
                        $p['tablePrefix'] = isset( $p['tablePrefix'] ) ? $p['tablePrefix'] : 'get from global';
                        $p['schema'] = isset( $p['schema'] ) ? $p['schema'] : $defaultSchemas[$dbType];
                        $p['foreign'] = isset( $p['foreign'] ) ? $p['foreign'] : false;
@@ -1160,6 +1184,7 @@ abstract class DatabaseBase implements IDatabase {
                # Do the query and handle errors
                $startTime = microtime( true );
                $ret = $this->doQuery( $commentedSql );
+               $queryRuntime = microtime( true ) - $startTime;
                # Log the query time and feed it into the DB trx profiler
                $this->getTransactionProfiler()->recordQueryCompletion(
                        $queryProf, $startTime, $isWriteQuery, $this->affectedRows() );
@@ -1191,6 +1216,7 @@ abstract class DatabaseBase implements IDatabase {
                                        # Should be safe to silently retry (no trx and thus no callbacks)
                                        $startTime = microtime( true );
                                        $ret = $this->doQuery( $commentedSql );
+                                       $queryRuntime = microtime( true ) - $startTime;
                                        # Log the query time and feed it into the DB trx profiler
                                        $this->getTransactionProfiler()->recordQueryCompletion(
                                                $queryProf, $startTime, $isWriteQuery, $this->affectedRows() );
@@ -1211,6 +1237,10 @@ abstract class DatabaseBase implements IDatabase {
                $queryProfSection = false;
                $totalProfSection = false;
 
+               if ( $isWriteQuery && $this->mTrxLevel ) {
+                       $this->mTrxWriteDuration += $queryRuntime;
+               }
+
                return $res;
        }
 
@@ -2455,7 +2485,7 @@ abstract class DatabaseBase implements IDatabase {
                }
 
                # Quote $schema and merge it with the table name if needed
-               if ( $schema !== null ) {
+               if ( strlen( $schema ) ) {
                        if ( $format == 'quoted' && !$this->isQuotedIdentifier( $schema ) ) {
                                $schema = $this->addIdentifierQuotes( $schema );
                        }
@@ -3609,11 +3639,12 @@ abstract class DatabaseBase implements IDatabase {
                        }
 
                        $this->runOnTransactionPreCommitCallbacks();
+                       $writeTime = $this->pendingWriteQueryDuration();
                        $this->doCommit( $fname );
                        if ( $this->mTrxDoneWrites ) {
                                $this->mDoneWrites = microtime( true );
                                $this->getTransactionProfiler()->transactionWritingOut(
-                                       $this->mServer, $this->mDBname, $this->mTrxShortId );
+                                       $this->mServer, $this->mDBname, $this->mTrxShortId, $writeTime );
                        }
                        $this->runOnTransactionIdleCallbacks();
                }
@@ -3633,6 +3664,7 @@ abstract class DatabaseBase implements IDatabase {
                $this->mTrxIdleCallbacks = array();
                $this->mTrxPreCommitCallbacks = array();
                $this->mTrxShortId = wfRandomString( 12 );
+               $this->mTrxWriteDuration = 0.0;
        }
 
        /**
@@ -3690,11 +3722,12 @@ abstract class DatabaseBase implements IDatabase {
                }
 
                $this->runOnTransactionPreCommitCallbacks();
+               $writeTime = $this->pendingWriteQueryDuration();
                $this->doCommit( $fname );
                if ( $this->mTrxDoneWrites ) {
                        $this->mDoneWrites = microtime( true );
                        $this->getTransactionProfiler()->transactionWritingOut(
-                               $this->mServer, $this->mDBname, $this->mTrxShortId );
+                               $this->mServer, $this->mDBname, $this->mTrxShortId, $writeTime );
                }
                $this->runOnTransactionIdleCallbacks();
        }
@@ -4209,7 +4242,7 @@ abstract class DatabaseBase implements IDatabase {
        }
 
        /**
-        * Check to see if a named lock is available. This is non-blocking.
+        * Check to see if a named lock is available (non-blocking)
         *
         * @param string $lockName Name of lock to poll
         * @param string $method Name of method calling us
@@ -4223,8 +4256,7 @@ abstract class DatabaseBase implements IDatabase {
        /**
         * Acquire a named lock
         *
-        * Abstracted from Filestore::lock() so child classes can implement for
-        * their own needs.
+        * Named locks are not related to transactions
         *
         * @param string $lockName Name of lock to aquire
         * @param string $method Name of method calling us
@@ -4236,7 +4268,9 @@ abstract class DatabaseBase implements IDatabase {
        }
 
        /**
-        * Release a lock.
+        * Release a lock
+        *
+        * Named locks are not related to transactions
         *
         * @param string $lockName Name of lock to release
         * @param string $method Name of method calling us
@@ -4249,6 +4283,16 @@ abstract class DatabaseBase implements IDatabase {
                return true;
        }
 
+       /**
+        * Check to see if a named lock used by lock() use blocking queues
+        *
+        * @return bool
+        * @since 1.26
+        */
+       public function namedLocksEnqueue() {
+               return false;
+       }
+
        /**
         * Lock specific tables
         *
index aac95a8..561c811 100644 (file)
@@ -132,6 +132,15 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
                if ( is_string( $wgSQLMode ) ) {
                        $set[] = 'sql_mode = ' . $this->addQuotes( $wgSQLMode );
                }
+               // Set any custom settings defined by site config
+               // (e.g. https://dev.mysql.com/doc/refman/4.1/en/innodb-parameters.html)
+               foreach ( $this->mSessionVars as $var => $val ) {
+                       // Escape strings but not numbers to avoid MySQL complaining
+                       if ( !is_int( $val ) && !is_float( $val ) ) {
+                               $val = $this->addQuotes( $val );
+                       }
+                       $set[] = $this->addIdentifierQuotes( $var ) . ' = ' . $val;
+               }
 
                if ( $set ) {
                        // Use doQuery() to avoid opening implicit transactions (DBO_TRX)
@@ -873,6 +882,10 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
                return ( $row->lockstatus == 1 );
        }
 
+       public function namedLocksEnqueue() {
+               return true;
+       }
+
        /**
         * @param array $read
         * @param array $write
index ad12e19..d2b5ecb 100644 (file)
@@ -134,7 +134,7 @@ class DatabaseMysqli extends DatabaseMysqlBase {
         * @return int
         */
        function insertId() {
-               return $this->mConn->insert_id;
+               return (int)$this->mConn->insert_id;
        }
 
        /**
index ed86bab..2bad711 100644 (file)
@@ -64,16 +64,16 @@ class DatabaseSqlite extends DatabaseBase {
                $this->dbDir = isset( $p['dbDirectory'] ) ? $p['dbDirectory'] : $wgSQLiteDataDir;
 
                if ( isset( $p['dbFilePath'] ) ) {
-                       $this->mFlags = isset( $p['flags'] ) ? $p['flags'] : 0;
-                       // Standalone .sqlite file mode
+                       parent::__construct( $p );
+                       // Standalone .sqlite file mode.
+                       // Super doesn't open when $user is false, but we can work with $dbName,
+                       // which is derived from the file path in this case.
                        $this->openFile( $p['dbFilePath'] );
-                       // @FIXME: clean up base constructor so this can call super instead
-                       $this->mTrxAtomicLevels = new SplStack;
                } else {
                        $this->mDBname = $p['dbname'];
-                       // Stock wiki mode using standard file names per DB
+                       // Stock wiki mode using standard file names per DB.
                        parent::__construct( $p );
-                       // parent doesn't open when $user is false, but we can work with $dbName
+                       // Super doesn't open when $user is false, but we can work with $dbName
                        if ( $p['dbname'] && !$this->isOpen() ) {
                                if ( $this->open( $p['host'], $p['user'], $p['password'], $p['dbname'] ) ) {
                                        if ( $wgSharedDB ) {
@@ -105,8 +105,10 @@ class DatabaseSqlite extends DatabaseBase {
         */
        public static function newStandaloneInstance( $filename, array $p = array() ) {
                $p['dbFilePath'] = $filename;
+               $p['schema'] = false;
+               $p['tablePrefix'] = '';
 
-               return new self( $p );
+               return DatabaseBase::factory( 'sqlite', $p );
        }
 
        /**
index bc17911..2ea2487 100644 (file)
@@ -358,6 +358,37 @@ class LoadBalancer {
                }
        }
 
+       /**
+        * Set the master wait position and wait for a "generic" slave to catch up to it
+        *
+        * This can be used a faster proxy for waitForAll()
+        *
+        * @param DBMasterPos $pos
+        * @param int $timeout Max seconds to wait; default is mWaitTimeout
+        * @return bool Success (able to connect and no timeouts reached)
+        * @since 1.26
+        */
+       public function waitForOne( $pos, $timeout = null ) {
+               $this->mWaitForPos = $pos;
+
+               $i = $this->mReadIndex;
+               if ( $i <= 0 ) {
+                       // Pick a generic slave if there isn't one yet
+                       $readLoads = $this->mLoads;
+                       unset( $readLoads[$this->getWriterIndex()] ); // slaves only
+                       $readLoads = array_filter( $readLoads ); // with non-zero load
+                       $i = ArrayUtils::pickRandom( $readLoads );
+               }
+
+               if ( $i > 0 ) {
+                       $ok = $this->doWait( $i, true, $timeout );
+               } else {
+                       $ok = true; // no applicable loads
+               }
+
+               return $ok;
+       }
+
        /**
         * Set the master wait position and wait for ALL slaves to catch up to it
         * @param DBMasterPos $pos
@@ -814,8 +845,9 @@ class LoadBalancer {
 
        /**
         * @return int
+        * @since 1.26
         */
-       private function getWriterIndex() {
+       public function getWriterIndex() {
                return 0;
        }
 
@@ -1241,49 +1273,3 @@ class LoadBalancer {
                $this->mProcCache->clear( 'slave_lag' );
        }
 }
-
-/**
- * Helper class to handle automatically marking connections as reusable (via RAII pattern)
- * as well handling deferring the actual network connection until the handle is used
- *
- * @ingroup Database
- * @since 1.22
- */
-class DBConnRef implements IDatabase {
-       /** @var LoadBalancer */
-       private $lb;
-
-       /** @var DatabaseBase|null */
-       private $conn;
-
-       /** @var array|null */
-       private $params;
-
-       /**
-        * @param LoadBalancer $lb
-        * @param DatabaseBase|array $conn Connection or (server index, group, wiki ID) array
-        */
-       public function __construct( LoadBalancer $lb, $conn ) {
-               $this->lb = $lb;
-               if ( $conn instanceof DatabaseBase ) {
-                       $this->conn = $conn;
-               } else {
-                       $this->params = $conn;
-               }
-       }
-
-       public function __call( $name, $arguments ) {
-               if ( $this->conn === null ) {
-                       list( $db, $groups, $wiki ) = $this->params;
-                       $this->conn = $this->lb->getConnection( $db, $groups, $wiki );
-               }
-
-               return call_user_func_array( array( $this->conn, $name ), $arguments );
-       }
-
-       public function __destruct() {
-               if ( $this->conn !== null ) {
-                       $this->lb->reuseConnection( $this->conn );
-               }
-       }
-}
index 91840dd..3d853cb 100644 (file)
@@ -115,10 +115,10 @@ class LoadMonitorMySQL implements LoadMonitor {
                }
 
                # Cache key missing or expired
-               if ( $cache->add( "$memcKey:lock", 1, 10 ) ) {
+               if ( $cache->lock( $memcKey, 0, 10 ) ) {
                        # Let this process alone update the cache value
                        $unlocker = new ScopedCallback( function () use ( $cache, $memcKey ) {
-                               $cache->delete( $memcKey );
+                               $cache->unlock( $memcKey );
                        } );
                } elseif ( is_array( $times ) ) {
                        # Could not acquire lock but an old cache exists, so use it
index edaef4a..6027375 100644 (file)
@@ -253,7 +253,7 @@ class LegacyLogger extends AbstractLogger {
                global $wgDBerrorLogTZ;
                static $cachedTimezone = null;
 
-               if ( $wgDBerrorLogTZ && !$cachedTimezone ) {
+               if ( !$cachedTimezone ) {
                        $cachedTimezone = new DateTimeZone( $wgDBerrorLogTZ );
                }
 
index 77bbd36..2c63dfb 100644 (file)
@@ -1077,10 +1077,11 @@ class DifferenceEngine extends ContextSource {
                // is often in a different language, mostly the page content language/dir
                $tableClass = 'diff diff-contentalign-' . htmlspecialchars( $this->getDiffLang()->alignStart() );
                $header = "<table class='$tableClass'>";
+               $userLang = htmlspecialchars( $this->getLanguage()->getHtmlCode() );
 
                if ( !$diff && !$otitle ) {
                        $header .= "
-                       <tr style='vertical-align: top;'>
+                       <tr style='vertical-align: top;' lang='{$userLang}'>
                        <td class='diff-ntitle'>{$ntitle}</td>
                        </tr>";
                        $multiColspan = 1;
@@ -1099,7 +1100,7 @@ class DifferenceEngine extends ContextSource {
                        }
                        if ( $otitle || $ntitle ) {
                                $header .= "
-                               <tr style='vertical-align: top;'>
+                               <tr style='vertical-align: top;' lang='{$userLang}'>
                                <td colspan='$colspan' class='diff-otitle'>{$otitle}</td>
                                <td colspan='$colspan' class='diff-ntitle'>{$ntitle}</td>
                                </tr>";
@@ -1108,10 +1109,11 @@ class DifferenceEngine extends ContextSource {
 
                if ( $multi != '' ) {
                        $header .= "<tr><td colspan='{$multiColspan}' style='text-align: center;' " .
-                               "class='diff-multi'>{$multi}</td></tr>";
+                               "class='diff-multi' lang='{$userLang}'>{$multi}</td></tr>";
                }
                if ( $notice != '' ) {
-                       $header .= "<tr><td colspan='{$multiColspan}' style='text-align: center;'>{$notice}</td></tr>";
+                       $header .= "<tr><td colspan='{$multiColspan}' style='text-align: center;' " .
+                               "lang='{$userLang}'>{$notice}</td></tr>";
                }
 
                return $header . $diff . "</table>";
index 5d0183f..83e04a5 100644 (file)
@@ -62,7 +62,7 @@ class TableDiffFormatter extends DiffFormatter {
        protected function blockHeader( $xbeg, $xlen, $ybeg, $ylen ) {
                // '<!--LINE \d+ -->' get replaced by a localised line number
                // in DifferenceEngine::localiseLineNumbers
-               $r = '<tr><td colspan="2" class="diff-lineno" id="L' . $xbeg . '" ><!--LINE ' . $xbeg . "--></td>\n" .
+               $r = '<tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l' . $xbeg . '" ><!--LINE ' . $xbeg . "--></td>\n" .
                        '<td colspan="2" class="diff-lineno"><!--LINE ' . $ybeg . "--></td></tr>\n";
 
                return $r;
index e62f8bd..039b9c6 100644 (file)
  */
 class BadTitleError extends ErrorPageError {
        /**
-        * @param string|Message $msg A message key (default: 'badtitletext')
+        * @param string|Message|MalformedTitleException $msg A message key (default: 'badtitletext'), or
+        *     a MalformedTitleException to figure out things from
         * @param array $params Parameter to wfMessage()
         */
        public function __construct( $msg = 'badtitletext', $params = array() ) {
-               parent::__construct( 'badtitle', $msg, $params );
+               if ( $msg instanceof MalformedTitleException ) {
+                       $errorMessage = $msg->getErrorMessage();
+                       if ( !$errorMessage ) {
+                               parent::__construct( 'badtitle', 'badtitletext', array() );
+                       } else {
+                               $errorMessageParams = $msg->getErrorMessageParameters();
+                               parent::__construct( 'badtitle', $errorMessage, $errorMessageParams );
+                       }
+               } else {
+                       parent::__construct( 'badtitle', $msg, $params );
+               }
        }
 
        /**
@@ -47,5 +58,4 @@ class BadTitleError extends ErrorPageError {
                $wgOut->setStatusCode( 400 );
                parent::report();
        }
-
 }
index 5f406c9..d6d7e9e 100644 (file)
@@ -235,16 +235,16 @@ class SwiftFileBackend extends FileBackendStore {
                        'body' => $params['content']
                ) );
 
-               $be = $this;
+               $that = $this;
                $method = __METHOD__;
-               $handler = function ( array $request, Status $status ) use ( $be, $method, $params ) {
+               $handler = function ( array $request, Status $status ) use ( $that, $method, $params ) {
                        list( $rcode, $rdesc, $rhdrs, $rbody, $rerr ) = $request['response'];
                        if ( $rcode === 201 ) {
                                // good
                        } elseif ( $rcode === 412 ) {
                                $status->fatal( 'backend-fail-contenttype', $params['dst'] );
                        } else {
-                               $be->onError( $status, $method, $params, $rerr, $rcode, $rdesc );
+                               $that->onError( $status, $method, $params, $rerr, $rcode, $rdesc );
                        }
                };
 
@@ -298,16 +298,16 @@ class SwiftFileBackend extends FileBackendStore {
                        'body' => $handle // resource
                ) );
 
-               $be = $this;
+               $that = $this;
                $method = __METHOD__;
-               $handler = function ( array $request, Status $status ) use ( $be, $method, $params ) {
+               $handler = function ( array $request, Status $status ) use ( $that, $method, $params ) {
                        list( $rcode, $rdesc, $rhdrs, $rbody, $rerr ) = $request['response'];
                        if ( $rcode === 201 ) {
                                // good
                        } elseif ( $rcode === 412 ) {
                                $status->fatal( 'backend-fail-contenttype', $params['dst'] );
                        } else {
-                               $be->onError( $status, $method, $params, $rerr, $rcode, $rdesc );
+                               $that->onError( $status, $method, $params, $rerr, $rcode, $rdesc );
                        }
                };
 
@@ -347,16 +347,16 @@ class SwiftFileBackend extends FileBackendStore {
                        ) + $this->sanitizeHdrs( $params ), // extra headers merged into object
                ) );
 
-               $be = $this;
+               $that = $this;
                $method = __METHOD__;
-               $handler = function ( array $request, Status $status ) use ( $be, $method, $params ) {
+               $handler = function ( array $request, Status $status ) use ( $that, $method, $params ) {
                        list( $rcode, $rdesc, $rhdrs, $rbody, $rerr ) = $request['response'];
                        if ( $rcode === 201 ) {
                                // good
                        } elseif ( $rcode === 404 ) {
                                $status->fatal( 'backend-fail-copy', $params['src'], $params['dst'] );
                        } else {
-                               $be->onError( $status, $method, $params, $rerr, $rcode, $rdesc );
+                               $that->onError( $status, $method, $params, $rerr, $rcode, $rdesc );
                        }
                };
 
@@ -405,9 +405,9 @@ class SwiftFileBackend extends FileBackendStore {
                        );
                }
 
-               $be = $this;
+               $that = $this;
                $method = __METHOD__;
-               $handler = function ( array $request, Status $status ) use ( $be, $method, $params ) {
+               $handler = function ( array $request, Status $status ) use ( $that, $method, $params ) {
                        list( $rcode, $rdesc, $rhdrs, $rbody, $rerr ) = $request['response'];
                        if ( $request['method'] === 'PUT' && $rcode === 201 ) {
                                // good
@@ -416,7 +416,7 @@ class SwiftFileBackend extends FileBackendStore {
                        } elseif ( $rcode === 404 ) {
                                $status->fatal( 'backend-fail-move', $params['src'], $params['dst'] );
                        } else {
-                               $be->onError( $status, $method, $params, $rerr, $rcode, $rdesc );
+                               $that->onError( $status, $method, $params, $rerr, $rcode, $rdesc );
                        }
                };
 
@@ -446,9 +446,9 @@ class SwiftFileBackend extends FileBackendStore {
                        'headers' => array()
                ) );
 
-               $be = $this;
+               $that = $this;
                $method = __METHOD__;
-               $handler = function ( array $request, Status $status ) use ( $be, $method, $params ) {
+               $handler = function ( array $request, Status $status ) use ( $that, $method, $params ) {
                        list( $rcode, $rdesc, $rhdrs, $rbody, $rerr ) = $request['response'];
                        if ( $rcode === 204 ) {
                                // good
@@ -457,7 +457,7 @@ class SwiftFileBackend extends FileBackendStore {
                                        $status->fatal( 'backend-fail-delete', $params['src'] );
                                }
                        } else {
-                               $be->onError( $status, $method, $params, $rerr, $rcode, $rdesc );
+                               $that->onError( $status, $method, $params, $rerr, $rcode, $rdesc );
                        }
                };
 
@@ -505,16 +505,16 @@ class SwiftFileBackend extends FileBackendStore {
                        'headers' => $metaHdrs + $customHdrs
                ) );
 
-               $be = $this;
+               $that = $this;
                $method = __METHOD__;
-               $handler = function ( array $request, Status $status ) use ( $be, $method, $params ) {
+               $handler = function ( array $request, Status $status ) use ( $that, $method, $params ) {
                        list( $rcode, $rdesc, $rhdrs, $rbody, $rerr ) = $request['response'];
                        if ( $rcode === 202 ) {
                                // good
                        } elseif ( $rcode === 404 ) {
                                $status->fatal( 'backend-fail-describe', $params['src'] );
                        } else {
-                               $be->onError( $status, $method, $params, $rerr, $rcode, $rdesc );
+                               $that->onError( $status, $method, $params, $rerr, $rcode, $rdesc );
                        }
                };
 
index 791be7f..fa4eb5f 100644 (file)
@@ -96,7 +96,7 @@ class TempFSFile extends FSFile {
        /**
         * Clean up the temporary file only after an object goes out of scope
         *
-        * @param stdClass $object
+        * @param object $object
         * @return TempFSFile This object
         */
        public function bind( $object ) {
index 926fd0b..ef402ea 100644 (file)
@@ -90,7 +90,7 @@ class LocalRepo extends FileRepo {
                foreach ( $storageKeys as $key ) {
                        $hashPath = $this->getDeletedHashPath( $key );
                        $path = "$root/$hashPath$key";
-                       $dbw->begin( __METHOD__ );
+                       $dbw->startAtomic( __METHOD__ );
                        // Check for usage in deleted/hidden files and preemptively
                        // lock the key to avoid any future use until we are finished.
                        $deleted = $this->deletedFileHasKey( $key, 'lock' );
@@ -106,7 +106,7 @@ class LocalRepo extends FileRepo {
                                wfDebug( __METHOD__ . ": $key still in use\n" );
                                $status->successCount++;
                        }
-                       $dbw->commit( __METHOD__ );
+                       $dbw->endAtomic( __METHOD__ );
                }
 
                return $status;
@@ -170,7 +170,7 @@ class LocalRepo extends FileRepo {
         * @return bool|Title
         */
        function checkRedirect( Title $title ) {
-               global $wgMemc;
+               $cache = ObjectCache::getMainWANInstance();
 
                $title = File::normalizeTitle( $title, 'exception' );
 
@@ -181,7 +181,7 @@ class LocalRepo extends FileRepo {
                } else {
                        $expiry = 86400; // has invalidation, 1 day
                }
-               $cachedValue = $wgMemc->get( $memcKey );
+               $cachedValue = $cache->get( $memcKey );
                if ( $cachedValue === ' ' || $cachedValue === '' ) {
                        // Does not exist
                        return false;
@@ -191,7 +191,7 @@ class LocalRepo extends FileRepo {
 
                $id = $this->getArticleID( $title );
                if ( !$id ) {
-                       $wgMemc->add( $memcKey, " ", $expiry );
+                       $cache->set( $memcKey, " ", $expiry );
 
                        return false;
                }
@@ -205,11 +205,11 @@ class LocalRepo extends FileRepo {
 
                if ( $row && $row->rd_namespace == NS_FILE ) {
                        $targetTitle = Title::makeTitle( $row->rd_namespace, $row->rd_title );
-                       $wgMemc->add( $memcKey, $targetTitle->getDBkey(), $expiry );
+                       $cache->set( $memcKey, $targetTitle->getDBkey(), $expiry );
 
                        return $targetTitle;
                } else {
-                       $wgMemc->add( $memcKey, '', $expiry );
+                       $cache->set( $memcKey, '', $expiry );
 
                        return false;
                }
@@ -275,14 +275,14 @@ class LocalRepo extends FileRepo {
                        );
                };
 
-               $repo = $this;
+               $that = $this;
                $applyMatchingFiles = function ( ResultWrapper $res, &$searchSet, &$finalFiles )
-                       use ( $repo, $fileMatchesSearch, $flags )
+                       use ( $that, $fileMatchesSearch, $flags )
                {
                        global $wgContLang;
-                       $info = $repo->getInfo();
+                       $info = $that->getInfo();
                        foreach ( $res as $row ) {
-                               $file = $repo->newFileFromRow( $row );
+                               $file = $that->newFileFromRow( $row );
                                // There must have been a search for this DB key, but this has to handle the
                                // cases were title capitalization is different on the client and repo wikis.
                                $dbKeysLook = array( str_replace( ' ', '_', $file->getName() ) );
@@ -489,14 +489,15 @@ class LocalRepo extends FileRepo {
         * @return void
         */
        function invalidateImageRedirect( Title $title ) {
-               global $wgMemc;
+               $cache = ObjectCache::getMainWANInstance();
+
                $memcKey = $this->getSharedCacheKey( 'image_redirect', md5( $title->getDBkey() ) );
                if ( $memcKey ) {
                        // Set a temporary value for the cache key, to ensure
                        // that this value stays purged long enough so that
                        // it isn't refreshed with a stale value due to a
                        // lagged slave.
-                       $wgMemc->set( $memcKey, ' PURGED', 12 );
+                       $cache->delete( $memcKey, 12 );
                }
        }
 
index 1d45428..0713a92 100644 (file)
@@ -485,7 +485,7 @@ class ArchivedFile {
                if ( $type == 'text' ) {
                        return $this->user_text;
                } elseif ( $type == 'id' ) {
-                       return $this->user;
+                       return (int)$this->user;
                }
 
                throw new MWException( "Unknown type '$type'." );
index 3d5d5d6..e51f381 100644 (file)
@@ -219,11 +219,15 @@ class ForeignAPIFile extends File {
        }
 
        /**
-        * @param string $method
+        * @param string $type
         * @return int|null|string
         */
-       public function getUser( $method = 'text' ) {
-               return isset( $this->mInfo['user'] ) ? strval( $this->mInfo['user'] ) : null;
+       public function getUser( $type = 'text' ) {
+               if ( $type == 'text' ) {
+                       return isset( $this->mInfo['user'] ) ? strval( $this->mInfo['user'] ) : null;
+               } elseif ( $type == 'id' ) {
+                       return 0; // What makes sense here, for a remote user?
+               }
        }
 
        /**
index b4cced3..fe42c2d 100644 (file)
@@ -243,21 +243,19 @@ class LocalFile extends File {
         * @return bool
         */
        function loadFromCache() {
-               global $wgMemc;
-
                $this->dataLoaded = false;
                $this->extraDataLoaded = false;
                $key = $this->getCacheKey();
 
                if ( !$key ) {
-
                        return false;
                }
 
-               $cachedValues = $wgMemc->get( $key );
+               $cache = ObjectCache::getMainWANInstance();
+               $cachedValues = $cache->get( $key );
 
                // Check if the key existed and belongs to this version of MediaWiki
-               if ( isset( $cachedValues['version'] ) && $cachedValues['version'] == MW_FILE_VERSION ) {
+               if ( is_array( $cachedValues ) && $cachedValues['version'] == MW_FILE_VERSION ) {
                        wfDebug( "Pulling file metadata from cache key $key\n" );
                        $this->fileExists = $cachedValues['fileExists'];
                        if ( $this->fileExists ) {
@@ -283,22 +281,20 @@ class LocalFile extends File {
         * Save the file metadata to memcached
         */
        function saveToCache() {
-               global $wgMemc;
-
                $this->load();
-               $key = $this->getCacheKey();
 
+               $key = $this->getCacheKey();
                if ( !$key ) {
                        return;
                }
 
                $fields = $this->getCacheFields( '' );
-               $cache = array( 'version' => MW_FILE_VERSION );
-               $cache['fileExists'] = $this->fileExists;
+               $cacheVal = array( 'version' => MW_FILE_VERSION );
+               $cacheVal['fileExists'] = $this->fileExists;
 
                if ( $this->fileExists ) {
                        foreach ( $fields as $field ) {
-                               $cache[$field] = $this->$field;
+                               $cacheVal[$field] = $this->$field;
                        }
                }
 
@@ -306,13 +302,29 @@ class LocalFile extends File {
                // If the cache value gets to large it will not fit in memcached and nothing will
                // get cached at all, causing master queries for any file access.
                foreach ( $this->getLazyCacheFields( '' ) as $field ) {
-                       if ( isset( $cache[$field] ) && strlen( $cache[$field] ) > 100 * 1024 ) {
-                               unset( $cache[$field] ); // don't let the value get too big
+                       if ( isset( $cacheVal[$field] ) && strlen( $cacheVal[$field] ) > 100 * 1024 ) {
+                               unset( $cacheVal[$field] ); // don't let the value get too big
                        }
                }
 
                // Cache presence for 1 week and negatives for 1 day
-               $wgMemc->set( $key, $cache, $this->fileExists ? 86400 * 7 : 86400 );
+               $cache = ObjectCache::getMainWANInstance();
+               $cache->set( $key, $cacheVal, $this->fileExists ? 86400 * 7 : 86400 );
+       }
+
+       /**
+        * Purge the file object/metadata cache
+        */
+       function invalidateCache() {
+               $this->load();
+
+               $key = $this->getCacheKey();
+               if ( !$key ) {
+                       return;
+               }
+
+               $cache = ObjectCache::getMainWANInstance();
+               $cache->delete( $key );
        }
 
        /**
@@ -612,7 +624,7 @@ class LocalFile extends File {
                        __METHOD__
                );
 
-               $this->saveToCache();
+               $this->invalidateCache();
 
                $this->unlock(); // done
 
@@ -734,7 +746,7 @@ class LocalFile extends File {
                if ( $type == 'text' ) {
                        return $this->user_text;
                } elseif ( $type == 'id' ) {
-                       return $this->user;
+                       return (int)$this->user;
                }
        }
 
@@ -753,7 +765,7 @@ class LocalFile extends File {
        function getBitDepth() {
                $this->load();
 
-               return $this->bits;
+               return (int)$this->bits;
        }
 
        /**
@@ -842,25 +854,7 @@ class LocalFile extends File {
         * Refresh metadata in memcached, but don't touch thumbnails or squid
         */
        function purgeMetadataCache() {
-               $this->loadFromDB( File::READ_LATEST );
-               $this->saveToCache();
-               $this->purgeHistory();
-       }
-
-       /**
-        * Purge the shared history (OldLocalFile) cache.
-        *
-        * @note This used to purge old thumbnails as well.
-        */
-       function purgeHistory() {
-               global $wgMemc;
-
-               $hashedName = md5( $this->getName() );
-               $oldKey = $this->repo->getSharedCacheKey( 'oldfile', $hashedName );
-
-               if ( $oldKey ) {
-                       $wgMemc->delete( $oldKey );
-               }
+               $this->invalidateCache();
        }
 
        /**
@@ -1406,11 +1400,8 @@ class LocalFile extends File {
                #       to after $wikiPage->doEdit has been called.
                $dbw->commit( __METHOD__ );
 
-               # Save to memcache.
-               # We shall not saveToCache before the commit since otherwise
-               # in case of a rollback there is an usable file from memcached
-               # which in fact doesn't really exist (bug 24978)
-               $this->saveToCache();
+               # Update memcache after the commit
+               $this->invalidateCache();
 
                if ( $exists ) {
                        # Invalidate the cache for the description page
@@ -1612,21 +1603,21 @@ class LocalFile extends File {
 
                // Hack: the lock()/unlock() pair is nested in a transaction so the locking is not
                // tied to BEGIN/COMMIT. To avoid slow purges in the transaction, move them outside.
-               $file = $this;
+               $that = $this;
                $this->getRepo()->getMasterDB()->onTransactionIdle(
-                       function () use ( $file, $archiveNames ) {
+                       function () use ( $that, $archiveNames ) {
                                global $wgUseSquid;
 
-                               $file->purgeEverything();
+                               $that->purgeEverything();
                                foreach ( $archiveNames as $archiveName ) {
-                                       $file->purgeOldThumbnails( $archiveName );
+                                       $that->purgeOldThumbnails( $archiveName );
                                }
 
                                if ( $wgUseSquid ) {
                                        // Purge the squid
                                        $purgeUrls = array();
                                        foreach ( $archiveNames as $archiveName ) {
-                                               $purgeUrls[] = $file->getArchiveUrl( $archiveName );
+                                               $purgeUrls[] = $that->getArchiveUrl( $archiveName );
                                        }
                                        SquidUpdate::purge( $purgeUrls );
                                }
@@ -1667,7 +1658,6 @@ class LocalFile extends File {
                $this->purgeOldThumbnails( $archiveName );
                if ( $status->isOK() ) {
                        $this->purgeDescription();
-                       $this->purgeHistory();
                }
 
                if ( $wgUseSquid ) {
@@ -1811,7 +1801,7 @@ class LocalFile extends File {
                                        array( 'img_sha1' => $this->sha1 ),
                                        array( 'img_name' => $this->getName() ),
                                        __METHOD__ );
-                               $this->saveToCache();
+                               $this->invalidateCache();
                        }
 
                        $this->unlock(); // done
@@ -2565,7 +2555,6 @@ class LocalFileRestoreBatch {
                        } else {
                                wfDebug( __METHOD__ . " restored {$status->successCount} as archived versions\n" );
                                $this->file->purgeDescription();
-                               $this->file->purgeHistory();
                        }
                }
 
index 39ed24f..738fec3 100644 (file)
@@ -51,6 +51,7 @@
  *    'id'                  -- HTML id attribute
  *    'cssclass'            -- CSS class
  *    'csshelpclass'        -- CSS class used to style help text
+ *    'dir'                 -- Direction of the element.
  *    'options'             -- associative array mapping labels to values.
  *                             Some field types support multi-level arrays.
  *    'options-messages'    -- associative array mapping message keys to values.
@@ -357,6 +358,7 @@ class HTMLForm extends ContextSource {
         * @return bool
         */
        public function isVForm() {
+               wfDeprecated( __METHOD__, '1.25' );
                return false;
        }
 
index 9576c77..0c3fe44 100644 (file)
@@ -10,6 +10,7 @@ abstract class HTMLFormField {
        protected $mValidationCallback;
        protected $mFilterCallback;
        protected $mName;
+       protected $mDir;
        protected $mLabel; # String label.  Set on construction
        protected $mID;
        protected $mClass = '';
@@ -377,6 +378,10 @@ abstract class HTMLFormField {
                        $this->mName = $params['name'];
                }
 
+               if ( isset( $params['dir'] ) ) {
+                       $this->mDir = $params['dir'];
+               }
+
                $validName = Sanitizer::escapeId( $this->mName );
                $validName = str_replace( array( '.5B', '.5D' ), array( '[', ']' ), $validName );
                if ( $this->mName != $validName && !isset( $params['nodata'] ) ) {
index 88df49d..a67e52e 100644 (file)
@@ -11,6 +11,7 @@ class HTMLTextField extends HTMLFormField {
                                'name' => $this->mName,
                                'size' => $this->getSize(),
                                'value' => $value,
+                               'dir' => $this->mDir,
                        ) + $this->getTooltipAndAccessKey();
 
                if ( $this->mClass !== '' ) {
index 7826a0c..0c0e425 100644 (file)
@@ -38,6 +38,7 @@ class VFormHTMLForm extends HTMLForm {
        protected $displayFormat = 'vform';
 
        public function isVForm() {
+               wfDeprecated( __METHOD__, '1.25' );
                return true;
        }
 
index 44ca7d3..0ccdb11 100644 (file)
@@ -133,26 +133,24 @@ class WebInstallerOutput {
                        'mediawiki.skinning.interface',
                );
 
-               if ( file_exists( "$wgStyleDirectory/Vector/Vector.php" ) ) {
+               $resourceLoader = new ResourceLoader();
+
+               if ( file_exists( "$wgStyleDirectory/Vector/skin.json" ) ) {
                        // Force loading Vector skin if available as a fallback skin
                        // for whatever ResourceLoader wants to have as the default.
-
-                       // Include instead of require, as this will work without it, it will just look bad.
-                       // We need the 'global' statement for $wgResourceModules because the Vector skin adds the
-                       // definitions for its RL modules there that we use implicitly below.
-
-                       // @codingStandardsIgnoreStart
-                       global $wgResourceModules; // This is NOT UNUSED!
-                       // @codingStandardsIgnoreEnd
-
-                       include_once "$wgStyleDirectory/Vector/Vector.php";
+                       $registry = new ExtensionRegistry();
+                       $data = $registry->readFromQueue( array(
+                               "$wgStyleDirectory/Vector/skin.json" => 1,
+                       ) );
+                       if ( isset( $data['globals']['wgResourceModules'] ) ) {
+                               $resourceLoader->register( $data['globals']['wgResourceModules'] );
+                       }
 
                        $moduleNames[] = 'skins.vector.styles';
                }
 
                $moduleNames[] = 'mediawiki.legacy.config';
 
-               $resourceLoader = new ResourceLoader();
                $rlContext = new ResourceLoaderContext( $resourceLoader, new FauxRequest( array(
                                'debug' => 'true',
                                'lang' => $this->getLanguageCode(),
@@ -163,6 +161,10 @@ class WebInstallerOutput {
                foreach ( $moduleNames as $moduleName ) {
                        /** @var ResourceLoaderFileModule $module */
                        $module = $resourceLoader->getModule( $moduleName );
+                       if ( !$module ) {
+                               // T98043: Don't fatal, but it won't look as pretty.
+                               continue;
+                       }
 
                        // Based on: ResourceLoaderFileModule::getStyles (without the DB query)
                        $styles = array_merge( $styles, ResourceLoader::makeCombinedStyles(
index 62f0f03..5680c35 100644 (file)
@@ -47,7 +47,6 @@
        "config-env-bad": "Comprobóse l'entornu.\nNun pue instalar MediaWiki.",
        "config-env-php": "PHP $1 ta instaláu.",
        "config-env-hhvm": "HHVM $1 ta instaláu.",
-       "config-unicode-using-utf8": "Usando utf8_normalize.so de Brion Vibber pa la normalización Unicode.",
        "config-unicode-using-intl": "Usando la [http://pecl.php.net/intl estensión intl PECL] pa la normalización Unicode.",
        "config-unicode-pure-php-warning": "'''Avisu:''' La [http://pecl.php.net/intl estensión intl PECL] nun ta disponible pa xestionar la normalización Unicode; volviendo a la implementación lenta en PHP puru.\nSi xestiona un sitiu con un tráficu altu, tendría de lleer una migaya sobro la [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalización Unicode].",
        "config-unicode-update-warning": "'''Avisu:''' La versión instalada del envoltoriu de normalización Unicode usa una versión antigua de la biblioteca [http://site.icu-project.org/ de los proyeutos ICU].\nTendría [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations d'anovala] si ye importante pa vusté usar Unicode.",
index 1178a1a..077c503 100644 (file)
@@ -41,7 +41,7 @@
        "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-server-oracle": "Хаамийн базан «$1» нийса йоцу TNS.\nЛелае «TNS Name», я могӀа «Easy Connect» ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm ЦӀерш техкаран кеп Oracle])",
        "config-sqlite-fts3-downgrade": "PHPн  гӀо до FTS3 яц — кхуссу таблицаш",
        "config-mysql-utf8": "UTF-8",
        "config-mssql-auth": "Аутентификацин тайп:",
@@ -62,7 +62,7 @@
        "config-license-gfdl": "GNU Free Documentation License 1.3 я кхин хьалха хиларг",
        "config-license-pd": "Юкъараллин хьал",
        "config-license-cc-choose": "Харжа цхьа лицензи Creative Commons",
-       "config-email-settings": "ЭлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\87Ñ\82а нисяр",
+       "config-email-settings": "ЭлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\88Ñ\82 нисяр",
        "config-enable-email": "Латае дӀайохьуьйту e-mail",
        "config-upload-deleted": "ДӀаяхна файлийн директори:",
        "config-cc-again": "Хьаржа кхин цӀа…",
index da2de84..0321d8e 100644 (file)
@@ -53,7 +53,6 @@
        "config-env-bad": "Prostředí bylo zkontrolováno.\nMediaWiki nelze nainstalovat.",
        "config-env-php": "Je nainstalováno PHP $1.",
        "config-env-hhvm": "Je nainstalováno HHVM $1.",
-       "config-unicode-using-utf8": "Pro normalizaci Unicode se používá utf8_normalize.so Briona Vibbera.",
        "config-unicode-using-intl": "Pro normalizaci Unicode se používá [http://pecl.php.net/intl PECL rozšíření intl].",
        "config-unicode-pure-php-warning": "'''Upozornění''': Není dostupné [http://pecl.php.net/intl PECL rozšíření intl] pro normalizaci Unicode, bude se využívat pomalá implementace v čistém PHP.\nPokud provozujete wiki s velkou návštěvností, měli byste si přečíst něco o [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalizaci Unicode].",
        "config-unicode-update-warning": "'''Upozornění''': Nainstalovaná verze vrstvy pro normalizaci Unicode používá starší verzi knihovny [http://site.icu-project.org/ projektu ICU].\nPokud vám aspoň trochu záleží na používání Unicode, měli byste [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations ji aktualizovat].",
index b9de2cf..802c819 100644 (file)
@@ -4,9 +4,18 @@
                        "Peter Alberti",
                        "Christian List",
                        "Tjernobyl",
-                       "Thomsen"
+                       "Thomsen",
+                       "MGA73"
                ]
        },
+       "config-desc": "Installationsprogrammet til MediaWiki",
+       "config-title": "Installation af MediaWiki $1",
+       "config-information": "Information",
+       "config-localsettings-upgrade": "En <code>LocalSettings.php</code>-fil er blevet fundet.\nFor at opgradere imstallationen, skriv venligst værdien af <code>$wgUpgradeKey</code> i boksen nedenfor.\nDu finder denne i <code>LocalSettings.php</code>.",
+       "config-localsettings-cli-upgrade": "En <code>LocalSettings.php</code>-fil er blevet fundet.\nFor at opgradere installationen skal du køre <code>update.php</code> i stedet for",
+       "config-localsettings-key": "Opgraderingsnøgle:",
+       "config-localsettings-badkey": "Den nøgle du indtastede er forkert.",
+       "config-upgrade-key-missing": "En eksisterende installation af MediaWiki er blevet fundet.\nFor at opgradere denne installation skal du tilføje følgende linje i bunden af din <code>LocalSettings.php</code>:\n\n$1",
        "config-page-language": "Sprog",
        "config-page-welcome": "Velkommen til MediaWiki!",
        "config-page-dbconnect": "Forbind til database",
index a79282a..b5794bf 100644 (file)
@@ -9,7 +9,6 @@
        "config-title": "MediaWiki $1 installation",
        "config-information": "Information",
        "config-copyright": "=== Copyright and Terms ===\n\n$1\n\nThis program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful, but '''without any warranty'''; without even the implied warranty of '''merchantability''' or '''fitness for a particular purpose'''.\nSee the GNU General Public Licence for more details.\n\nYou should have received <doclink href=Copying>a copy of the GNU General Public Licence</doclink> along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. or [http://www.gnu.org/copyleft/gpl.html read it online].",
-       "config-unicode-using-utf8": "Using Brion Vibber's utf8_normalize.so for Unicode normalisation.",
        "config-unicode-using-intl": "Using the [http://pecl.php.net/intl intl PECL extension] for Unicode normalisation.",
        "config-unicode-pure-php-warning": "'''Warning:''' The [http://pecl.php.net/intl intl PECL extension] is not available to handle Unicode normalisation, falling back to slow pure-PHP implementation.\nIf you run a high-traffic site, you should read a little on [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode normalisation].",
        "config-unicode-update-warning": "'''Warning:''' The installed version of the Unicode normalisation wrapper uses an older version of [http://site.icu-project.org/ the ICU project's] library.\nYou should [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations upgrade] if you are at all concerned about using Unicode.",
index a983651..e83b478 100644 (file)
        "config-upload-deleted": "*Directorio para los archivos eliminados:",
        "config-upload-deleted-help": "Elige un directorio en el que guardar los archivos eliminados.\nLo ideal es una carpeta no accesible desde la red.",
        "config-logo": "URL del logo :",
-       "config-logo-help": "La apariencia por defecto de MediaWiki incluye espacio para un logotipo de 135x160 píxeles encima del menú de la barra lateral.\nCargua una imagen de tamaño adecuado e introduce la dirección URL aquí.\n\nPuedes usar <code>$wgStylePath</code> o <code>$wgScriptPath</code> si tu logotipo es relativo a esas rutas.\n\nSi no deseas un logotipo, deja esta casilla en blanco.",
+       "config-logo-help": "La apariencia predeterminada de MediaWiki incluye espacio para un logotipo de 135x160 píxeles encima del menú de la barra lateral.\nCarga una imagen de tamaño adecuado y escribe la dirección URL aquí.\n\nPuedes usar <code>$wgStylePath</code> o <code>$wgScriptPath</code> si tu logotipo es relativo a esas rutas.\n\nSi no deseas un logotipo, deja esta casilla en blanco.",
        "config-instantcommons": "Habilitar Instant Commons",
        "config-instantcommons-help": "[//www.mediawiki.org/wiki/InstantCommons Instant Commons] es una característica que permite que los wikis puedan utilizar imágenes, sonidos y otros archivos multimedia que se encuentran en el sitio [//commons.wikimedia.org/ Wikimedia Commons].\nPara ello, MediaWiki requiere acceso a Internet.\n\nPara obtener más información sobre esta función, incluidas las instrucciones sobre cómo configurarlo para otras wikis distintas de Wikimedia Commons, consulte [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgForeignFileRepos el manual].",
        "config-cc-error": "El selector de licencia de Creative Commons no dio resultado.\nEscribe el nombre de la licencia manualmente.",
        "config-install-database": "Configurando la base de datos",
        "config-install-schema": "Creando el esquema",
        "config-install-pg-schema-not-exist": "El esquema PostgreSQL no existe.",
-       "config-install-pg-schema-failed": "La creación de las tablas ha fallado.\nAsegúrate de que el usuario \"$1\" puede escribir en el esquema \"$2\".",
+       "config-install-pg-schema-failed": "Falló la creación de las tablas.\nAsegúrate de que la cuenta «$1» tiene permiso de escritura para el esquema «$2».",
        "config-install-pg-commit": "Validando los cambios",
        "config-install-pg-plpgsql": "Comprobación de lenguaje PL/pgSQL",
        "config-pg-no-plpgsql": "Necesita instalar el lenguaje PL/pgSQL en la base de datos $1",
index d40c45a..0a147d2 100644 (file)
        "config-help-restart": "Ynskir tú at sletta øll goymd dáta sum tú hevur skrivað og byrja umaftur at installera?",
        "config-restart": "Ja, byrja umaftur",
        "config-env-php": "PHP $1 er innstallerað.",
-       "config-env-php-toolow": "PHP $1 er installerað.\nMen, MediaWiki krevur PHP $2 ella hægri.",
+       "config-env-hhvm": "HHVM $1 er lagt inn.",
+       "config-unicode-using-intl": "Brúkar [http://pecl.php.net/intl intl PECL ískoytið] til Unicode normalisering.",
+       "config-unicode-pure-php-warning": "<strong>Ávaring:</strong> [http://pecl.php.net/intl intl PECL ískoytið] er ikki tøkt at handfara Unicode normalisering, fellur aftur til eina spakuligari reina-PHP verkseting.\nUm tú koyrir eina netsíðu við høgari ferðslu, so eigur tú at lesa eitt sindur um [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode normalisering].",
+       "config-unicode-update-warning": "<strong>Ávaring:</strong> Tann innlagda versjónin av Unicode normalisering wrapper nýtir eina eldri versjón av [http://site.icu-project.org/ bókasavninum hjá ICU verkætlanini].\nTú eigur at [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations fremja uppstigning] um tú stúrir fyri at nýta Unicode.",
+       "config-diff3-bad": "GNU diff3 ikki funnið.",
+       "config-git": "Fann Git version control forritið: <code>$1</code>.",
+       "config-git-bad": "Git version control forritið varð ikki funnið.",
+       "config-imagemagick": "Fann ImageMagick: <code>$1</code>.\nTað at velja smámynd verður gjørt virkið um tú aktiverar møgulleikan at leggja myndir út.",
+       "config-using-server": "Brúkar servaranavnið \"<nowiki>$1</nowiki>\".",
+       "config-using-uri": "Nýtir servara URL \"<nowiki>$1$2</nowiki>\".",
+       "config-db-type": "Slag av dátugrunni:",
+       "config-db-host": "Dátugrunn vertur:",
+       "config-db-username": "Dátugrunn brúkaranavn:",
+       "config-db-password": "Dátugrunn loyniorð:",
        "mainpagetext": "'''Innlegging av Wiki-ritbúnaði væleydnað.'''"
 }
index c975090..17f784f 100644 (file)
@@ -68,7 +68,6 @@
        "config-env-bad": "L’environnement a été vérifié.\nVous ne pouvez pas installer MediaWiki.",
        "config-env-php": "PHP $1 est installé.",
        "config-env-hhvm": "HHVM $1 est installé.",
-       "config-unicode-using-utf8": "Utilisation de utf8_normalize.so par Brion Vibber pour la normalisation Unicode.",
        "config-unicode-using-intl": "Utilisation de [http://pecl.php.net/intl l'extension PECL intl] pour la normalisation Unicode.",
        "config-unicode-pure-php-warning": "<strong>Attention</strong> : L'[http://pecl.php.net/intl extension PECL intl] n'est pas disponible pour la normalisation d’Unicode, retour à la version lente implémentée en PHP.\nSi votre site web sera très fréquenté, vous devriez lire ceci : [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations ''Unicode normalization''] (en anglais).",
        "config-unicode-update-warning": "'''Attention''': La version installée du ''wrapper'' de normalisation Unicode utilise une vieille version de la [http://site.icu-project.org/ bibliothèque logicielle ''ICU Project''].\nVous devriez faire une [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations mise à jour] si vous êtes tout à fait concerné par l'usage d'Unicode.",
index e85e735..c430d60 100644 (file)
@@ -55,7 +55,6 @@
        "config-env-bad": "Kondisi telah diperiksa.\nAnda tidak dapat menginstal MediaWiki.",
        "config-env-php": "PHP $1 diinstal.",
        "config-env-hhvm": "HHVM $1 telah dipasang.",
-       "config-unicode-using-utf8": "Menggunakan utf8_normalize.so Brion Vibber untuk normalisasi Unicode.",
        "config-unicode-using-intl": "Menggunakan [http://pecl.php.net/intl ekstensi PECL intl] untuk normalisasi Unicode.",
        "config-unicode-pure-php-warning": "'''Peringatan''': [http://pecl.php.net/intl Ekstensi intl PECL] untuk menangani normalisasi Unicode tidak tersedia, kembali menggunakan implementasi murni PHP yang lambat.\nJika Anda menjalankan situs berlalu lintas tinggi, Anda harus sedikit membaca [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalisasi Unicode].",
        "config-unicode-update-warning": "'''Peringatan''': Versi terinstal dari pembungkus normalisasi Unicode menggunakan versi lama pustaka [http://site.icu-project.org/ proyek ICU].\nAnda harus [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations memutakhirkannya] jika Anda ingin menggunakan Unicode.",
index dedc3c2..a1ca9d2 100644 (file)
@@ -59,7 +59,6 @@
        "config-env-bad": "環境を確認しました。\nMediaWiki のインストールはできません。",
        "config-env-php": "PHP $1がインストールされています。",
        "config-env-hhvm": "HHVM $1 がインストールされています。",
-       "config-unicode-using-utf8": "Unicode正規化に、Brion Vibberのutf8_normalize.soを使用。",
        "config-unicode-using-intl": "Unicode正規化に[http://pecl.php.net/intl intl PECL 拡張機能]を使用。",
        "config-unicode-pure-php-warning": "<strong>警告:</strong> Unicode 正規化の処理に [http://pecl.php.net/intl intl PECL 拡張機能]を利用できないため、処理が遅いピュア PHP の実装を代わりに使用しています。\n高トラフィックのサイトを運営する場合は、[//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode 正規化]をお読みください。",
        "config-unicode-update-warning": "<strong>警告:</strong> インストールされているバージョンの Unicode 正規化ラッパーは、[http://site.icu-project.org/ ICU プロジェクト]のライブラリの古いバージョンを使用しています。\nUnicode を少しでも利用する可能性がある場合は、[//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations アップグレード]してください。",
index 26772e9..c658c5c 100644 (file)
@@ -51,7 +51,6 @@
        "config-env-bad": "Miljøet har blitt sjekket.\nDu kan installere MediaWiki.",
        "config-env-php": "PHP $1 er innstallert.",
        "config-env-hhvm": "HHVM $1 er installert.",
-       "config-unicode-using-utf8": "Bruker Brion Vibbers utf8_normalize.so for Unicode-normalisering.",
        "config-unicode-using-intl": "Bruker [http://pecl.php.net/intl intl PECL-utvidelsen] for Unicode-normalisering.",
        "config-unicode-pure-php-warning": "'''Advarsel''': [http://pecl.php.net/intl intl PECL-utvidelsen] er ikke tilgjengelig for å håndtere Unicode-normaliseringen, faller tilbake til en langsommere ren-PHP-implementasjon.\nOm du kjører et nettsted med høy trafikk bør du lese litt om [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode-normalisering].",
        "config-unicode-update-warning": "'''Advarsel''': Den installerte versjonen av Unicode-normalisereren bruker en eldre versjon av [http://site.icu-project.org/ ICU-prosjektets] bibliotek.\nDu bør [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations oppgradere] om du er bekymret for å bruke Unicode.",
index d7bd9a6..a2ab5d2 100644 (file)
@@ -59,7 +59,6 @@
        "config-env-bad": "De omgeving is gecontroleerd.\nU kunt MediaWiki niet installeren.",
        "config-env-php": "PHP $1 is op dit moment geïnstalleerd.",
        "config-env-hhvm": "HHVM $1 is geïnstalleerd.",
-       "config-unicode-using-utf8": "Voor Unicode-normalisatie wordt utf8_normalize.so van Brion Vibber gebruikt.",
        "config-unicode-using-intl": "Voor Unicode-normalisatie wordt de [http://pecl.php.net/intl PECL-extensie intl] gebruikt.",
        "config-unicode-pure-php-warning": "'''Waarschuwing''': de [http://pecl.php.net/intl PECL-extensie intl] is niet beschikbaar om de Unicodenormalisatie af te handelen en daarom wordt de langzame PHP-implementatie gebruikt.\nAls u MediaWiki voor een website met veel verkeer installeert, lees u dan in over [//www.mediawiki.org/wiki/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.",
index e9b05cf..dbe651c 100644 (file)
@@ -8,7 +8,10 @@
                        "Trncmvsr",
                        "Sayginer",
                        "Trockya",
-                       "Aşilleus"
+                       "Aşilleus",
+                       "Nighteagle2000",
+                       "Sadrettin",
+                       "Captantrips"
                ]
        },
        "config-desc": "MediaWiki yükleyicisi",
@@ -53,7 +56,7 @@
        "config-env-good": "Ortam kontrol edildi.\nMediaWiki'yi kurabilirsiniz.",
        "config-env-bad": "Ortam kontrol edildi.\nMediaWiki'yi kuramazsınız.",
        "config-env-php": "PHP $1 kurulu.",
-       "config-unicode-using-utf8": "Unikod normalleştirmesi için Brion Vibber'in utf8_normalize.so kullanılıyor.",
+       "config-env-hhvm": "HHVM $1 kuruldu",
        "config-unicode-using-intl": "Unikod normalleştirmesi için [http://pecl.php.net/intl intl PECL uzantısı] kullanılıyor.",
        "config-xml-bad": "PHP 'nin XML modülü eksik.\nMediaWiki bu modüldeki fonksiyonlara ihtiyaç duyar ve şimdiki kurulumda çalışmayacaktır.\nMandrake kullanıyorsanız php-xml paketini yükleyin.",
        "config-pcre-old": "<strong>Ağır hata:</strong> PCRE $1 veya daha üst versiyon gerekli.\nSizin PHP kurulumunuz PCRE $2 ile bağlı.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Daha fazla bilgi].",
@@ -78,6 +81,9 @@
        "config-db-password": "Veritabanı parolası:",
        "config-db-username-empty": "\"{{int:config-db-username}}\" için bir değer girmelisiniz.",
        "config-db-install-username": "Yükleme sırasında veritabanına bağlanmak için kullanılan kullanıcı adını girin.\nBu MediaWiki hesabının kullanıcı adı değildir; Bu veritabanın kullanıcı adıdır.",
+       "config-db-install-password": "Kurulum işlemi boyunca veritabanına bağlanmak için kullanılacak şifreyi girin.\nBu şifre MediaWiki hesap şifresi değil, veritabanınızın şifresidir.",
+       "config-db-install-help": "Kurulum işlemi boyunca veritabanına bağlanmak için kullanıcı adı ve şifre giriniz.",
+       "config-db-account-lock": "Normal çalışma sırasında aynı kullanıcı adı ve şifreyi kullanınız.",
        "config-db-wiki-account": "Kullanıcı hesabı için normal işlem",
        "config-db-prefix": "Veritabanı Tablo öneki:",
        "config-db-charset": "Veritabanı karakter seti",
        "config-mysql-old": "MySQL  $1  veya daha yenisi gerekir. Sende bulunan  $2 .",
        "config-db-port": "Veritabanı bağlantı noktası:",
        "config-db-schema": "MediaWiki için şema:",
+       "config-db-schema-help": "Bu şema yeterli olacaktır.\nEğer gerçekten ihtiyaç duyarsanız değiştirin.",
        "config-pg-test-error": "Veritabanıyla bağlantı kurulamıyor ''' $1 ''':$2",
        "config-sqlite-dir": "SQLite veri dizini",
        "config-oracle-def-ts": "Varsayılan tablo alanı:",
+       "config-type-mysql": "MySQL (veya uyumlu)",
+       "config-type-mssql": "Microsoft SQL Server",
        "config-header-mysql": "MySQL ayarları",
        "config-header-postgres": "PostgreSQL ayarları",
        "config-header-sqlite": "SQLite ayarları",
        "config-invalid-schema": "Geçersiz şema MediaWiki için \" $1 \".\nYalnızca ASCII harf (a-z, A-Z), rakamların (0-9) ve alt çizgi (_) kullanın.",
        "config-db-sys-user-exists-oracle": "Kullanıcı hesabı \" $1 \" zaten var. SYSDBA sadece yeni bir hesap oluşturmak için kullanılabilir.",
        "config-postgres-old": "PostgreSQL  $1  veya daha yenisi gerekir. Sende  $2 sürümü var.",
+       "config-sqlite-name-help": "Wiki'nizi tanımlayan bir ad seçin.\nBoşluk ya da tire kullanmayın.\nBu isim SQLite veri dosyası için kullanılacaktır.",
        "config-sqlite-mkdir-error": "Veri dizini oluşturulurken bir hata oluştu \" $1 \".\nKonumu denetleyin ve yeniden deneyin.",
        "config-sqlite-connection-error": "$1.\n\nVeri dizini ve veritabanı adını denetleyin ve yeniden deneyin.",
        "config-sqlite-readonly": "Dosya <code>$1</code> yazılabilir değil.",
        "config-sqlite-cant-create-db": "Veritabanı dosyası oluşturamadı <code>$1</code> .",
        "config-regenerate": "LocalSettings.php yi yeniden oluştur →",
        "config-show-table-status": "<code>SHOW TABLE STATUS</code>sorgu başarısız!",
+       "config-db-web-account": "Ağ erişimi için veritabanı hesabı",
+       "config-db-web-help": "Ağ sunucusunun olağan wiki işlemleri için veritabanına bağlanırken kullanacağı kullanıcı adı ve parolayı seçin.",
        "config-db-web-account-same": "Yükleme için aynı hesabı kullan",
        "config-db-web-create": "Eğer oluşturulmuş hesap yoksa yeni hesap oluştur",
        "config-mysql-engine": "Depolama motoru:",
        "config-mysql-binary": "İkili",
        "config-mysql-utf8": "UTF-8",
        "config-mssql-auth": "Kimlik doğrulama türü:",
+       "config-mssql-install-auth": "Kurulum işlemi sırasında veritabanına bağlanmak için kullanılacak doğrulama türünü seçin.\n\"{{int:config-mssql-windowsauth}}\"'ı seçerseniz,ağ sunucusu olarak çalışan kullanıcının kimlik bilgileri kullanılacaktır.",
        "config-mssql-sqlauth": "SQL Server kimlik doğrulaması",
        "config-mssql-windowsauth": "Windows Kimlik Doğrulama",
        "config-site-name": "Wiki adı:",
+       "config-site-name-help": "Bu tarayıcının başlık çubuğunda ve diğer yerlerde görünecek.",
        "config-site-name-blank": "Bir site adı girin.",
        "config-project-namespace": "Proje isim alanı:",
        "config-ns-generic": "Proje",
        "config-advanced-settings": "Gelişmiş yapılandırma",
        "config-memcached-servers": "Memcached sunucuları:",
        "config-extensions": "Uzantılar",
+       "config-skins": "Görünümler",
        "config-install-step-done": "Yapıldı",
        "config-install-step-failed": "Başarısız",
        "config-install-database": "Veritabanı ayarlama",
index 30342aa..bf3636b 100644 (file)
@@ -50,7 +50,6 @@
        "config-env-bad": "Đã kiểm tra môi trường.\nBạn không thể cài đặt MediaWiki.",
        "config-env-php": "PHP $1 đã được cài đặt.",
        "config-env-hhvm": "HHVM $1 được cài đặt.",
-       "config-unicode-using-utf8": "Đang sử dụng utf8_normalize.so của Brion Vibber để chuẩn hóa văn bản Unicode.",
        "config-unicode-using-intl": "Sẽ sử dụng [http://pecl.php.net/intl phần mở rộng PECL intl] để chuẩn hóa Unicode.",
        "config-unicode-pure-php-warning": "<strong>Cảnh báo:</strong>  [http://pecl.php.net/intl intl PECL extension] không được phép xử lý Unicode chuẩn hóa, trả lại thực thi PHP-gốc chậm.\nNếu bạn chạy một site lưu lượng lớn, bạn phải để ý qua một chút trên  [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode normalization].",
        "config-unicode-update-warning": "<strong>Cảnh báo:</strong> Phiên bản cài đặt của gói Unicode chuẩn hóa sử dụng một phiên bản cũ của thư viện [http://site.icu-project.org/ the ICU project].\nBạn phải [//www.mediawiki.org/wiki/Special:MyLanguage/nâng cấp Unicode_normalization_considerations] nếu bạn quan tâm đến việc sử dụng Unicode.",
index 02fbb08..33e5066 100644 (file)
@@ -114,6 +114,17 @@ class Interwiki {
                return $iw;
        }
 
+       /**
+        * Purge the cache for an interwiki prefix
+        * @param string $prefix
+        * @since 1.26
+        */
+       public static function invalidateCache( $prefix ) {
+               $cache = ObjectCache::getMainWANInstance();
+               $key = wfMemcKey( 'interwiki', $prefix );
+               $cache->delete( $key );
+       }
+
        /**
         * Fetch interwiki prefix data from local cache in constant database.
         *
@@ -191,16 +202,18 @@ class Interwiki {
         * @return Interwiki|bool Interwiki if $prefix is valid, otherwise false
         */
        protected static function load( $prefix ) {
-               global $wgMemc, $wgInterwikiExpiry;
+               global $wgInterwikiExpiry;
 
                $iwData = array();
                if ( !Hooks::run( 'InterwikiLoadPrefix', array( $prefix, &$iwData ) ) ) {
                        return Interwiki::loadFromArray( $iwData );
                }
 
+               $cache = ObjectCache::getMainWANInstance();
+
                if ( !$iwData ) {
                        $key = wfMemcKey( 'interwiki', $prefix );
-                       $iwData = $wgMemc->get( $key );
+                       $iwData = $cache->get( $key );
                        if ( $iwData === '!NONEXISTENT' ) {
                                // negative cache hit
                                return false;
@@ -232,13 +245,13 @@ class Interwiki {
                                'iw_local' => $iw->mLocal,
                                'iw_trans' => $iw->mTrans
                        );
-                       $wgMemc->add( $key, $mc, $wgInterwikiExpiry );
+                       $cache->set( $key, $mc, $wgInterwikiExpiry );
 
                        return $iw;
                }
 
                // negative cache hit
-               $wgMemc->add( $key, '!NONEXISTENT', $wgInterwikiExpiry );
+               $cache->set( $key, '!NONEXISTENT', $wgInterwikiExpiry );
 
                return false;
        }
index 7df85ff..fd4234d 100644 (file)
@@ -548,35 +548,6 @@ abstract class JobQueue {
        protected function doWaitForBackups() {
        }
 
-       /**
-        * Return a map of task names to task definition maps.
-        * A "task" is a fast periodic queue maintenance action.
-        * Mutually exclusive tasks must implement their own locking in the callback.
-        *
-        * Each task value is an associative array with:
-        *   - name     : the name of the task
-        *   - callback : a PHP callable that performs the task
-        *   - period   : the period in seconds corresponding to the task frequency
-        *
-        * @return array
-        */
-       final public function getPeriodicTasks() {
-               $tasks = $this->doGetPeriodicTasks();
-               foreach ( $tasks as $name => &$def ) {
-                       $def['name'] = $name;
-               }
-
-               return $tasks;
-       }
-
-       /**
-        * @see JobQueue::getPeriodicTasks()
-        * @return array
-        */
-       protected function doGetPeriodicTasks() {
-               return array();
-       }
-
        /**
         * Clear any process and persistent caches
         *
index 320b1b1..491092a 100644 (file)
@@ -29,7 +29,6 @@
  */
 class JobQueueDB extends JobQueue {
        const CACHE_TTL_SHORT = 30; // integer; seconds to cache info without re-validating
-       const CACHE_TTL_LONG = 300; // integer; seconds to cache info that is kept up to date
        const MAX_AGE_PRUNE = 604800; // integer; seconds a job can live once claimed
        const MAX_JOB_RANDOM = 2147483647; // integer; 2^31 - 1, used for job_random
        const MAX_OFFSET = 255; // integer; maximum number of rows to skip
@@ -71,15 +70,6 @@ class JobQueueDB extends JobQueue {
         * @return bool
         */
        protected function doIsEmpty() {
-               $key = $this->getCacheKey( 'empty' );
-
-               $isEmpty = $this->cache->get( $key );
-               if ( $isEmpty === 'true' ) {
-                       return true;
-               } elseif ( $isEmpty === 'false' ) {
-                       return false;
-               }
-
                $dbr = $this->getSlaveDB();
                try {
                        $found = $dbr->selectField( // unclaimed job
@@ -88,7 +78,6 @@ class JobQueueDB extends JobQueue {
                } catch ( DBError $e ) {
                        $this->throwDBException( $e );
                }
-               $this->cache->add( $key, $found ? 'false' : 'true', self::CACHE_TTL_LONG );
 
                return !$found;
        }
@@ -272,8 +261,6 @@ class JobQueueDB extends JobQueue {
                        $dbw->commit( $method );
                }
 
-               $this->cache->set( $this->getCacheKey( 'empty' ), 'false', JobQueueDB::CACHE_TTL_LONG );
-
                return;
        }
 
@@ -282,10 +269,6 @@ class JobQueueDB extends JobQueue {
         * @return Job|bool
         */
        protected function doPop() {
-               if ( $this->cache->get( $this->getCacheKey( 'empty' ) ) === 'true' ) {
-                       return false; // queue is empty
-               }
-
                $dbw = $this->getMasterDB();
                try {
                        $dbw->commit( __METHOD__, 'flush' ); // flush existing transaction
@@ -308,7 +291,6 @@ class JobQueueDB extends JobQueue {
                                }
                                // Check if we found a row to reserve...
                                if ( !$row ) {
-                                       $this->cache->set( $this->getCacheKey( 'empty' ), 'true', self::CACHE_TTL_LONG );
                                        break; // nothing to do
                                }
                                JobQueue::incrStats( 'job-pop', $this->type );
@@ -319,6 +301,12 @@ class JobQueueDB extends JobQueue {
                                $job->metadata['id'] = $row->job_id;
                                break; // done
                        } while ( true );
+
+                       if ( !$job || mt_rand( 0, 9 ) == 0 ) {
+                               // Handled jobs that need to be recycled/deleted;
+                               // any recycled jobs will be picked up next attempt
+                               $this->recycleAndDeleteStaleJobs();
+                       }
                } catch ( DBError $e ) {
                        $this->throwDBException( $e );
                }
@@ -489,6 +477,8 @@ class JobQueueDB extends JobQueue {
                        // Delete a row with a single DELETE without holding row locks over RTTs...
                        $dbw->delete( 'job',
                                array( 'job_cmd' => $this->type, 'job_id' => $job->metadata['id'] ), __METHOD__ );
+
+                       JobQueue::incrStats( 'job-ack', $this->type );
                } catch ( DBError $e ) {
                        $this->throwDBException( $e );
                }
@@ -553,23 +543,11 @@ class JobQueueDB extends JobQueue {
                wfWaitForSlaves( false, $this->wiki, $this->cluster ?: false );
        }
 
-       /**
-        * @return array
-        */
-       protected function doGetPeriodicTasks() {
-               return array(
-                       'recycleAndDeleteStaleJobs' => array(
-                               'callback' => array( $this, 'recycleAndDeleteStaleJobs' ),
-                               'period' => ceil( $this->claimTTL / 2 )
-                       )
-               );
-       }
-
        /**
         * @return void
         */
        protected function doFlushCaches() {
-               foreach ( array( 'empty', 'size', 'acquiredcount' ) as $type ) {
+               foreach ( array( 'size', 'acquiredcount' ) as $type ) {
                        $this->cache->delete( $this->getCacheKey( $type ) );
                }
        }
@@ -607,6 +585,10 @@ class JobQueueDB extends JobQueue {
 
        protected function doGetSiblingQueuesWithJobs( array $types ) {
                $dbr = $this->getSlaveDB();
+               // @note: this does not check whether the jobs are claimed or not.
+               // This is useful so JobQueueGroup::pop() also sees queues that only
+               // have stale jobs. This lets recycleAndDeleteStaleJobs() re-enqueue
+               // failed jobs so that they can be popped again for that edge case.
                $res = $dbr->select( 'job', 'DISTINCT job_cmd',
                        array( 'job_cmd' => $types ), __METHOD__ );
 
@@ -680,8 +662,6 @@ class JobQueueDB extends JobQueue {
                                        $affected = $dbw->affectedRows();
                                        $count += $affected;
                                        JobQueue::incrStats( 'job-recycle', $this->type, $affected );
-                                       // The tasks recycled jobs or release delayed jobs into the queue
-                                       $this->cache->set( $this->getCacheKey( 'empty' ), 'false', self::CACHE_TTL_LONG );
                                        $this->aggr->notifyQueueNonEmpty( $this->wiki, $this->type );
                                }
                        }
index 178ce8a..a35ab84 100644 (file)
@@ -373,27 +373,7 @@ class JobQueueFederated extends JobQueue {
                $this->throwErrorIfAllPartitionsDown( $failed );
        }
 
-       protected function doGetPeriodicTasks() {
-               $tasks = array();
-               /** @var JobQueue $queue */
-               foreach ( $this->partitionQueues as $partition => $queue ) {
-                       foreach ( $queue->getPeriodicTasks() as $task => $def ) {
-                               $tasks["{$partition}:{$task}"] = $def;
-                       }
-               }
-
-               return $tasks;
-       }
-
        protected function doFlushCaches() {
-               static $types = array(
-                       'empty',
-                       'size',
-                       'acquiredcount',
-                       'delayedcount',
-                       'abandonedcount'
-               );
-
                /** @var JobQueue $queue */
                foreach ( $this->partitionQueues as $queue ) {
                        $queue->doFlushCaches();
index ebd547a..fdf7b87 100644 (file)
@@ -341,69 +341,6 @@ class JobQueueGroup {
                return $this->coalescedQueues;
        }
 
-       /**
-        * Execute any due periodic queue maintenance tasks for all queues.
-        *
-        * A task is "due" if the time ellapsed since the last run is greater than
-        * the defined run period. Concurrent calls to this function will cause tasks
-        * to be attempted twice, so they may need their own methods of mutual exclusion.
-        *
-        * @return int Number of tasks run
-        */
-       public function executeReadyPeriodicTasks() {
-               global $wgMemc;
-
-               list( $db, $prefix ) = wfSplitWikiID( $this->wiki );
-               $key = wfForeignMemcKey( $db, $prefix, 'jobqueuegroup', 'taskruns', 'v1' );
-               $lastRuns = $wgMemc->get( $key ); // (queue => task => UNIX timestamp)
-
-               $count = 0;
-               $tasksRun = array(); // (queue => task => UNIX timestamp)
-               foreach ( $this->getQueueTypes() as $type ) {
-                       $queue = $this->get( $type );
-                       foreach ( $queue->getPeriodicTasks() as $task => $definition ) {
-                               if ( $definition['period'] <= 0 ) {
-                                       continue; // disabled
-                               } elseif ( !isset( $lastRuns[$type][$task] )
-                                       || $lastRuns[$type][$task] < ( time() - $definition['period'] )
-                               ) {
-                                       try {
-                                               if ( call_user_func( $definition['callback'] ) !== null ) {
-                                                       $tasksRun[$type][$task] = time();
-                                                       ++$count;
-                                               }
-                                       } catch ( JobQueueError $e ) {
-                                               MWExceptionHandler::logException( $e );
-                                       }
-                               }
-                       }
-               }
-
-               if ( $count === 0 ) {
-                       return $count; // nothing to update
-               }
-
-               $wgMemc->merge( $key, function ( $cache, $key, $lastRuns ) use ( $tasksRun ) {
-                       if ( is_array( $lastRuns ) ) {
-                               foreach ( $tasksRun as $type => $tasks ) {
-                                       foreach ( $tasks as $task => $timestamp ) {
-                                               if ( !isset( $lastRuns[$type][$task] )
-                                                       || $timestamp > $lastRuns[$type][$task]
-                                               ) {
-                                                       $lastRuns[$type][$task] = $timestamp;
-                                               }
-                                       }
-                               }
-                       } else {
-                               $lastRuns = $tasksRun;
-                       }
-
-                       return $lastRuns;
-               } );
-
-               return $count;
-       }
-
        /**
         * @param string $name
         * @return mixed
index 275d027..7edb6ad 100644 (file)
@@ -205,7 +205,7 @@ class JobQueueRedis extends JobQueue {
                        if ( $flags & self::QOS_ATOMIC ) {
                                $batches = array( $items ); // all or nothing
                        } else {
-                               $batches = array_chunk( $items, 500 ); // avoid tying up the server
+                               $batches = array_chunk( $items, 100 ); // avoid tying up the server
                        }
                        $failed = 0;
                        $pushed = 0;
@@ -389,6 +389,8 @@ LUA;
 
                                return false;
                        }
+
+                       JobQueue::incrStats( 'job-ack', $this->type );
                } catch ( RedisException $e ) {
                        $this->throwRedisException( $conn, $e );
                }
@@ -611,13 +613,6 @@ LUA;
                }
        }
 
-       /**
-        * @return array
-        */
-       protected function doGetPeriodicTasks() {
-               return array(); // managed in the runner loop
-       }
-
        /**
         * @param IJobSpecification $job
         * @return array
index 1725b74..6bf33aa 100644 (file)
@@ -35,6 +35,11 @@ class JobRunner implements LoggerAwareInterface {
        /** @var callable|null Debug output handler */
        protected $debug;
 
+       /**
+        * @var LoggerInterface $logger
+        */
+       protected $logger;
+
        /**
         * @param callable $debug Optional debug output handler
         */
@@ -42,13 +47,9 @@ class JobRunner implements LoggerAwareInterface {
                $this->debug = $debug;
        }
 
-       /**
-        * @var LoggerInterface $logger
-        */
-       protected $logger;
-
        /**
         * @param LoggerInterface $logger
+        * @return void
         */
        public function setLogger( LoggerInterface $logger ) {
                $this->logger = $logger;
@@ -88,7 +89,7 @@ class JobRunner implements LoggerAwareInterface {
         * @return array Summary response that can easily be JSON serialized
         */
        public function run( array $options ) {
-               global $wgJobClasses;
+               global $wgJobClasses, $wgTrxProfilerLimits;
 
                $response = array( 'jobs' => array(), 'reached' => 'none-ready' );
 
@@ -102,33 +103,30 @@ class JobRunner implements LoggerAwareInterface {
                        return $response;
                }
 
-               $group = JobQueueGroup::singleton();
-               // Handle any required periodic queue maintenance
-               $count = $group->executeReadyPeriodicTasks();
-               if ( $count > 0 ) {
-                       $msg = "Executed $count periodic queue task(s).";
-                       $this->logger->debug( $msg );
-                       $this->debugCallback( $msg );
-               }
-
                // Bail out if in read-only mode
                if ( wfReadOnly() ) {
                        $response['reached'] = 'read-only';
                        return $response;
                }
 
+               $profiler = Profiler::instance();
+
                // Catch huge single updates that lead to slave lag
-               $trxProfiler = Profiler::instance()->getTransactionProfiler();
+               $trxProfiler = $profiler->getTransactionProfiler();
                $trxProfiler->setLogger( LoggerFactory::getInstance( 'DBPerformance' ) );
-               $trxProfiler->setExpectation( 'maxAffected', 500, __METHOD__ );
+               $trxProfiler->setExpectations( $wgTrxProfilerLimits['JobRunner'], __METHOD__ );
 
-               // Bail out if there is too much DB lag
-               list( , $maxLag ) = wfGetLBFactory()->getMainLB( wfWikiID() )->getMaxLag();
-               if ( $maxLag >= 5 ) {
+               // Bail out if there is too much DB lag.
+               // This check should not block as we want to try other wiki queues.
+               $maxAllowedLag = 3;
+               list( , $maxLag ) = wfGetLB( wfWikiID() )->getMaxLag();
+               if ( $maxLag >= $maxAllowedLag ) {
                        $response['reached'] = 'slave-lag-limit';
                        return $response;
                }
 
+               $group = JobQueueGroup::singleton();
+               
                // Flush any pending DB writes for sanity
                wfGetLBFactory()->commitMasterChanges();
 
@@ -140,10 +138,9 @@ class JobRunner implements LoggerAwareInterface {
                $jobsRun = 0;
                $timeMsTotal = 0;
                $flags = JobQueueGroup::USE_CACHE;
-               $checkPeriod = 5.0; // seconds
-               $checkPhase = mt_rand( 0, 1000 * $checkPeriod ) / 1000; // avoid stampedes
                $startTime = microtime( true ); // time since jobs started running
-               $lastTime = microtime( true ) - $checkPhase; // time since last slave check
+               $checkLagPeriod = 1.0; // check slave lag this many seconds
+               $lastCheckTime = 1; // timestamp of last slave check
                do {
                        // Sync the persistent backoffs with concurrent runners
                        $backoffs = $this->syncBackoffDeltas( $backoffs, $backoffDeltas, $wait );
@@ -173,16 +170,17 @@ class JobRunner implements LoggerAwareInterface {
                                }
 
                                $msg = $job->toString() . " STARTING";
-                               $this->logger->info( $msg );
+                               $this->logger->debug( $msg );
                                $this->debugCallback( $msg );
 
                                // Run the job...
+                               $psection = $profiler->scopedProfileIn( __METHOD__ . '-' . $jType );
                                $jobStartTime = microtime( true );
                                try {
                                        ++$jobsRun;
                                        $status = $job->run();
                                        $error = $job->getLastError();
-                                       wfGetLBFactory()->commitMasterChanges();
+                                       $this->commitMasterChanges( $job );
                                } catch ( Exception $e ) {
                                        MWExceptionHandler::rollbackMasterChangesAndLog( $e );
                                        $status = false;
@@ -191,6 +189,7 @@ class JobRunner implements LoggerAwareInterface {
                                }
                                $timeMs = intval( ( microtime( true ) - $jobStartTime ) * 1000 );
                                $timeMsTotal += $timeMs;
+                               $profiler->scopedProfileOut( $psection );
 
                                // Mark the job as done on success or when the job cannot be retried
                                if ( $status !== false || !$job->allowRetries() ) {
@@ -234,13 +233,13 @@ class JobRunner implements LoggerAwareInterface {
                                // Don't let any of the main DB slaves get backed up.
                                // This only waits for so long before exiting and letting
                                // other wikis in the farm (on different masters) get a chance.
-                               $timePassed = microtime( true ) - $lastTime;
-                               if ( $timePassed >= 3 || $timePassed < 0 ) {
-                                       if ( !wfWaitForSlaves( $lastTime, false, '*', 5 ) ) {
+                               $timePassed = microtime( true ) - $lastCheckTime;
+                               if ( $timePassed >= $checkLagPeriod || $timePassed < 0 ) {
+                                       if ( !wfWaitForSlaves( $lastCheckTime, false, '*', $maxAllowedLag ) ) {
                                                $response['reached'] = 'slave-lag-limit';
                                                break;
                                        }
-                                       $lastTime = microtime( true );
+                                       $lastCheckTime = microtime( true );
                                }
                                // Don't let any queue slaves/backups fall behind
                                if ( $jobsRun > 0 && ( $jobsRun % 100 ) == 0 ) {
@@ -303,7 +302,6 @@ class JobRunner implements LoggerAwareInterface {
         * @return array Map of (job type => backoff expiry timestamp)
         */
        private function loadBackoffs( array $backoffs, $mode = 'wait' ) {
-
                $file = wfTempDir() . '/mw-runJobs-backoffs.json';
                if ( is_file( $file ) ) {
                        $noblock = ( $mode === 'nowait' ) ? LOCK_NB : 0;
@@ -341,7 +339,6 @@ class JobRunner implements LoggerAwareInterface {
         * @return array The new backoffs account for $backoffs and the latest file data
         */
        private function syncBackoffDeltas( array $backoffs, array &$deltas, $mode = 'wait' ) {
-
                if ( !$deltas ) {
                        return $this->loadBackoffs( $backoffs, $mode );
                }
@@ -408,4 +405,65 @@ class JobRunner implements LoggerAwareInterface {
                        call_user_func_array( $this->debug, array( wfTimestamp( TS_DB ) . " $msg\n" ) );
                }
        }
+
+       /**
+        * Commit any DB master changes from a job on all load balancers
+        *
+        * @param Job $job
+        * @throws DBError
+        */
+       private function commitMasterChanges( Job $job ) {
+               global $wgJobSerialCommitThreshold;
+
+               $lb = wfGetLB( wfWikiID() );
+               if ( $wgJobSerialCommitThreshold !== false ) {
+                       // Generally, there is one master connection to the local DB
+                       $dbwSerial = $lb->getAnyOpenConnection( $lb->getWriterIndex() );
+               } else {
+                       $dbwSerial = false;
+               }
+
+               if ( !$dbwSerial
+                       || !$dbwSerial->namedLocksEnqueue()
+                       || $dbwSerial->pendingWriteQueryDuration() < $wgJobSerialCommitThreshold
+               ) {
+                       // Writes are all to foreign DBs, named locks don't form queues,
+                       // or $wgJobSerialCommitThreshold is not reached; commit changes now
+                       wfGetLBFactory()->commitMasterChanges();
+                       return;
+               }
+
+               $ms = intval( 1000 * $dbwSerial->pendingWriteQueryDuration() );
+               $msg = $job->toString() . " COMMIT ENQUEUED [{$ms}ms of writes]";
+               $this->logger->info( $msg );
+               $this->debugCallback( $msg );
+
+               // Wait for an exclusive lock to commit
+               if ( !$dbwSerial->lock( 'jobrunner-serial-commit', __METHOD__, 30 ) ) {
+                       // This will trigger a rollback in the main loop
+                       throw new DBError( $dbwSerial, "Timed out waiting on commit queue." );
+               }
+               // Wait for the generic slave to catch up
+               $pos = $lb->getMasterPos();
+               if ( $pos ) {
+                       $lb->waitForOne( $pos );
+               }
+
+               $fname = __METHOD__;
+               // Re-ping all masters with transactions. This throws DBError if some
+               // connection died while waiting on locks/slaves, triggering a rollback.
+               wfGetLBFactory()->forEachLB( function( LoadBalancer $lb ) use ( $fname ) {
+                       $lb->forEachOpenConnection( function( DatabaseBase $conn ) use ( $fname ) {
+                               if ( $conn->writesOrCallbacksPending() ) {
+                                       $conn->query( "SELECT 1", $fname );
+                               }
+                       } );
+               } );
+
+               // Actually commit the DB master changes
+               wfGetLBFactory()->commitMasterChanges();
+
+               // Release the lock
+               $dbwSerial->unlock( 'jobrunner-serial-commit', __METHOD__ );
+       }
 }
index 84cfd47..9ace1ba 100644 (file)
@@ -68,7 +68,7 @@ interface IJobSpecification {
  * Job queue task description base code
  *
  * Example usage:
- * <code>
+ * @code
  * $job = new JobSpecification(
  *             'null',
  *             array( 'lives' => 1, 'usleep' => 100, 'pi' => 3.141569 ),
@@ -76,7 +76,7 @@ interface IJobSpecification {
  *             Title::makeTitle( NS_SPECIAL, 'nullity' )
  * );
  * JobQueueGroup::singleton()->push( $job )
- * </code>
+ * @endcode
  *
  * @ingroup JobQueue
  * @since 1.23
@@ -97,7 +97,7 @@ class JobSpecification implements IJobSpecification {
        /**
         * @param string $type
         * @param array $params Map of key/values
-        * @param array $opts Map of key/values
+        * @param array $opts Map of key/values; includes 'removeDuplicates'
         * @param Title $title Optional descriptive title
         */
        public function __construct(
index 847dd6f..6c49646 100644 (file)
@@ -77,6 +77,7 @@ class JobQueueAggregatorRedis extends JobQueueAggregator {
                try {
                        $conn->multi( Redis::PIPELINE );
                        $conn->hSetNx( $this->getQueueTypesKey(), $type, 'enabled' );
+                       $conn->sAdd( $this->getWikiSetKey(), $wiki );
                        $conn->hSet( $this->getReadyQueueKey(), $this->encQueueName( $type, $wiki ), time() );
                        $conn->exec();
 
@@ -197,6 +198,13 @@ class JobQueueAggregatorRedis extends JobQueueAggregator {
                return "jobqueue:aggregator:h-queue-types:v2"; // global
        }
 
+       /**
+        * @return string
+        */
+       private function getWikiSetKey() {
+               return "jobqueue:aggregator:s-wikis:v2"; // global
+       }
+
        /**
         * @param string $type
         * @param string $wiki
diff --git a/includes/jobqueue/jobs/ActivityUpdateJob.php b/includes/jobqueue/jobs/ActivityUpdateJob.php
new file mode 100644 (file)
index 0000000..495bda9
--- /dev/null
@@ -0,0 +1,75 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @author Aaron Schulz
+ * @ingroup JobQueue
+ */
+
+/**
+ * Job for updating user activity like "last viewed" timestamps
+ *
+ * @ingroup JobQueue
+ * @since 1.26
+ */
+class ActivityUpdateJob extends Job {
+       function __construct( $title, $params ) {
+               parent::__construct( 'activityUpdateJob', $title, $params );
+
+               if ( !isset( $params['type'] ) ) {
+                       throw new InvalidArgumentException( "Missing 'type' parameter." );
+               }
+
+               $this->removeDuplicates = true;
+       }
+
+       public function run() {
+               if ( $this->params['type'] === 'updateWatchlistNotification' ) {
+                       $this->updateWatchlistNotification();
+               } else {
+                       throw new Exception( "Invalid 'type' parameter '{$this->params['type']}'." );
+               }
+
+               return true;
+       }
+
+       protected function updateWatchlistNotification() {
+               $casTimestamp = ( $this->params['notifTime'] !== null )
+                       ? $this->params['notifTime']
+                       : $this->params['curTime'];
+
+               $dbw = wfGetDB( DB_MASTER );
+               $dbw->update( 'watchlist',
+                       array(
+                               'wl_notificationtimestamp' => $dbw->timestampOrNull( $this->params['notifTime'] )
+                       ),
+                       array(
+                               'wl_user' => $this->params['userid'],
+                               'wl_namespace' => $this->title->getNamespace(),
+                               'wl_title' => $this->title->getDBkey(),
+                               // Add a "check and set" style comparison to handle conflicts.
+                               // The inequality always avoids updates when the current value
+                               // is already NULL per ANSI SQL. This is desired since NULL means
+                               // that the user is "caught up" on edits already. When the field
+                               // is non-NULL, make sure not to set it back in time or set it to
+                               // NULL when newer revisions were in fact added to the page.
+                               'wl_notificationtimestamp < ' . $dbw->addQuotes( $dbw->timestamp( $casTimestamp ) )
+                       ),
+                       __METHOD__
+               );
+       }
+}
index 46fb2aa..fdef1f5 100755 (executable)
@@ -45,8 +45,8 @@ final class EnqueueJob extends Job {
        }
 
        /**
-        * @param Job|JobSpecification|array $jobs
-        * @return JobRouteJob
+        * @param JobSpecification|JobSpecification[] $jobs
+        * @return EnqueueJob
         */
        public static function newFromLocalJobs( $jobs ) {
                $jobs = is_array( $jobs ) ? $jobs : array( $jobs );
index b550f50..cc04595 100644 (file)
@@ -46,11 +46,24 @@ class RecentChangesUpdateJob extends Job {
                );
        }
 
+       /**
+        * @return RecentChangesUpdateJob
+        * @since 1.26
+        */
+       final public static function newCacheUpdateJob() {
+               return new self(
+                       SpecialPage::getTitleFor( 'Recentchanges' ), array( 'type' => 'cacheUpdate' )
+               );
+       }
+
        public function run() {
                if ( $this->params['type'] === 'purge' ) {
                        $this->purgeExpiredRows();
+               } elseif ( $this->params['type'] === 'cacheUpdate' ) {
+                       $this->updateActiveUsers();
                } else {
-                       throw new Exception( "Invalid 'type' parameter '{$this->params['type']}'." );
+                       throw new InvalidArgumentException(
+                               "Invalid 'type' parameter '{$this->params['type']}'." );
                }
 
                return true;
@@ -78,7 +91,7 @@ class RecentChangesUpdateJob extends Job {
                        if ( $rcIds ) {
                                $dbw->delete( 'recentchanges', array( 'rc_id' => $rcIds ), __METHOD__ );
                        }
-                       // No need for this to be in a transaction.
+                       // Commit in chunks to avoid slave lag
                        $dbw->commit( __METHOD__, 'flush' );
 
                        if ( count( $rcIds ) === $batchSize ) {
@@ -92,4 +105,119 @@ class RecentChangesUpdateJob extends Job {
 
                $dbw->unlock( $lockKey, __METHOD__ );
        }
+
+       protected function updateActiveUsers() {
+               global $wgActiveUserDays;
+
+               // Users that made edits at least this many days ago are "active"
+               $days = $wgActiveUserDays;
+               // Pull in the full window of active users in this update
+               $window = $wgActiveUserDays * 86400;
+
+               $dbw = wfGetDB( DB_MASTER );
+               // JobRunner uses DBO_TRX, but doesn't call begin/commit itself;
+               // onTransactionIdle() will run immediately since there is no trx.
+               $dbw->onTransactionIdle( function() use ( $dbw, $days, $window ) {
+                       // Avoid disconnect/ping() cycle that makes locks fall off
+                       $dbw->setSessionOptions( array( 'connTimeout' => 900 ) );
+
+                       $lockKey = wfWikiID() . '-activeusers';
+                       if ( !$dbw->lock( $lockKey, __METHOD__, 1 ) ) {
+                               return false; // exclusive update (avoids duplicate entries)
+                       }
+
+                       $nowUnix = time();
+                       // Get the last-updated timestamp for the cache
+                       $cTime = $dbw->selectField( 'querycache_info',
+                               'qci_timestamp',
+                               array( 'qci_type' => 'activeusers' )
+                       );
+                       $cTimeUnix = $cTime ? wfTimestamp( TS_UNIX, $cTime ) : 1;
+
+                       // Pick the date range to fetch from. This is normally from the last
+                       // update to till the present time, but has a limited window for sanity.
+                       // If the window is limited, multiple runs are need to fully populate it.
+                       $sTimestamp = max( $cTimeUnix, $nowUnix - $days * 86400 );
+                       $eTimestamp = min( $sTimestamp + $window, $nowUnix );
+
+                       // Get all the users active since the last update
+                       $res = $dbw->select(
+                               array( 'recentchanges' ),
+                               array( 'rc_user_text', 'lastedittime' => 'MAX(rc_timestamp)' ),
+                               array(
+                                       'rc_user > 0', // actual accounts
+                                       'rc_type != ' . $dbw->addQuotes( RC_EXTERNAL ), // no wikidata
+                                       'rc_log_type IS NULL OR rc_log_type != ' . $dbw->addQuotes( 'newusers' ),
+                                       'rc_timestamp >= ' . $dbw->addQuotes( $dbw->timestamp( $sTimestamp ) ),
+                                       'rc_timestamp <= ' . $dbw->addQuotes( $dbw->timestamp( $eTimestamp ) )
+                               ),
+                               __METHOD__,
+                               array(
+                                       'GROUP BY' => array( 'rc_user_text' ),
+                                       'ORDER BY' => 'NULL' // avoid filesort
+                               )
+                       );
+                       $names = array();
+                       foreach ( $res as $row ) {
+                               $names[$row->rc_user_text] = $row->lastedittime;
+                       }
+
+                       // Rotate out users that have not edited in too long (according to old data set)
+                       $dbw->delete( 'querycachetwo',
+                               array(
+                                       'qcc_type' => 'activeusers',
+                                       'qcc_value < ' . $dbw->addQuotes( $nowUnix - $days * 86400 ) // TS_UNIX
+                               ),
+                               __METHOD__
+                       );
+
+                       // Find which of the recently active users are already accounted for
+                       if ( count( $names ) ) {
+                               $res = $dbw->select( 'querycachetwo',
+                                       array( 'user_name' => 'qcc_title' ),
+                                       array(
+                                               'qcc_type' => 'activeusers',
+                                               'qcc_namespace' => NS_USER,
+                                               'qcc_title' => array_keys( $names ) ),
+                                       __METHOD__
+                               );
+                               foreach ( $res as $row ) {
+                                       unset( $names[$row->user_name] );
+                               }
+                       }
+
+                       // Insert the users that need to be added to the list
+                       if ( count( $names ) ) {
+                               $newRows = array();
+                               foreach ( $names as $name => $lastEditTime ) {
+                                       $newRows[] = array(
+                                               'qcc_type' => 'activeusers',
+                                               'qcc_namespace' => NS_USER,
+                                               'qcc_title' => $name,
+                                               'qcc_value' => wfTimestamp( TS_UNIX, $lastEditTime ),
+                                               'qcc_namespacetwo' => 0, // unused
+                                               'qcc_titletwo' => '' // unused
+                                       );
+                               }
+                               foreach ( array_chunk( $newRows, 500 ) as $rowBatch ) {
+                                       $dbw->insert( 'querycachetwo', $rowBatch, __METHOD__ );
+                                       wfWaitForSlaves();
+                               }
+                       }
+
+                       // If a transaction was already started, it might have an old
+                       // snapshot, so kludge the timestamp range back as needed.
+                       $asOfTimestamp = min( $eTimestamp, (int)$dbw->trxTimestamp() );
+
+                       // Touch the data freshness timestamp
+                       $dbw->replace( 'querycache_info',
+                               array( 'qci_type' ),
+                               array( 'qci_type' => 'activeusers',
+                                       'qci_timestamp' => $dbw->timestamp( $asOfTimestamp ) ), // not always $now
+                               __METHOD__
+                       );
+
+                       $dbw->unlock( $lockKey, __METHOD__ );
+               } );
+       }
 }
index 1252b0b..749913a 100644 (file)
@@ -37,6 +37,8 @@
 class RefreshLinksJob extends Job {
        const PARSE_THRESHOLD_SEC = 1.0;
 
+       const CLOCK_FUDGE = 10;
+
        function __construct( $title, $params = '' ) {
                parent::__construct( 'refreshLinks', $title, $params );
                // A separate type is used just for cascade-protected backlinks
@@ -140,22 +142,38 @@ class RefreshLinksJob extends Job {
 
                $parserOutput = false;
                $parserOptions = $page->makeParserOptions( 'canonical' );
-               // If page_touched changed after this root job (with a good slave lag skew factor),
-               // then it is likely that any views of the pages already resulted in re-parses which
-               // are now in cache. This can be reused to avoid expensive parsing in some cases.
+               // If page_touched changed after this root job, then it is likely that
+               // any views of the pages already resulted in re-parses which are now in
+               // cache. The cache can be reused to avoid expensive parsing in some cases.
                if ( isset( $this->params['rootJobTimestamp'] ) ) {
-                       $skewedTimestamp = wfTimestamp( TS_UNIX, $this->params['rootJobTimestamp'] ) + 5;
-                       if ( $page->getLinksTimestamp() > wfTimestamp( TS_MW, $skewedTimestamp ) ) {
+                       $opportunistic = !empty( $this->params['isOpportunistic'] );
+
+                       $skewedTimestamp = $this->params['rootJobTimestamp'];
+                       if ( $opportunistic ) {
+                               // Neither clock skew nor DB snapshot/slave lag matter much for such
+                               // updates; focus on reusing the (often recently updated) cache
+                       } else {
+                               // For transclusion updates, the template changes must be reflected
+                               $skewedTimestamp = wfTimestamp( TS_MW,
+                                       wfTimestamp( TS_UNIX, $skewedTimestamp ) + self::CLOCK_FUDGE
+                               );
+                       }
+
+                       if ( $page->getLinksTimestamp() > $skewedTimestamp ) {
                                // Something already updated the backlinks since this job was made
                                return true;
                        }
-                       if ( $page->getTouched() > wfTimestamp( TS_MW, $skewedTimestamp ) ) {
+
+                       if ( $page->getTouched() >= $skewedTimestamp || $opportunistic ) {
+                               // Something bumped page_touched since this job was made
+                               // or the cache is otherwise suspected to be up-to-date
                                $parserOutput = ParserCache::singleton()->getDirty( $page, $parserOptions );
-                               if ( $parserOutput && $parserOutput->getCacheTime() <= $skewedTimestamp ) {
+                               if ( $parserOutput && $parserOutput->getCacheTime() < $skewedTimestamp ) {
                                        $parserOutput = false; // too stale
                                }
                        }
                }
+
                // Fetch the current revision and parse it if necessary...
                if ( $parserOutput == false ) {
                        $start = microtime( true );
index 0b6db32..a0230be 100644 (file)
@@ -20,6 +20,7 @@
  * @file
  * @ingroup Cache
  */
+use Wikimedia\Assert\Assert;
 
 /**
  * Handles a simple LRU key/value map with a maximum number of entries
@@ -41,9 +42,9 @@ class MapCacheLRU {
         * @throws Exception When $maxCacheKeys is not an int or =< 0.
         */
        public function __construct( $maxKeys ) {
-               if ( !is_int( $maxKeys ) || $maxKeys < 1 ) {
-                       throw new Exception( __METHOD__ . " must be given an integer and >= 1" );
-               }
+               Assert::parameterType( 'integer', $maxKeys, '$maxKeys' );
+               Assert::parameter( $maxKeys >= 1, '$maxKeys', 'must be >= 1' );
+
                $this->maxCacheKeys = $maxKeys;
        }
 
index fb2daa6..16e0d4f 100644 (file)
@@ -58,8 +58,8 @@ class MultiHttpClient {
 
        /**
         * @param array $options
-        *   - connTimeout     : default connection timeout
-        *   - reqTimeout      : default request timeout
+        *   - connTimeout     : default connection timeout (seconds)
+        *   - reqTimeout      : default request timeout (seconds)
         *   - proxy           : HTTP proxy to use
         *   - usePipelining   : whether to use HTTP pipelining if possible (for all hosts)
         *   - maxConnsPerHost : maximum number of concurrent connections (per host)
@@ -90,13 +90,13 @@ class MultiHttpClient {
         *   - body    : HTTP response body or resource (if "stream" was set)
         *   - error     : Any cURL error string
         * The map also stores integer-indexed copies of these values. This lets callers do:
-        *      <code>
+        * @code
         *              list( $rcode, $rdesc, $rhdrs, $rbody, $rerr ) = $http->run( $req );
-        *  </code>
+        * @endcode
         * @param array $req HTTP request array
         * @param array $opts
-        *   - connTimeout    : connection timeout per request
-        *   - reqTimeout     : post-connection timeout per request
+        *   - connTimeout    : connection timeout per request (seconds)
+        *   - reqTimeout     : post-connection timeout per request (seconds)
         * @return array Response array for request
         */
        final public function run( array $req, array $opts = array() ) {
@@ -114,17 +114,17 @@ class MultiHttpClient {
         *   - body    : HTTP response body or resource (if "stream" was set)
         *   - error   : Any cURL error string
         * The map also stores integer-indexed copies of these values. This lets callers do:
-        *    <code>
+        * @code
         *        list( $rcode, $rdesc, $rhdrs, $rbody, $rerr ) = $req['response'];
-        *  </code>
+        * @endcode
         * All headers in the 'headers' field are normalized to use lower case names.
         * This is true for the request headers and the response headers. Integer-indexed
         * method/URL entries will also be changed to use the corresponding string keys.
         *
         * @param array $reqs Map of HTTP request arrays
         * @param array $opts
-        *   - connTimeout     : connection timeout per request
-        *   - reqTimeout      : post-connection timeout per request
+        *   - connTimeout     : connection timeout per request (seconds)
+        *   - reqTimeout      : post-connection timeout per request (seconds)
         *   - usePipelining   : whether to use HTTP pipelining if possible
         *   - maxConnsPerHost : maximum number of concurrent connections (per host)
         * @return array $reqs With response array populated for each
index 8d80eb3..b55ff9d 100644 (file)
@@ -20,6 +20,7 @@
  * @file
  * @ingroup Cache
  */
+use Wikimedia\Assert\Assert;
 
 /**
  * Handles per process caching of items
@@ -128,9 +129,9 @@ class ProcessCacheLRU {
         * @throws UnexpectedValueException
         */
        public function resize( $maxKeys ) {
-               if ( !is_int( $maxKeys ) || $maxKeys < 1 ) {
-                       throw new UnexpectedValueException( __METHOD__ . " must be given an integer >= 1" );
-               }
+               Assert::parameterType( 'integer', $maxKeys, '$maxKeys' );
+               Assert::parameter( $maxKeys >= 1, '$maxKeys', 'must be >= 1' );
+
                $this->maxCacheKeys = $maxKeys;
                while ( count( $this->cache ) > $this->maxCacheKeys ) {
                        reset( $this->cache );
diff --git a/includes/libs/eventrelayer/EventRelayer.php b/includes/libs/eventrelayer/EventRelayer.php
new file mode 100755 (executable)
index 0000000..a3d214f
--- /dev/null
@@ -0,0 +1,64 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @author Aaron Schulz
+ */
+
+/**
+ * Base class for reliable event relays
+ */
+abstract class EventRelayer {
+       /**
+        * @param array $params
+        */
+       public function __construct( array $params ) {}
+
+       /**
+        * @param string $channel
+        * @param array $event Event data map
+        * @return bool Success
+        */
+       final public function notify( $channel, $event ) {
+               return $this->doNotify( $channel, array( $event ) );
+       }
+
+       /**
+        * @param string $channel
+        * @param array $events List of event data maps
+        * @return bool Success
+        */
+       final public function notifyMulti( $channel, $events ) {
+               return $this->doNotify( $channel, $events );
+       }
+
+       /**
+        * @param string $channel
+        * @param array $events List of event data maps
+        * @return bool Success
+        */
+       abstract protected function doNotify( $channel, array $events );
+}
+
+/**
+ * No-op class for publishing messages into a PubSub system
+ */
+class EventRelayerNull extends EventRelayer {
+       public function doNotify( $channel, array $events ) {
+               return true;
+       }
+}
diff --git a/includes/libs/eventrelayer/EventRelayerMCRD.php b/includes/libs/eventrelayer/EventRelayerMCRD.php
new file mode 100755 (executable)
index 0000000..1e8b2a4
--- /dev/null
@@ -0,0 +1,66 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @author Aaron Schulz
+ */
+
+/**
+ * Relayed that uses the mcrelaypushd server
+ */
+class EventRelayerMCRD extends EventRelayer {
+       /** @var MultiHttpClient */
+       protected $http;
+       /** @var string */
+       protected $baseUrl;
+
+       /**
+        * Additional params include 'mcrdConfig', which is a map of:
+        *   - url : The base URL of the service (without paths)
+        * @param array $params
+        */
+       public function __construct( array $params ) {
+               parent::__construct( $params );
+
+               $this->baseUrl = $params['mcrdConfig']['url'];
+
+               $httpConfig = isset( $params['httpConfig'] ) ? $params['httpConfig'] : array();
+               if ( !isset( $httpConfig['connTimeout'] ) ) {
+                       $httpConfig['connTimeout'] = 1;
+               }
+               if ( !isset( $httpConfig['reqTimeout'] ) ) {
+                       $httpConfig['reqTimeout'] = .25;
+               }
+
+               $this->http = new MultiHttpClient( $httpConfig );
+       }
+
+       protected function doNotify( $channel, array $events ) {
+               if ( !count( $events ) ) {
+                       return true;
+               }
+
+               $response = $this->http->run( array(
+                       'url'     => "{$this->baseUrl}/relayer/api/v1.0/" . rawurlencode( $channel ),
+                       'method'  => 'POST',
+                       'body'    => json_encode( array( 'events' => $events ) ),
+                       'headers' => array( 'content-type' => 'application/json' )
+               ) );
+
+               return $response['code'] == 201;
+       }
+}
index 150a7ce..5507e9d 100644 (file)
@@ -37,10 +37,10 @@ use Psr\Log\NullLogger;
  * the PHP memcached client.
  *
  * backends for local hash array and SQL table included:
- * <code>
+ * @code
  *   $bag = new HashBagOStuff();
  *   $bag = new SqlBagOStuff(); # connect to db first
- * </code>
+ * @endcode
  *
  * @ingroup Cache
  */
@@ -119,10 +119,11 @@ abstract class BagOStuff implements LoggerAwareInterface {
         * @param int $exptime Either an interval in seconds or a unix timestamp for expiry
         * @param int $attempts The amount of times to attempt a merge in case of failure
         * @return bool Success
+        * @throws InvalidArgumentException
         */
        public function merge( $key, $callback, $exptime = 0, $attempts = 10 ) {
                if ( !is_callable( $callback ) ) {
-                       throw new Exception( "Got invalid callback." );
+                       throw new InvalidArgumentException( "Got invalid callback." );
                }
 
                return $this->mergeViaLock( $key, $callback, $exptime, $attempts );
@@ -166,6 +167,7 @@ abstract class BagOStuff implements LoggerAwareInterface {
         * @param mixed $value
         * @param int $exptime Either an interval in seconds or a unix timestamp for expiry
         * @return bool Success
+        * @throws Exception
         */
        protected function cas( $casToken, $key, $value, $exptime = 0 ) {
                throw new Exception( "CAS is not implemented in " . __CLASS__ );
@@ -205,7 +207,7 @@ abstract class BagOStuff implements LoggerAwareInterface {
 
        /**
         * @param string $key
-        * @param int $timeout Lock wait timeout [optional]
+        * @param int $timeout Lock wait timeout; 0 for non-blocking [optional]
         * @param int $expiry Lock expiry [optional]
         * @return bool Success
         */
@@ -385,6 +387,24 @@ abstract class BagOStuff implements LoggerAwareInterface {
                $this->lastError = $err;
        }
 
+       /**
+        * Modify a cache update operation array for EventRelayer::notify()
+        *
+        * This is used for relayed writes, e.g. for broadcasting a change
+        * to multiple data-centers. If the array contains a 'val' field
+        * then the command involves setting a key to that value. Note that
+        * for simplicity, 'val' is always a simple scalar value. This method
+        * is used to possibly serialize the value and add any cache-specific
+        * key/values needed for the relayer daemon (e.g. memcached flags).
+        *
+        * @param array $event
+        * @return array
+        * @since 1.26
+        */
+       public function modifySimpleRelayEvent( array $event ) {
+               return $event;
+       }
+
        /**
         * @param string $text
         */
diff --git a/includes/libs/objectcache/ReplicatedBagOStuff.php b/includes/libs/objectcache/ReplicatedBagOStuff.php
new file mode 100644 (file)
index 0000000..a263a3d
--- /dev/null
@@ -0,0 +1,124 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Cache
+ * @author Aaron Schulz
+ */
+
+/**
+ * A cache class that directs writes to one set of servers and reads to
+ * another. This assumes that the servers used for reads are setup to slave
+ * those that writes go to. This can easily be used with redis for example.
+ *
+ * In the WAN scenario (e.g. multi-datacenter case), this is useful when
+ * writes are rare or they usually take place in the primary datacenter.
+ *
+ * @ingroup Cache
+ * @since 1.26
+ */
+class ReplicatedBagOStuff extends BagOStuff {
+       /** @var BagOStuff */
+       protected $writeStore;
+       /** @var BagOStuff */
+       protected $readStore;
+
+       /**
+        * Constructor. Parameters are:
+        *   - writeFactory : ObjectFactory::getObjectFromSpec parameters yeilding BagOStuff.
+        *                    This object will be used for writes (e.g. the master DB).
+        *   - readFactory  : ObjectFactory::getObjectFromSpec parameters yeilding BagOStuff.
+        *                    This object will be used for reads (e.g. a slave DB).
+        *
+        * @param array $params
+        * @throws InvalidArgumentException
+        */
+       public function __construct( $params ) {
+               parent::__construct( $params );
+
+               if ( !isset( $params['writeFactory'] ) ) {
+                       throw new InvalidArgumentException(
+                               __METHOD__ . ': the "writeFactory" parameter is required' );
+               } elseif ( !isset( $params['readFactory'] ) ) {
+                       throw new InvalidArgumentException(
+                               __METHOD__ . ': the "readFactory" parameter is required' );
+               }
+
+               $this->writeStore = ( $params['writeFactory'] instanceof BagOStuff )
+                       ? $params['writeFactory']
+                       : ObjectFactory::getObjectFromSpec( $params['writeFactory'] );
+               $this->readStore = ( $params['readFactory'] instanceof BagOStuff )
+                       ? $params['readFactory']
+                       : ObjectFactory::getObjectFromSpec( $params['readFactory'] );
+       }
+
+       public function setDebug( $debug ) {
+               $this->writeStore->setDebug( $debug );
+               $this->readStore->setDebug( $debug );
+       }
+
+       public function get( $key, &$casToken = null ) {
+               return $this->readStore->get( $key, $casToken );
+       }
+
+       public function getMulti( $keys ) {
+               return $this->readStore->getMulti( $keys );
+       }
+
+       public function set( $key, $value, $exptime = 0 ) {
+               return $this->writeStore->set( $key, $value, $exptime );
+       }
+
+       public function delete( $key ) {
+               return $this->writeStore->delete( $key );
+       }
+
+       public function add( $key, $value, $exptime = 0 ) {
+               return $this->writeStore->add( $key, $value, $exptime );
+       }
+
+       public function incr( $key, $value = 1 ) {
+               return $this->writeStore->incr( $key, $value );
+       }
+
+       public function decr( $key ) {
+               return $this->writeStore->decr( $key );
+       }
+
+       public function lock( $key, $timeout = 6, $expiry = 6 ) {
+               return $this->writeStore->lock( $key, $timeout, $expiry );
+       }
+
+       public function unlock( $key ) {
+               return $this->writeStore->unlock( $key );
+       }
+
+       public function merge( $key, $callback, $exptime = 0, $attempts = 10 ) {
+               return $this->writeStore->merge( $key, $callback, $exptime, $attempts );
+       }
+
+       public function getLastError() {
+               return ( $this->writeStore->getLastError() != self::ERR_NONE )
+                       ? $this->writeStore->getLastError()
+                       : $this->readStore->getLastError();
+       }
+
+       public function clearLastError() {
+               $this->writeStore->clearLastError();
+               $this->readStore->clearLastError();
+       }
+}
diff --git a/includes/libs/objectcache/WANObjectCache.php b/includes/libs/objectcache/WANObjectCache.php
new file mode 100755 (executable)
index 0000000..8d202c7
--- /dev/null
@@ -0,0 +1,619 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Cache
+ * @author Aaron Schulz
+ */
+
+/**
+ * Multi-datacenter aware caching interface
+ *
+ * All operations go to the local cache, except the delete()
+ * and touchCheckKey(), which broadcast to all clusters.
+ * This class is intended for caching data from primary stores.
+ * If the get() method does not return a value, then the caller
+ * should query the new value and backfill the cache using set().
+ * When the source data changes, the delete() method should be called.
+ * Since delete() is expensive, it should be avoided. One can do so if:
+ *   - a) The object cached is immutable; or
+ *   - b) Validity is checked against the source after get(); or
+ *   - c) Using a modest TTL is reasonably correct and performant
+ * Consider using getWithSetCallback() instead of the get()/set() cycle.
+ *
+ * Instances of this class must be configured to point to a valid
+ * PubSub endpoint, and there must be listeners on the cache servers
+ * that subscribe to the endpoint and update the caches.
+ *
+ * Broadcasted operations like delete() and touchCheckKey() are done
+ * synchronously in the local cluster, but are relayed asynchronously.
+ * This means that callers in other datacenters will see older values
+ * for a however many milliseconds the datacenters are apart. As with
+ * any cache, this should not be relied on for cases where reads are
+ * used to determine writes to source (e.g. non-cache) data stores.
+ *
+ * All values are wrapped in metadata arrays. Keys use a "WANCache:" prefix
+ * to avoid collisions with keys that are not wrapped as metadata arrays. The
+ * prefixes are as follows:
+ *   - a) "WANCache:v" : used for regular value keys
+ *   - b) "WANCache:s" : used for temporarily storing values of tombstoned keys
+ *   - c) "WANCache:t" : used for storing timestamp "check" keys
+ *
+ * @ingroup Cache
+ * @since 1.26
+ */
+class WANObjectCache {
+       /** @var BagOStuff The local cluster cache */
+       protected $cache;
+       /** @var string Cache pool name */
+       protected $pool;
+       /** @var EventRelayer */
+       protected $relayer;
+
+       /** @var int */
+       protected $lastRelayError = self::ERR_NONE;
+
+       /** Seconds to tombstone keys on delete() */
+       const HOLDOFF_TTL = 10;
+       /** Seconds to keep dependency purge keys around */
+       const CHECK_KEY_TTL = 31536000; // 1 year
+       /** Seconds to keep lock keys around */
+       const LOCK_TTL = 5;
+
+       /** Idiom for set()/getWithSetCallback() TTL */
+       const TTL_NONE = 0;
+       /** Idiom for getWithSetCallback() callbacks to avoid calling set() */
+       const TTL_UNCACHEABLE = -1;
+
+       /** Cache format version number */
+       const VERSION = 1;
+
+       /** Fields of value holder arrays */
+       const FLD_VERSION = 0;
+       const FLD_VALUE = 1;
+       const FLD_TTL = 2;
+       const FLD_TIME = 3;
+
+       /** Possible values for getLastError() */
+       const ERR_NONE = 0; // no error
+       const ERR_NO_RESPONSE = 1; // no response
+       const ERR_UNREACHABLE = 2; // can't connect
+       const ERR_UNEXPECTED = 3; // response gave some error
+       const ERR_RELAY = 4; // relay broadcast failed
+
+       const VALUE_KEY_PREFIX = 'WANCache:v:';
+       const STASH_KEY_PREFIX = 'WANCache:s:';
+       const TIME_KEY_PREFIX = 'WANCache:t:';
+
+       const PURGE_VAL_PREFIX = 'PURGED:';
+
+       /**
+        * @param array $params
+        *   - cache   : BagOStuff object
+        *   - pool    : pool name
+        *   - relayer : EventRelayer object
+        */
+       public function __construct( array $params ) {
+               $this->cache = $params['cache'];
+               $this->pool = $params['pool'];
+               $this->relayer = $params['relayer'];
+       }
+
+       /**
+        * Fetch the value of a key from cache
+        *
+        * If passed in, $curTTL is set to the remaining TTL (current time left):
+        *   - a) INF; if the key exists and has no TTL
+        *   - b) float (>=0); if the key exists and has a TTL
+        *   - c) float (<0); if the key is tombstoned or expired by $checkKeys
+        *   - d) null; if the key does not exist and is not tombstoned
+        *
+        * If a key is tombstoned, $curTTL will reflect the time since delete().
+        *
+        * The timestamp of $key will be checked against the last-purge timestamp
+        * of each of $checkKeys. Those $checkKeys not in cache will have the last-purge
+        * initialized to the current timestamp. If any of $checkKeys have a timestamp
+        * greater than that of $key, then $curTTL will reflect how long ago $key
+        * became invalid. Callers can use $curTTL to know when the value is stale.
+        * The $checkKeys parameter allow mass invalidations by updating a single key:
+        *   - a) Each "check" key represents "last purged" of some source data
+        *   - b) Callers pass in relevant "check" keys as $checkKeys in get()
+        *   - c) When the source data that "check" keys represent changes,
+        *        the touchCheckKey() method is called on them
+        *
+        * For keys that are hot/expensive, consider using getWithSetCallback() instead.
+        *
+        * @param string $key Cache key
+        * @param mixed $curTTL Approximate TTL left on the key if present [returned]
+        * @param array $checkKeys List of "check" keys
+        * @return mixed Value of cache key or false on failure
+        */
+       final public function get( $key, &$curTTL = null, array $checkKeys = array() ) {
+               $curTTLs = array();
+               $values = $this->getMulti( array( $key ), $curTTLs, $checkKeys );
+               $curTTL = isset( $curTTLs[$key] ) ? $curTTLs[$key] : null;
+
+               return isset( $values[$key] ) ? $values[$key] : false;
+       }
+
+       /**
+        * Fetch the value of several keys from cache
+        *
+        * @see WANObjectCache::get()
+        *
+        * @param array $keys List of cache keys
+        * @param array $curTTLs Map of (key => approximate TTL left) for existing keys [returned]
+        * @param array $checkKeys List of "check" keys
+        * @return array Map of (key => value) for keys that exist
+        */
+       final public function getMulti(
+               array $keys, &$curTTLs = array(), array $checkKeys = array()
+       ) {
+               $result = array();
+               $curTTLs = array();
+
+               $vPrefixLen = strlen( self::VALUE_KEY_PREFIX );
+               $valueKeys = self::prefixCacheKeys( $keys, self::VALUE_KEY_PREFIX );
+               $checkKeys = self::prefixCacheKeys( $checkKeys, self::TIME_KEY_PREFIX );
+
+               // Fetch all of the raw values
+               $wrappedValues = $this->cache->getMulti( array_merge( $valueKeys, $checkKeys ) );
+               $now = microtime( true );
+
+               // Get/initialize the timestamp of all the "check" keys
+               $checkKeyTimes = array();
+               foreach ( $checkKeys as $checkKey ) {
+                       $timestamp = isset( $wrappedValues[$checkKey] )
+                               ? self::parsePurgeValue( $wrappedValues[$checkKey] )
+                               : false;
+                       if ( !is_float( $timestamp ) ) {
+                               // Key is not set or invalid; regenerate
+                               $this->cache->add( $checkKey,
+                                       self::PURGE_VAL_PREFIX . $now, self::CHECK_KEY_TTL );
+                               $timestamp = $now;
+                       }
+
+                       $checkKeyTimes[] = $timestamp;
+               }
+
+               // Get the main cache value for each key and validate them
+               foreach ( $valueKeys as $vKey ) {
+                       if ( !isset( $wrappedValues[$vKey] ) ) {
+                               continue; // not found
+                       }
+
+                       $key = substr( $vKey, $vPrefixLen ); // unprefix
+
+                       list( $value, $curTTL ) = $this->unwrap( $wrappedValues[$vKey], $now );
+                       if ( $value !== false ) {
+                               $result[$key] = $value;
+                               foreach ( $checkKeyTimes as $checkKeyTime ) {
+                                       // Force dependant keys to be invalid for a while after purging
+                                       // to reduce race conditions involving stale data getting cached
+                                       $safeTimestamp = $checkKeyTime + self::HOLDOFF_TTL;
+                                       if ( $safeTimestamp >= $wrappedValues[$vKey][self::FLD_TIME] ) {
+                                               $curTTL = min( $curTTL, $checkKeyTime - $now );
+                                       }
+                               }
+                       }
+
+                       $curTTLs[$key] = $curTTL;
+               }
+
+               return $result;
+       }
+
+       /**
+        * Set the value of a key from cache
+        *
+        * Simply calling this method when source data changes is not valid because
+        * the changes do not replicate to the other WAN sites. In that case, delete()
+        * should be used instead. This method is intended for use on cache misses.
+        *
+        * @param string $key Cache key
+        * @param mixed $value
+        * @param integer $ttl Seconds to live [0=forever]
+        * @return bool Success
+        */
+       final public function set( $key, $value, $ttl = 0 ) {
+               $key = self::VALUE_KEY_PREFIX . $key;
+               $wrapped = $this->wrap( $value, $ttl );
+
+               $func = function ( $cache, $key, $cWrapped ) use ( $wrapped ) {
+                       return ( is_string( $cWrapped ) )
+                               ? false // key is tombstoned; do nothing
+                               : $wrapped;
+               };
+
+               return $this->cache->merge( $key, $func, $ttl, 1 );
+       }
+
+       /**
+        * Purge a key from all clusters
+        *
+        * This instantiates a hold-off period where the key cannot be
+        * written to avoid race conditions where dependent keys get updated
+        * with a stale value (e.g. from a DB slave).
+        *
+        * This should only be called when the underlying data (being cached)
+        * changes in a significant way. If called twice on the same key, then
+        * the last TTL takes precedence.
+        *
+        * @param string $key Cache key
+        * @param integer $ttl How long to block writes to the key [seconds]
+        * @return bool True if the item was purged or not found, false on failure
+        */
+       final public function delete( $key, $ttl = self::HOLDOFF_TTL ) {
+               $key = self::VALUE_KEY_PREFIX . $key;
+               // Update the local cluster immediately
+               $ok = $this->cache->set( $key, self::PURGE_VAL_PREFIX . microtime( true ), $ttl );
+               // Publish the purge to all clusters
+               return $this->relayPurge( $key, $ttl ) && $ok;
+       }
+
+       /**
+        * Fetch the value of a timestamp "check" key
+        *
+        * Note that "check" keys won't collide with other regular keys
+        *
+        * @param string $key
+        * @return float|bool TS_UNIX timestamp of the key; false if not present
+        */
+       final public function getCheckKeyTime( $key ) {
+               return self::parsePurgeValue( $this->cache->get( self::TIME_KEY_PREFIX . $key ) );
+       }
+
+       /**
+        * Purge a "check" key from all clusters, invalidating keys that use it
+        *
+        * This should only be called when the underlying data (being cached)
+        * changes in a significant way, and it is impractical to call delete()
+        * on all keys that should be changed. When get() is called on those
+        * keys, the relevant "check" keys must be supplied for this to work.
+        *
+        * The "check" key essentially represents a last-modified field.
+        * It is set in the future a few seconds when this is called, to
+        * avoid race conditions where dependent keys get updated with a
+        * stale value (e.g. from a DB slave).
+        *
+        * Note that "check" keys won't collide with other regular keys
+        *
+        * @see WANObjectCache::get()
+        *
+        * @param string $key Cache key
+        * @return bool True if the item was purged or not found, false on failure
+        */
+       final public function touchCheckKey( $key ) {
+               $key = self::TIME_KEY_PREFIX . $key;
+               // Update the local cluster immediately
+               $ok = $this->cache->set( $key,
+                       self::PURGE_VAL_PREFIX . microtime( true ), self::CHECK_KEY_TTL );
+               // Publish the purge to all clusters
+               return $this->relayPurge( $key, self::CHECK_KEY_TTL ) && $ok;
+       }
+
+       /**
+        * Method to fetch/regenerate cache keys
+        *
+        * On cache miss, the key will be set to the callback result,
+        * unless the callback returns false. The arguments supplied are:
+        *     (current value or false, &$ttl)
+        * The callback function returns the new value given the current
+        * value (false if not present). Preemptive re-caching and $checkKeys
+        * can result in a non-false current value. The TTL of the new value
+        * can be set dynamically by altering $ttl in the callback (by reference).
+        *
+        * Usually, callbacks ignore the current value, but it can be used
+        * to maintain "most recent X" values that come from time or sequence
+        * based source data, provided that the "as of" id/time is tracked.
+        *
+        * Usage of $checkKeys is similar to get()/getMulti(). However,
+        * rather than the caller having to inspect a "current time left"
+        * variable (e.g. $curTTL, $curTTLs), a cache regeneration will be
+        * triggered using the callback.
+        *
+        * The simplest way to avoid stampedes for hot keys is to use
+        * the 'lockTSE' option in $opts. If cache purges are needed, also:
+        *   a) Pass $key into $checkKeys
+        *   b) Use touchCheckKey( $key ) instead of delete( $key )
+        * Following this pattern lets the old cache be used until a
+        * single thread updates it as needed. Also consider tweaking
+        * the 'lowTTL' parameter.
+        *
+        * Example usage:
+        * @code
+        *     $key = wfMemcKey( 'cat-recent-actions', $catId );
+        *     // Function that derives the new key value given the old value
+        *     $callback = function( $cValue, &$ttl ) { ... };
+        *     // Get the key value from cache or from source on cache miss;
+        *     // try to only let one cluster thread manage doing cache updates
+        *     $opts = array( 'lockTSE' => 5, 'lowTTL' => 10 );
+        *     $value = $cache->getWithSetCallback( $key, $callback, 60, array(), $opts );
+        * @endcode
+        *
+        * Example usage:
+        * @code
+        *     $key = wfMemcKey( 'cat-state', $catId );
+        *     // The "check" keys that represent things the value depends on;
+        *     // Calling touchCheckKey() on them invalidates "cat-state"
+        *     $checkKeys = array(
+        *         wfMemcKey( 'water-bowls', $houseId ),
+        *         wfMemcKey( 'food-bowls', $houseId ),
+        *         wfMemcKey( 'people-present', $houseId )
+        *     );
+        *     // Function that derives the new key value
+        *     $callback = function() { ... };
+        *     // Get the key value from cache or from source on cache miss;
+        *     // try to only let one cluster thread manage doing cache updates
+        *     $opts = array( 'lockTSE' => 5, 'lowTTL' => 10 );
+        *     $value = $cache->getWithSetCallback( $key, $callback, 60, $checkKeys, $opts );
+        * @endcode
+        *
+        * @see WANObjectCache::get()
+        *
+        * @param string $key Cache key
+        * @param callable $callback Value generation function
+        * @param integer $ttl Seconds to live for key updates. Special values are:
+        *   - WANObjectCache::TTL_NONE        : cache forever
+        *   - WANObjectCache::TTL_UNCACHEABLE : do not cache at all
+        * @param array $checkKeys List of "check" keys
+        * @param array $opts Options map:
+        *   - lowTTL  : consider pre-emptive updates when the current TTL (sec)
+        *               of the key is less than this. It becomes more likely
+        *               over time, becoming a certainty once the key is expired.
+        *   - lockTSE : if the key is tombstoned or expired (by $checkKeys) less
+        *               than this many seconds ago, then try to have a single
+        *               thread handle cache regeneration at any given time.
+        *               Other threads will try to use stale values if possible.
+        *               If, on miss, the time since expiration is low, the assumption
+        *               is that the key is hot and that a stampede is worth avoiding.
+        *   - tempTTL : when 'lockTSE' is set, this determines the TTL of the temp
+        *               key used to cache values while a key is tombstoned.
+        *               This avoids excessive regeneration of hot keys on delete() but
+        *               may result in stale values.
+        * @return mixed Value to use for the key
+        */
+       final public function getWithSetCallback(
+               $key, $callback, $ttl, array $checkKeys = array(), array $opts = array()
+       ) {
+               $lowTTL = isset( $opts['lowTTL'] ) ? $opts['lowTTL'] : min( 10, $ttl );
+               $lockTSE = isset( $opts['lockTSE'] ) ? $opts['lockTSE'] : -1;
+               $tempTTL = isset( $opts['tempTTL'] ) ? $opts['tempTTL'] : 5;
+
+               // Get the current key value
+               $curTTL = null;
+               $cValue = $this->get( $key, $curTTL, $checkKeys ); // current value
+               $value = $cValue; // return value
+
+               // Determine if a regeneration is desired
+               if ( $value !== false && $curTTL > 0 && !$this->worthRefresh( $curTTL, $lowTTL ) ) {
+                       return $value;
+               }
+
+               if ( !is_callable( $callback ) ) {
+                       throw new InvalidArgumentException( "Invalid cache miss callback provided." );
+               }
+
+               // Assume a key is hot if requested soon after invalidation
+               $isHot = ( $curTTL !== null && $curTTL <= 0 && abs( $curTTL ) <= $lockTSE );
+               $isTombstone = ( $curTTL !== null && $value === false );
+
+               $locked = false;
+               if ( $isHot || $isTombstone ) {
+                       // Acquire a cluster-local non-blocking lock
+                       if ( $this->cache->lock( $key, 0, self::LOCK_TTL ) ) {
+                               // Lock acquired; this thread should update the key
+                               $locked = true;
+                       } elseif ( $value !== false ) {
+                               // If it cannot be acquired; then the stale value can be used
+                               return $value;
+                       } else {
+                               // Either another thread has the lock or the lock failed.
+                               // Use the stash value, which is likely from the prior thread.
+                               $value = $this->cache->get( self::STASH_KEY_PREFIX . $key );
+                               // Regenerate on timeout or if the other thread failed
+                               if ( $value !== false ) {
+                                       return $value;
+                               }
+                       }
+               }
+
+               // Generate the new value from the callback...
+               $value = call_user_func_array( $callback, array( $cValue, &$ttl ) );
+               // When delete() is called, writes are write-holed by the tombstone,
+               // so use a special stash key to pass the new value around threads.
+               if ( $value !== false && ( $isHot || $isTombstone ) && $ttl >= 0 ) {
+                       $this->cache->set( self::STASH_KEY_PREFIX . $key, $value, $tempTTL );
+               }
+
+               if ( $locked ) {
+                       $this->cache->unlock( $key );
+               }
+
+               if ( $value !== false && $ttl >= 0 ) {
+                       // Update the cache; this will fail if the key is tombstoned
+                       $this->set( $key, $value, $ttl );
+               }
+
+               return $value;
+       }
+
+       /**
+        * Get the "last error" registered; clearLastError() should be called manually
+        * @return int ERR_* constant for the "last error" registry
+        */
+       final public function getLastError() {
+               if ( $this->lastRelayError ) {
+                       // If the cache and the relayer failed, focus on the later.
+                       // An update not making it to the relayer means it won't show up
+                       // in other DCs (nor will consistent re-hashing see up-to-date values).
+                       // On the other hand, if just the cache update failed, then it should
+                       // eventually be applied by the relayer.
+                       return $this->lastRelayError;
+               }
+
+               $code = $this->cache->getLastError();
+               switch ( $code ) {
+                       case BagOStuff::ERR_NONE:
+                               return self::ERR_NONE;
+                       case BagOStuff::ERR_NO_RESPONSE:
+                               return self::ERR_NO_RESPONSE;
+                       case BagOStuff::ERR_UNREACHABLE:
+                               return self::ERR_UNREACHABLE;
+                       default:
+                               return self::ERR_UNEXPECTED;
+               }
+       }
+
+       /**
+        * Clear the "last error" registry
+        */
+       final public function clearLastError() {
+               $this->cache->clearLastError();
+               $this->lastRelayError = self::ERR_NONE;
+       }
+
+       /**
+        * Do the actual async bus purge of a key
+        *
+        * This must set the key to "PURGED:<UNIX timestamp>"
+        *
+        * @param string $key Cache key
+        * @param integer $ttl How long to keep the tombstone [seconds]
+        * @return bool Success
+        */
+       protected function relayPurge( $key, $ttl ) {
+               $event = $this->cache->modifySimpleRelayEvent( array(
+                       'cmd' => 'set',
+                       'key' => $key,
+                       'val' => 'PURGED:$UNIXTIME$',
+                       'ttl' => max( $ttl, 1 ),
+                       'sbt' => true, // substitute $UNIXTIME$ with actual microtime
+               ) );
+
+               $ok = $this->relayer->notify( "{$this->pool}:purge", $event );
+               if ( !$ok ) {
+                       $this->lastRelayError = self::ERR_RELAY;
+               }
+
+               return $ok;
+       }
+
+       /**
+        * Check if a key should be regenerated (using random probability)
+        *
+        * This returns false if $curTTL >= $lowTTL. Otherwise, the chance
+        * of returning true increases steadily from 0% to 100% as the $curTTL
+        * moves from $lowTTL to 0 seconds. This handles widely varying
+        * levels of cache access traffic.
+        *
+        * @param float|INF $curTTL Approximate TTL left on the key if present
+        * @param float $lowTTL Consider a refresh when $curTTL is less than this
+        * @return bool
+        */
+       protected function worthRefresh( $curTTL, $lowTTL ) {
+               if ( $curTTL >= $lowTTL ) {
+                       return false;
+               } elseif ( $curTTL <= 0 ) {
+                       return true;
+               }
+
+               $chance = ( 1 - $curTTL / $lowTTL );
+
+               return mt_rand( 1, 1e9 ) <= 1e9 * $chance;
+       }
+
+       /**
+        * Do not use this method outside WANObjectCache
+        *
+        * @param mixed $value
+        * @param integer $ttl [0=forever]
+        * @return string
+        */
+       protected function wrap( $value, $ttl ) {
+               return array(
+                       self::FLD_VERSION => self::VERSION,
+                       self::FLD_VALUE => $value,
+                       self::FLD_TTL => $ttl,
+                       self::FLD_TIME => microtime( true )
+               );
+       }
+
+       /**
+        * Do not use this method outside WANObjectCache
+        *
+        * @param array|string|bool $wrapped
+        * @param float $now Unix Current timestamp (preferrable pre-query)
+        * @return array (mixed; false if absent/invalid, current time left)
+        */
+       protected function unwrap( $wrapped, $now ) {
+               // Check if the value is a tombstone
+               $purgeTimestamp = self::parsePurgeValue( $wrapped );
+               if ( is_float( $purgeTimestamp ) ) {
+                       // Purged values should always have a negative current $ttl
+                       $curTTL = min( -0.000001, $purgeTimestamp - $now );
+                       return array( false, $curTTL );
+               }
+
+               if ( !is_array( $wrapped ) // not found
+                       || !isset( $wrapped[self::FLD_VERSION] ) // wrong format
+                       || $wrapped[self::FLD_VERSION] !== self::VERSION // wrong version
+               ) {
+                       return array( false, null );
+               }
+
+               if ( $wrapped[self::FLD_TTL] > 0 ) {
+                       // Get the approximate time left on the key
+                       $age = $now - $wrapped[self::FLD_TIME];
+                       $curTTL = max( $wrapped[self::FLD_TTL] - $age, 0.0 );
+               } else {
+                       // Key had no TTL, so the time left is unbounded
+                       $curTTL = INF;
+               }
+
+               return array( $wrapped[self::FLD_VALUE], $curTTL );
+       }
+
+       /**
+        * @param array $keys
+        * @param string $prefix
+        * @return string[]
+        */
+       protected static function prefixCacheKeys( array $keys, $prefix ) {
+               $res = array();
+               foreach ( $keys as $key ) {
+                       $res[] = $prefix . $key;
+               }
+
+               return $res;
+       }
+
+       /**
+        * @param string $value String like "PURGED:<timestamp>"
+        * @return float|bool UNIX timestamp or false on failure
+        */
+       protected static function parsePurgeValue( $value ) {
+               $m = array();
+               if ( is_string( $value ) &&
+                       preg_match( '/^' . self::PURGE_VAL_PREFIX . '([^:]+)$/', $value, $m )
+               ) {
+                       return (float)$m[1];
+               } else {
+                       return false;
+               }
+       }
+}
index e8bb38d..519da43 100644 (file)
@@ -127,9 +127,9 @@ class VirtualRESTServiceClient {
         *   - body    : HTTP response body or resource (if "stream" was set)
         *   - error   : Any cURL error string
         * The map also stores integer-indexed copies of these values. This lets callers do:
-        *      <code>
-        *              list( $rcode, $rdesc, $rhdrs, $rbody, $rerr ) = $client->run( $req );
-        *  </code>
+        * @code
+        *     list( $rcode, $rdesc, $rhdrs, $rbody, $rerr ) = $client->run( $req );
+        * @endcode
         * @param array $req Virtual HTTP request maps
         * @return array Response array for request
         */
@@ -148,9 +148,9 @@ class VirtualRESTServiceClient {
         *   - body    : HTTP response body or resource (if "stream" was set)
         *   - error   : Any cURL error string
         * The map also stores integer-indexed copies of these values. This lets callers do:
-        *    <code>
-        *        list( $rcode, $rdesc, $rhdrs, $rbody, $rerr ) = $responses[0];
-        *  </code>
+        * @code
+        *     list( $rcode, $rdesc, $rhdrs, $rbody, $rerr ) = $responses[0];
+        * @endcode
         *
         * @param array $reqs Map of Virtual HTTP request maps
         * @return array $reqs Map of corresponding response values with the same keys/order
index 8b28821..dfe3136 100644 (file)
@@ -26,7 +26,7 @@
 class LogEventsList extends ContextSource {
        const NO_ACTION_LINK = 1;
        const NO_EXTRA_USER_LINKS = 2;
-       const USE_REVDEL_CHECKBOXES = 4;
+       const USE_CHECKBOXES = 4;
 
        public $flags;
 
@@ -44,7 +44,7 @@ class LogEventsList extends ContextSource {
         *   a Skin object. Use of Skin is deprecated.
         * @param null $unused Unused; used to be an OutputPage object.
         * @param int $flags Can be a combination of self::NO_ACTION_LINK,
-        *   self::NO_EXTRA_USER_LINKS or self::USE_REVDEL_CHECKBOXES.
+        *   self::NO_EXTRA_USER_LINKS or self::USE_CHECKBOXES.
         */
        public function __construct( $context, $unused = null, $flags = 0 ) {
                if ( $context instanceof IContextSource ) {
@@ -341,14 +341,27 @@ class LogEventsList extends ContextSource {
         */
        private function getShowHideLinks( $row ) {
                // We don't want to see the links and
+               if ( $this->flags == self::NO_ACTION_LINK ) {
+                       return '';
+               }
+
+               $user = $this->getUser();
+
+               // If change tag editing is available to this user, return the checkbox
+               if ( $this->flags & self::USE_CHECKBOXES && ChangeTags::showTagEditingUI( $user ) ) {
+                       return Xml::check(
+                               'showhiderevisions',
+                               false,
+                               array( 'name' => 'ids[' . $row->log_id . ']' )
+                       );
+               }
+
                // no one can hide items from the suppress log.
-               if ( ( $this->flags == self::NO_ACTION_LINK )
-                       || $row->log_type == 'suppress'
-               ) {
+               if ( $row->log_type == 'suppress' ) {
                        return '';
                }
+
                $del = '';
-               $user = $this->getUser();
                // Don't show useless checkbox to people who cannot hide log entries
                if ( $user->isAllowed( 'deletedhistory' ) ) {
                        $canHide = $user->isAllowed( 'deletelogentry' );
@@ -358,7 +371,7 @@ class LogEventsList extends ContextSource {
                        $canViewThisSuppressedEntry = $canViewSuppressedOnly && $entryIsSuppressed;
                        if ( $row->log_deleted || $canHide ) {
                                // Show checkboxes instead of links.
-                               if ( $canHide && $this->flags & self::USE_REVDEL_CHECKBOXES && !$canViewThisSuppressedEntry ) {
+                               if ( $canHide && $this->flags & self::USE_CHECKBOXES && !$canViewThisSuppressedEntry ) {
                                        // If event was hidden from sysops
                                        if ( !self::userCan( $row, LogPage::DELETED_RESTRICTED, $user ) ) {
                                                $del = Xml::check( 'deleterevisions', false, array( 'disabled' => 'disabled' ) );
index 9c2fdd3..119492b 100644 (file)
@@ -193,6 +193,8 @@ class LogFormatter {
         * @return string Text
         */
        public function getIRCActionText() {
+               global $wgContLang;
+
                $this->plaintext = true;
                $this->irctext = true;
 
@@ -338,7 +340,6 @@ class LogFormatter {
                        case 'block':
                                switch ( $entry->getSubtype() ) {
                                        case 'block':
-                                               global $wgContLang;
                                                // Keep compatibility with extensions by checking for
                                                // new key (5::duration/6::flags) or old key (0/optional 1)
                                                if ( $entry->isLegacy() ) {
@@ -358,7 +359,6 @@ class LogFormatter {
                                                        ->rawParams( $target )->inContentLanguage()->escaped();
                                                break;
                                        case 'reblock':
-                                               global $wgContLang;
                                                $duration = $wgContLang->translateBlockExpiry( $parameters['5::duration'] );
                                                $flags = BlockLogFormatter::formatBlockFlags( $parameters['6::flags'], $wgContLang );
                                                $text = wfMessage( 'reblock-logentry' )
index bf489ab..c4ce7b3 100644 (file)
@@ -192,7 +192,7 @@ class LogPager extends ReverseChronologicalPager {
         * @return void
         */
        private function limitTitle( $page, $pattern ) {
-               global $wgMiserMode;
+               global $wgMiserMode, $wgUserrightsInterwikiDelimiter;
 
                if ( $page instanceof Title ) {
                        $title = $page;
@@ -209,7 +209,6 @@ class LogPager extends ReverseChronologicalPager {
 
                $doUserRightsLogLike = false;
                if ( $this->types == array( 'rights' ) ) {
-                       global $wgUserrightsInterwikiDelimiter;
                        $parts = explode( $wgUserrightsInterwikiDelimiter, $title->getDBKey() );
                        if ( count( $parts ) == 2 ) {
                                list( $name, $database ) = array_map( 'trim', $parts );
index 1b0eb49..749ef23 100644 (file)
@@ -27,6 +27,8 @@
  * @ingroup Media
  */
 class DjVuHandler extends ImageHandler {
+       const EXPENSIVE_SIZE_LIMIT = 10485760; // 10MiB
+
        /**
         * @return bool
         */
@@ -49,6 +51,15 @@ class DjVuHandler extends ImageHandler {
                return true;
        }
 
+       /**
+        * True if creating thumbnails from the file is large or otherwise resource-intensive.
+        * @param File $file
+        * @return bool
+        */
+       public function isExpensiveToThumbnail( $file ) {
+               return $file->getSize() > static::EXPENSIVE_SIZE_LIMIT;
+       }
+
        /**
         * @param File $file
         * @return bool
@@ -137,31 +148,12 @@ class DjVuHandler extends ImageHandler {
        function doTransform( $image, $dstPath, $dstUrl, $params, $flags = 0 ) {
                global $wgDjvuRenderer, $wgDjvuPostProcessor;
 
-               // Fetch XML and check it, to give a more informative error message than the one which
-               // normaliseParams will inevitably give.
-               $xml = $image->getMetadata();
-               if ( !$xml ) {
-                       $width = isset( $params['width'] ) ? $params['width'] : 0;
-                       $height = isset( $params['height'] ) ? $params['height'] : 0;
-
-                       return new MediaTransformError( 'thumbnail_error', $width, $height,
-                               wfMessage( 'djvu_no_xml' )->text() );
-               }
-
                if ( !$this->normaliseParams( $image, $params ) ) {
                        return new TransformParameterError( $params );
                }
                $width = $params['width'];
                $height = $params['height'];
                $page = $params['page'];
-               if ( $page > $this->pageCount( $image ) ) {
-                       return new MediaTransformError(
-                               'thumbnail_error',
-                               $width,
-                               $height,
-                               wfMessage( 'djvu_page_error' )->text()
-                       );
-               }
 
                if ( $flags & self::TRANSFORM_LATER ) {
                        $params = array(
@@ -384,29 +376,55 @@ class DjVuHandler extends ImageHandler {
        }
 
        function pageCount( $image ) {
-               $tree = $this->getMetaTree( $image );
-               if ( !$tree ) {
-                       return false;
+               global $wgMemc;
+
+               $key = wfMemcKey( 'file-djvu', 'pageCount', $image->getSha1() );
+
+               $count = $wgMemc->get( $key );
+               if ( $count === false ) {
+                       $tree = $this->getMetaTree( $image );
+                       if ( !$tree ) {
+                               return false;
+                       }
+                       $count = count( $tree->xpath( '//OBJECT' ) );
+                       $wgMemc->set( $key, $count );
                }
 
-               return count( $tree->xpath( '//OBJECT' ) );
+               return $count;
        }
 
        function getPageDimensions( $image, $page ) {
-               $tree = $this->getMetaTree( $image );
-               if ( !$tree ) {
-                       return false;
-               }
+               global $wgMemc;
 
-               $o = $tree->BODY[0]->OBJECT[$page - 1];
-               if ( $o ) {
-                       return array(
-                               'width' => intval( $o['width'] ),
-                               'height' => intval( $o['height'] )
-                       );
-               } else {
-                       return false;
+               $key = wfMemcKey( 'file-djvu', 'dimensions', $image->getSha1() );
+
+               $dimsByPage = $wgMemc->get( $key );
+               if ( !is_array( $dimsByPage ) ) {
+                       $tree = $this->getMetaTree( $image );
+                       if ( !$tree ) {
+                               return false;
+                       }
+
+                       $dimsByPage = array();
+                       $count = count( $tree->xpath( '//OBJECT' ) );
+                       for ( $i = 0; $i < $count; ++$i ) {
+                               $o = $tree->BODY[0]->OBJECT[$i];
+                               if ( $o ) {
+                                       $dimsByPage[$i] = array(
+                                               'width' => (int)$o['width'],
+                                               'height' => (int)$o['height']
+                                       );
+                               } else {
+                                       $dimsByPage[$i] = false;
+                               }
+                       }
+
+                       $wgMemc->set( $key, $dimsByPage );
                }
+
+               $index = $page - 1; // MW starts pages at 1
+
+               return isset( $dimsByPage[$index] ) ? $dimsByPage[$index] : false;
        }
 
        /**
index 7246072..2ae5af3 100644 (file)
@@ -1003,28 +1003,6 @@ class FormatMetadata extends ContextSource {
                return $obj->flattenArrayReal( $vals, $type, $noHtml );
        }
 
-       /**
-        * Flatten an array, using the user language for any messages.
-        *
-        * @param array $vals Array of values
-        * @param string $type Type of array (either lang, ul, ol).
-        *   lang = language assoc array with keys being the lang code
-        *   ul = unordered list, ol = ordered list
-        *   type can also come from the '_type' member of $vals.
-        * @param bool $noHtml If to avoid returning anything resembling HTML.
-        *   (Ugly hack for backwards compatibility with old MediaWiki).
-        * @param bool|IContextSource $context
-        * @return string Single value (in wiki-syntax).
-        */
-       public static function flattenArray( $vals, $type = 'ul', $noHtml = false, $context = false ) {
-               $obj = new FormatMetadata;
-               if ( $context ) {
-                       $obj->setContext( $context );
-               }
-
-               return $obj->flattenArrayReal( $vals, $type, $noHtml );
-       }
-
        /**
         * A function to collapse multivalued tags into a single value.
         * This turns an array of (for example) authors into a bulleted list.
@@ -1626,7 +1604,7 @@ class FormatMetadata extends ContextSource {
                        // This is an API-specific function so it would be cleaner to call it from
                        // outside fetchExtendedMetadata, but this way we don't need to redo the
                        // computation on a cache hit.
-                       $this->sanitizeArrayForXml( $extendedMetadata );
+                       $this->sanitizeArrayForAPI( $extendedMetadata );
                        $valueToCache = array( 'data' => $extendedMetadata, 'timestamp' => wfTimestampNow() );
                        $wgMemc->set( $cacheKey, $valueToCache, $maxCacheTime );
                }
@@ -1822,17 +1800,16 @@ class FormatMetadata extends ContextSource {
 
        /**
         * Makes sure the given array is a valid API response fragment
-        * (can be transformed into XML)
         * @param array $arr
         */
-       protected function sanitizeArrayForXml( &$arr ) {
+       protected function sanitizeArrayForAPI( &$arr ) {
                if ( !is_array( $arr ) ) {
                        return;
                }
 
                $counter = 1;
                foreach ( $arr as $key => &$value ) {
-                       $sanitizedKey = $this->sanitizeKeyForXml( $key );
+                       $sanitizedKey = $this->sanitizeKeyForAPI( $key );
                        if ( $sanitizedKey !== $key ) {
                                if ( isset( $arr[$sanitizedKey] ) ) {
                                        // Make the sanitized keys hopefully unique.
@@ -1846,20 +1823,24 @@ class FormatMetadata extends ContextSource {
                                unset( $arr[$key] );
                        }
                        if ( is_array( $value ) ) {
-                               $this->sanitizeArrayForXml( $value );
+                               $this->sanitizeArrayForAPI( $value );
                        }
                }
+
+               // Handle API metadata keys (particularly "_type")
+               $keys = array_filter( array_keys( $arr ), 'ApiResult::isMetadataKey' );
+               if ( $keys ) {
+                       ApiResult::setPreserveKeysList( $arr, $keys );
+               }
        }
 
        /**
-        * Turns a string into a valid XML identifier.
-        * Used to ensure that keys of an associative array in the
-        * API response do not break the XML formatter.
+        * Turns a string into a valid API identifier.
         * @param string $key
         * @return string
         * @since 1.23
         */
-       protected function sanitizeKeyForXml( $key ) {
+       protected function sanitizeKeyForAPI( $key ) {
                // drop all characters which are not valid in an XML tag name
                // a bunch of non-ASCII letters would be valid but probably won't
                // be used so we take the easy way
index b505280..c2f85e8 100644 (file)
@@ -95,7 +95,7 @@ class SvgHandler extends ImageHandler {
                        $metadata = $this->unpackMetadata( $metadata );
                        if ( isset( $metadata['translations'] ) ) {
                                foreach ( $metadata['translations'] as $lang => $langType ) {
-                                       if ( $langType === SvgReader::LANG_FULL_MATCH ) {
+                                       if ( $langType === SVGReader::LANG_FULL_MATCH ) {
                                                $langList[] = $lang;
                                        }
                                }
index 83bee70..eeca9b1 100644 (file)
@@ -183,4 +183,12 @@ class MemcachedBagOStuff extends BagOStuff {
        protected function debugLog( $text ) {
                $this->logger->debug( $text );
        }
+
+       public function modifySimpleRelayEvent( array $event ) {
+               if ( array_key_exists( 'val', $event ) ) {
+                       $event['flg'] = 0; // data is not serialized nor gzipped (for memcached driver)
+               }
+
+               return $event;
+       }
 }
index 2e47e24..5da22f0 100644 (file)
@@ -29,7 +29,10 @@ use MediaWiki\Logger\LoggerFactory;
  * @ingroup Cache
  */
 class ObjectCache {
+       /** @var Array Map of (id => BagOStuff) */
        public static $instances = array();
+       /** @var Array Map of (id => WANObjectCache) */
+       public static $wanInstances = array();
 
        /**
         * Get a cached instance of the specified type of cache object.
@@ -48,11 +51,30 @@ class ObjectCache {
                return $object;
        }
 
+       /**
+        * Get a cached instance of the specified type of cache object.
+        *
+        * @param string $id
+        *
+        * @return WANObjectCache
+        * @since 1.26
+        */
+       static function getWANInstance( $id ) {
+               if ( isset( self::$wanInstances[$id] ) ) {
+                       return self::$wanInstances[$id];
+               }
+
+               $object = self::newWANCacheFromId( $id );
+               self::$wanInstances[$id] = $object;
+               return $object;
+       }
+
        /**
         * Clear all the cached instances.
         */
        static function clear() {
                self::$instances = array();
+               self::$wanInstances = array();
        }
 
        /**
@@ -167,4 +189,42 @@ class ObjectCache {
        static function newMemcached( $params ) {
                return new MemcachedPhpBagOStuff( $params );
        }
+
+       /**
+        * Create a new cache object of the specified type
+        *
+        * @param string $id
+        *
+        * @throws MWException
+        * @return WANObjectCache
+        * @since 1.26
+        */
+       static function newWANCacheFromId( $id ) {
+               global $wgWANObjectCaches;
+
+               if ( !isset( $wgWANObjectCaches[$id] ) ) {
+                       throw new MWException( "Invalid object cache type \"$id\" requested. " .
+                               "It is not present in \$wgWANObjectCaches." );
+               }
+
+               $params = $wgWANObjectCaches[$id];
+               $class = $params['relayerConfig']['class'];
+               $params['relayer'] = new $class( $params['relayerConfig'] );
+               $params['cache'] = self::newFromId( $params['cacheId'] );
+               $class = $params['class'];
+
+               return new $class( $params );
+       }
+
+       /**
+        * Get the main WAN cache object
+        *
+        * @return WANObjectCache
+        * @since 1.26
+        */
+       static function getMainWANInstance() {
+               global $wgMainWANCache;
+
+               return self::getWANInstance( $wgMainWANCache );
+       }
 }
index 23c8b6d..9d5d0ef 100644 (file)
@@ -331,6 +331,14 @@ class RedisBagOStuff extends BagOStuff {
                return $this->mergeViaCas( $key, $callback, $exptime, $attempts );
        }
 
+       public function modifySimpleRelayEvent( array $event ) {
+               if ( array_key_exists( 'val', $event ) ) {
+                       $event['val'] = serialize( $event['val'] ); // this class uses PHP serialization
+               }
+
+               return $event;
+       }
+
        /**
         * @param mixed $data
         * @return string
diff --git a/includes/objectcache/ReplicatedBagOStuff.php b/includes/objectcache/ReplicatedBagOStuff.php
deleted file mode 100644 (file)
index 34affc7..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-<?php
-/**
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Cache
- * @author Aaron Schulz
- */
-
-/**
- * A cache class that directs writes to one set of servers and reads to
- * another. This assumes that the servers used for reads are setup to slave
- * those that writes go to. This can easily be used with redis for example.
- *
- * In the WAN scenario (e.g. multi-datacenter case), this is useful when
- * writes are rare or they usually take place in the primary datacenter.
- *
- * @ingroup Cache
- * @since 1.25
- */
-class ReplicatedBagOStuff extends BagOStuff {
-       /** @var BagOStuff */
-       protected $mCache;
-       /** @var BagOStuff */
-       protected $sCache;
-
-       /**
-        * Constructor. Parameters are:
-        *   - masterCache : Cache parameter structures, in the style required by $wgObjectCaches.
-        *                   See the documentation of $wgObjectCaches for more detail.
-        *   - slaveCache  : Cache parameter structures, in the style required by $wgObjectCaches.
-        *                   See the documentation of $wgObjectCaches for more detail.
-        *
-        * @param array $params
-        * @throws MWException
-        */
-       public function __construct( $params ) {
-               parent::__construct( $params );
-
-               if ( !isset( $params['masterCache'] ) ) {
-                       throw new MWException( __METHOD__ . ': the "masterCache" parameter is required' );
-               } elseif ( !isset( $params['slaveCache'] ) ) {
-                       throw new MWException( __METHOD__ . ': the "slaveCache" parameter is required' );
-               }
-
-               $this->mCache = ( $params['masterCache'] instanceof BagOStuff )
-                       ? $params['masterCache']
-                       : ObjectCache::newFromParams( $params['masterCache'] );
-               $this->sCache = ( $params['slaveCache'] instanceof BagOStuff )
-                       ? $params['slaveCache']
-                       : ObjectCache::newFromParams( $params['slaveCache'] );
-       }
-
-       public function setDebug( $debug ) {
-               $this->mCache->setDebug( $debug );
-               $this->sCache->setDebug( $debug );
-       }
-
-       public function get( $key, &$casToken = null ) {
-               return $this->sCache->get( $key, $casToken );
-       }
-
-       public function getMulti( $keys ) {
-               return $this->sCache->getMulti( $keys );
-       }
-
-       public function set( $key, $value, $exptime = 0 ) {
-               return $this->mCache->set( $key, $value, $exptime );
-       }
-
-       public function delete( $key ) {
-               return $this->mCache->delete( $key );
-       }
-
-       public function add( $key, $value, $exptime = 0 ) {
-               return $this->mCache->add( $key, $value, $exptime );
-       }
-
-       public function incr( $key, $value = 1 ) {
-               return $this->mCache->incr( $key, $value );
-       }
-
-       public function decr( $key ) {
-               return $this->mCache->decr( $key );
-       }
-
-       public function lock( $key, $timeout = 6, $expiry = 6 ) {
-               return $this->mCache->lock( $key, $timeout, $expiry );
-       }
-
-       public function unlock( $key ) {
-               return $this->mCache->unlock( $key );
-       }
-
-       public function merge( $key, $callback, $exptime = 0, $attempts = 10 ) {
-               return $this->mCache->merge( $key, $callback, $exptime, $attempts );
-       }
-
-       public function getLastError() {
-               return ( $this->mCache->getLastError() != self::ERR_NONE )
-                       ? $this->mCache->getLastError()
-                       : $this->sCache->getLastError();
-       }
-
-       public function clearLastError() {
-               $this->mCache->clearLastError();
-               $this->sCache->clearLastError();
-       }
-}
index 91e9971..25bf844 100644 (file)
@@ -1254,22 +1254,22 @@ class Article implements Page {
 
                # Show error message
                $oldid = $this->getOldID();
-               if ( $oldid ) {
-                       $text = wfMessage( 'missing-revision', $oldid )->plain();
-               } elseif ( $title->getNamespace() === NS_MEDIAWIKI ) {
-                       // Use the default message text
-                       $text = $title->getDefaultMessageText();
-               } elseif ( $title->quickUserCan( 'create', $this->getContext()->getUser() )
-                       && $title->quickUserCan( 'edit', $this->getContext()->getUser() )
-               ) {
-                       $message = $this->getContext()->getUser()->isLoggedIn() ? 'noarticletext' : 'noarticletextanon';
-                       $text = wfMessage( $message )->plain();
+               if ( !$oldid && $title->getNamespace() === NS_MEDIAWIKI ) {
+                       $outputPage->addParserOutput( $this->getContentObject()->getParserOutput( $title ) );
                } else {
-                       $text = wfMessage( 'noarticletext-nopermission' )->plain();
-               }
-               $text = "<div class='noarticletext'>\n$text\n</div>";
+                       if ( $oldid ) {
+                               $text = wfMessage( 'missing-revision', $oldid )->plain();
+                       } elseif ( $title->quickUserCan( 'create', $this->getContext()->getUser() )
+                               && $title->quickUserCan( 'edit', $this->getContext()->getUser() )
+                       ) {
+                               $message = $this->getContext()->getUser()->isLoggedIn() ? 'noarticletext' : 'noarticletextanon';
+                               $text = wfMessage( $message )->plain();
+                       } else {
+                               $text = wfMessage( 'noarticletext-nopermission' )->plain();
+                       }
 
-               $outputPage->addWikiText( $text );
+                       $outputPage->addWikiText( "<div class='noarticletext'>\n$text\n</div>" );
+               }
        }
 
        /**
index 059a3f8..7b33b02 100644 (file)
@@ -1141,6 +1141,7 @@ class WikiPage implements Page, IDBAccessObject {
                        return;
                }
 
+               Hooks::run( 'PageViewUpdates', array( $this, $user ) );
                // Update newtalk / watchlist notification status
                try {
                        $user->clearNotification( $this->mTitle, $oldid );
@@ -2205,8 +2206,12 @@ class WikiPage implements Page, IDBAccessObject {
                Hooks::run( 'ArticleEditUpdates', array( &$this, &$editInfo, $options['changed'] ) );
 
                if ( Hooks::run( 'ArticleEditUpdatesDeleteFromRecentchanges', array( &$this ) ) ) {
-                       // Flush old entries from the `recentchanges` table
-                       JobQueueGroup::singleton()->push( RecentChangesUpdateJob::newPurgeJob() );
+                       JobQueueGroup::singleton()->push( array(
+                               // Flush old entries from the `recentchanges` table
+                               RecentChangesUpdateJob::newPurgeJob(),
+                               // Update the cached list of active users
+                               RecentChangesUpdateJob::newCacheUpdateJob()
+                       ) );
                }
 
                if ( !$this->exists() ) {
@@ -3406,8 +3411,12 @@ class WikiPage implements Page, IDBAccessObject {
 
                // Check if the last link refresh was before page_touched
                if ( $this->getLinksTimestamp() < $this->getTouched() ) {
+                       $params['isOpportunistic'] = true;
+                       $params['rootJobTimestamp'] = $parserOutput->getCacheTime();
+
                        JobQueueGroup::singleton()->push( EnqueueJob::newFromLocalJobs(
-                               new JobSpecification( 'refreshLinks', $params, array(), $this->mTitle )
+                               new JobSpecification( 'refreshLinks', $params,
+                                       array( 'removeDuplicates' => true ), $this->mTitle )
                        ) );
                        return;
                }
index ace63a0..27de039 100644 (file)
@@ -1279,6 +1279,10 @@ class Parser {
 
                $text = $this->mStripState->unstripGeneral( $text );
 
+               if ( $isMain ) {
+                       Hooks::run( 'ParserAfterUnstrip', array( &$this, &$text ) );
+               }
+
                # Clean up special characters, only run once, next-to-last before doBlockLevels
                $fixtags = array(
                        # french spaces, last one Guillemet-left
index bc8e4a6..dc8bb52 100644 (file)
@@ -57,7 +57,7 @@ class ParserCache {
        }
 
        /**
-        * @param Article $article
+        * @param WikiPage $article
         * @param string $hash
         * @return mixed|string
         */
@@ -73,7 +73,7 @@ class ParserCache {
        }
 
        /**
-        * @param Article $article
+        * @param WikiPage $article
         * @return mixed|string
         */
        protected function getOptionsKey( $article ) {
@@ -91,7 +91,7 @@ class ParserCache {
         * English preferences. That's why we take into account *all* user
         * options. (r70809 CR)
         *
-        * @param Article $article
+        * @param WikiPage $article
         * @param ParserOptions $popts
         * @return string
         */
@@ -103,7 +103,7 @@ class ParserCache {
 
        /**
         * Retrieve the ParserOutput from ParserCache, even if it's outdated.
-        * @param Article $article
+        * @param WikiPage $article
         * @param ParserOptions $popts
         * @return ParserOutput|bool False on failure
         */
@@ -126,7 +126,7 @@ class ParserCache {
         *
         * @todo Document parameter $useOutdated
         *
-        * @param Article $article
+        * @param WikiPage $article
         * @param ParserOptions $popts
         * @param bool $useOutdated (default true)
         * @return bool|mixed|string
@@ -176,7 +176,7 @@ class ParserCache {
         * Retrieve the ParserOutput from ParserCache.
         * false if not found or outdated.
         *
-        * @param Article $article
+        * @param WikiPage $article
         * @param ParserOptions $popts
         * @param bool $useOutdated (default false)
         *
index 51ae42d..7e38acc 100644 (file)
@@ -144,7 +144,11 @@ class StripState {
                        }
                        $this->circularRefGuard[$marker] = true;
                        $this->recursionLevel++;
-                       $ret = $this->unstripType( $this->tempType, $this->data[$this->tempType][$marker] );
+                       $value = $this->data[$this->tempType][$marker];
+                       if ( $value instanceof Closure ) {
+                               $value = $value();
+                       }
+                       $ret = $this->unstripType( $this->tempType, $value );
                        $this->recursionLevel--;
                        unset( $this->circularRefGuard[$marker] );
                        return $ret;
index 68ef668..9062251 100644 (file)
@@ -35,7 +35,7 @@ class ProfileSection {
         * the same moment that the function to be profiled terminates.
         *
         * This is typically called like:
-        * <code>$section = new ProfileSection( __METHOD__ );</code>
+        * @code$section = new ProfileSection( __METHOD__ );@endcode
         *
         * @param string $name Name of the function to profile
         */
old mode 100755 (executable)
new mode 100644 (file)
index f02d66f..46d6119 100644 (file)
@@ -25,6 +25,7 @@
 use Psr\Log\LoggerInterface;
 use Psr\Log\LoggerAwareInterface;
 use Psr\Log\NullLogger;
+
 /**
  * Helper class that detects high-contention DB queries via profiling calls
  *
@@ -52,11 +53,13 @@ class TransactionProfiler implements LoggerAwareInterface {
        );
        /** @var array */
        protected $expect = array(
-               'writes'      => INF,
-               'queries'     => INF,
-               'conns'       => INF,
-               'masterConns' => INF,
-               'maxAffected' => INF
+               'writes'         => INF,
+               'queries'        => INF,
+               'conns'          => INF,
+               'masterConns'    => INF,
+               'maxAffected'    => INF,
+               'readQueryTime'  => INF,
+               'writeQueryTime' => INF
        );
        /** @var array */
        protected $expectBy = array();
@@ -77,7 +80,7 @@ class TransactionProfiler implements LoggerAwareInterface {
        /**
         * Set performance expectations
         *
-        * With conflicting expect, the most specific ones will be used
+        * With conflicting expectations, the most narrow ones will be used
         *
         * @param string $event (writes,queries,conns,mConns)
         * @param integer $value Maximum count of the event
@@ -93,6 +96,21 @@ class TransactionProfiler implements LoggerAwareInterface {
                }
        }
 
+       /**
+        * Set multiple performance expectations
+        *
+        * With conflicting expectations, the most narrow ones will be used
+        *
+        * @param array $expects Map of (event => limit)
+        * @param $fname
+        * @since 1.26
+        */
+       public function setExpectations( array $expects, $fname ) {
+               foreach ( $expects as $event => $value ) {
+                       $this->setExpectation( $event, $value, $fname );
+               }
+       }
+
        /**
         * Reset performance expectations and hit counters
         *
@@ -170,7 +188,8 @@ class TransactionProfiler implements LoggerAwareInterface {
                $elapsed = ( $eTime - $sTime );
 
                if ( $isWrite && $n > $this->expect['maxAffected'] ) {
-                       $this->logger->info( "Query affected $n row(s):\n" . $query . "\n" . wfBacktrace( true ) );
+                       $this->logger->info( "Query affected $n row(s):\n" . $query . "\n" .
+                               wfBacktrace( true ) );
                }
 
                // Report when too many writes/queries happen...
@@ -180,6 +199,13 @@ class TransactionProfiler implements LoggerAwareInterface {
                if ( $isWrite && $this->hits['writes']++ == $this->expect['writes'] ) {
                        $this->reportExpectationViolated( 'writes', $query );
                }
+               // Report slow queries...
+               if ( !$isWrite && $elapsed > $this->expect['readQueryTime'] ) {
+                       $this->reportExpectationViolated( 'readQueryTime', $query );
+               }
+               if ( $isWrite && $elapsed > $this->expect['writeQueryTime'] ) {
+                       $this->reportExpectationViolated( 'writeQueryTime', $query );
+               }
 
                if ( !$this->dbTrxHoldingLocks ) {
                        // Short-circuit
@@ -220,13 +246,23 @@ class TransactionProfiler implements LoggerAwareInterface {
         * @param string $server DB server
         * @param string $db DB name
         * @param string $id ID string of transaction
+        * @param float $writeTime Time spent in write queries
         */
-       public function transactionWritingOut( $server, $db, $id ) {
+       public function transactionWritingOut( $server, $db, $id, $writeTime = 0.0 ) {
                $name = "{$server} ({$db}) (TRX#$id)";
                if ( !isset( $this->dbTrxMethodTimes[$name] ) ) {
                        $this->logger->info( "Detected no transaction for '$name' - out of sync." );
                        return;
                }
+
+               $slow = false;
+
+               // Warn if too much time was spend writing...
+               if ( $writeTime > $this->expect['writeQueryTime'] ) {
+                       $this->reportExpectationViolated( 'writeQueryTime',
+                               "[transaction $id writes to {$server} ({$db})]" );
+                       $slow = true;
+               }
                // Fill in the last non-query period...
                $lastQuery = end( $this->dbTrxMethodTimes[$name] );
                if ( $lastQuery ) {
@@ -237,7 +273,6 @@ class TransactionProfiler implements LoggerAwareInterface {
                        }
                }
                // Check for any slow queries or non-query periods...
-               $slow = false;
                foreach ( $this->dbTrxMethodTimes[$name] as $info ) {
                        $elapsed = ( $info[2] - $info[1] );
                        if ( $elapsed >= $this->dbLockThreshold ) {
@@ -268,7 +303,8 @@ class TransactionProfiler implements LoggerAwareInterface {
                $n = $this->expect[$expect];
                $by = $this->expectBy[$expect];
                $this->logger->info(
-                       "[{$wgRequest->getMethod()}] Expectation ($expect <= $n) by $by not met:\n$query\n" . wfBacktrace( true )
+                       "[{$wgRequest->getMethod()}] Expectation ($expect <= $n) by $by not met:\n$query\n" .
+                       wfBacktrace( true )
                );
        }
 }
index a5349fb..23a2993 100644 (file)
@@ -24,8 +24,8 @@ class ExtensionProcessor implements Processor {
                'ContentHandlers',
                'ConfigRegistry',
                'RateLimits',
-               'ParserTestFiles',
                'RecentChangesFlags',
+               'MediaHandlers',
                'ExtensionFunctions',
                'ExtensionEntryPointListFiles',
                'SpecialPages',
@@ -122,6 +122,7 @@ class ExtensionProcessor implements Processor {
                $this->extractMessagesDirs( $dir, $info );
                $this->extractNamespaces( $info );
                $this->extractResourceLoaderModules( $dir, $info );
+               $this->extractParserTestFiles( $dir, $info );
                if ( isset( $info['callback'] ) ) {
                        $this->callbacks[] = $info['callback'];
                        $this->processed[] = 'callback';
@@ -151,8 +152,10 @@ class ExtensionProcessor implements Processor {
 
        protected function extractHooks( array $info ) {
                if ( isset( $info['Hooks'] ) ) {
-                       foreach ( $info['Hooks'] as $name => $callable ) {
-                               $this->globals['wgHooks'][$name][] = $callable;
+                       foreach ( $info['Hooks'] as $name => $value ) {
+                               foreach ( (array)$value as $callback ) {
+                                       $this->globals['wgHooks'][$name][] = $callback;
+                               }
                        }
                        $this->processed[] = 'Hooks';
                }
@@ -269,6 +272,15 @@ class ExtensionProcessor implements Processor {
                }
        }
 
+       protected function extractParserTestFiles( $dir, array $info ) {
+               if ( isset( $info['ParserTestFiles'] ) ) {
+                       foreach ( $info['ParserTestFiles'] as $path ) {
+                               $this->globals['wgParserTestFiles'][] = "$dir/$path";
+                       }
+                       $this->processed[] = 'ParserTestFiles';
+               }
+       }
+
        /**
         * @param string $name
         * @param mixed $value
index 5ef3853..d938f07 100644 (file)
@@ -62,7 +62,14 @@ class ExtensionRegistry {
        }
 
        public function __construct() {
-               $this->cache = ObjectCache::newAccelerator( array(), CACHE_NONE );
+               // We use a try/catch instead of the $fallback parameter because
+               // we don't want to fail here if $wgObjectCaches is not configured
+               // properly for APC setup
+               try {
+                       $this->cache = ObjectCache::newAccelerator( array() );
+               } catch ( MWException $e ) {
+                       $this->cache = new EmptyBagOStuff();
+               }
        }
 
        /**
@@ -114,6 +121,9 @@ class ExtensionRegistry {
                $autoloadClasses = array();
                foreach ( $queue as $path => $mtime ) {
                        $json = file_get_contents( $path );
+                       if ( $json === false ) {
+                               throw new Exception( "Unable to read $path, does it exist?" );
+                       }
                        $info = json_decode( $json, /* $assoc = */ true );
                        if ( !is_array( $info ) ) {
                                throw new Exception( "$path is not a valid JSON file." );
index e930fd3..391f108 100644 (file)
@@ -21,7 +21,12 @@ interface Processor {
        public function extractInfo( $path, array $info );
 
        /**
-        * @return array With 'globals', 'defines', 'callbacks', 'credits' keys.
+        * @return array With following keys:
+        *              'globals' - variables to be set to $GLOBALS
+        *              'defines' - constants to define
+        *              'callbacks' - functions to be executed by the registry
+        *              'credits' - metadata to be stored by registry
+        *              'attributes' - registration info which isn't a global variable
         */
        public function getExtractedInfo();
 }
index f8d8d2f..8c9c130 100644 (file)
@@ -339,7 +339,7 @@ class ResourceLoader {
                                        } elseif ( isset( $skinStyles['+' . $name] ) ) {
                                                $paths = (array)$skinStyles['+' . $name];
                                                $styleFiles = isset( $this->moduleInfos[$name]['skinStyles']['default'] ) ?
-                                                       $this->moduleInfos[$name]['skinStyles']['default'] :
+                                                       (array)$this->moduleInfos[$name]['skinStyles']['default'] :
                                                        array();
                                        } else {
                                                continue;
@@ -764,6 +764,9 @@ class ResourceLoader {
 
                                header( 'HTTP/1.0 304 Not Modified' );
                                header( 'Status: 304 Not Modified' );
+
+                               // Send content type and cache headers
+                               $this->sendResponseHeaders( $context, $mtime, false );
                                return true;
                        }
                }
@@ -798,17 +801,17 @@ class ResourceLoader {
                }
                if ( $good ) {
                        $ts = $fileCache->cacheTimestamp();
-                       // Send content type and cache headers
-                       $this->sendResponseHeaders( $context, $ts, false );
                        // If there's an If-Modified-Since header, respond with a 304 appropriately
                        if ( $this->tryRespondLastModified( $context, $ts ) ) {
                                return false; // output handled (buffers cleared)
                        }
+                       // Send content type and cache headers
+                       $this->sendResponseHeaders( $context, $ts, false );
                        $response = $fileCache->fetchText();
                        // Capture any PHP warnings from the output buffer and append them to the
                        // response in a comment if we're in debug mode.
                        if ( $context->getDebug() && strlen( $warnings = ob_get_contents() ) ) {
-                               $response = "/*\n$warnings\n*/\n" . $response;
+                               $response = self::makeComment( $warnings ) . $response;
                        }
                        // Remove the output buffer and output the response
                        ob_end_clean();
index 7efdb26..53e0815 100644 (file)
@@ -28,6 +28,8 @@
  */
 class ResourceLoaderImageModule extends ResourceLoaderModule {
 
+       private $definition = null;
+
        /**
         * Local base path, see __construct()
         * @var string
@@ -57,6 +59,8 @@ class ResourceLoaderImageModule extends ResourceLoaderModule {
         *     array(
         *         // Base path to prepend to all local paths in $options. Defaults to $IP
         *         'localBasePath' => [base path],
+        *         // Path to JSON file that contains any of the settings below
+        *         'data' => [file path string]
         *         // CSS class prefix to use in all style rules
         *         'prefix' => [CSS class prefix],
         *         // Alternatively: Format of CSS selector to use in all style rules
@@ -90,6 +94,26 @@ class ResourceLoaderImageModule extends ResourceLoaderModule {
        public function __construct( $options = array(), $localBasePath = null ) {
                $this->localBasePath = self::extractLocalBasePath( $options, $localBasePath );
 
+               $this->definition = $options;
+       }
+
+       /**
+        * Parse definition and external JSON data, if referenced.
+        */
+       private function ensureStuffLoaded() {
+               if ( $this->definition === null ) {
+                       return;
+               }
+
+               $options = $this->definition;
+               $this->definition = null;
+
+               if ( isset( $options['data'] ) ) {
+                       $dataPath = $this->localBasePath . '/' . $options['data'];
+                       $data = json_decode( file_get_contents( $dataPath ), true );
+                       $options = array_merge( $data, $options );
+               }
+
                // Accepted combinations:
                // * prefix
                // * selector
@@ -144,6 +168,7 @@ class ResourceLoaderImageModule extends ResourceLoaderModule {
         * @return string
         */
        public function getPrefix() {
+               $this->ensureStuffLoaded();
                return $this->prefix;
        }
 
@@ -152,6 +177,7 @@ class ResourceLoaderImageModule extends ResourceLoaderModule {
         * @return string
         */
        public function getSelectors() {
+               $this->ensureStuffLoaded();
                return array(
                        'selectorWithoutVariant' => $this->selectorWithoutVariant,
                        'selectorWithVariant' => $this->selectorWithVariant,
@@ -164,6 +190,7 @@ class ResourceLoaderImageModule extends ResourceLoaderModule {
         * @return ResourceLoaderImage|null
         */
        public function getImage( $name ) {
+               $this->ensureStuffLoaded();
                $images = $this->getImages();
                return isset( $images[$name] ) ? $images[$name] : null;
        }
@@ -174,6 +201,7 @@ class ResourceLoaderImageModule extends ResourceLoaderModule {
         */
        public function getImages() {
                if ( !isset( $this->imageObjects ) ) {
+                       $this->ensureStuffLoaded();
                        $this->imageObjects = array();
 
                        foreach ( $this->images as $name => $options ) {
@@ -213,6 +241,7 @@ class ResourceLoaderImageModule extends ResourceLoaderModule {
         */
        public function getGlobalVariants() {
                if ( !isset( $this->globalVariants ) ) {
+                       $this->ensureStuffLoaded();
                        $this->globalVariants = array();
 
                        if ( isset( $this->variants ) ) {
@@ -232,6 +261,8 @@ class ResourceLoaderImageModule extends ResourceLoaderModule {
         * @return array
         */
        public function getStyles( ResourceLoaderContext $context ) {
+               $this->ensureStuffLoaded();
+
                // Build CSS rules
                $rules = array();
                $script = $context->getResourceLoader()->getLoadScript( $this->getSource() );
@@ -310,6 +341,7 @@ class ResourceLoaderImageModule extends ResourceLoaderModule {
         * @return array
         */
        public function getDefinitionSummary( ResourceLoaderContext $context ) {
+               $this->ensureStuffLoaded();
                $summary = parent::getDefinitionSummary( $context );
                foreach ( array(
                        'localBasePath',
@@ -332,6 +364,7 @@ class ResourceLoaderImageModule extends ResourceLoaderModule {
         * @return int UNIX timestamp
         */
        public function getModifiedTime( ResourceLoaderContext $context ) {
+               $this->ensureStuffLoaded();
                $files = array();
                foreach ( $this->getImages() as $name => $image ) {
                        $files[] = $image->getPath( $context );
index ed16521..d1b024f 100644 (file)
@@ -520,6 +520,12 @@ abstract class ResourceLoaderModule {
 
                wfDebugLog( 'resourceloader', __METHOD__ . ": New definition for module "
                        . "{$this->getName()} in context \"{$context->getHash()}\"" );
+               // WMF logging for T94810
+               global $wgRequest;
+               if ( isset( $wgRequest ) && $context->getUser() ) {
+                       wfDebugLog( 'resourceloader', __METHOD__ . ": Request with user parameter in "
+                       . "context \"{$context->getHash()}\" from " . $wgRequest->getRequestURL() );
+               }
 
                $timestamp = time();
                $cache->set( $key, $timestamp );
index 5c91709..bbc59ac 100644 (file)
@@ -35,7 +35,8 @@ class ResourceLoaderSpecialCharacterDataModule extends ResourceLoaderModule {
         * @return array
         */
        protected function getData() {
-               return json_decode( file_get_contents( $this->path ) );
+               global $IP;
+               return json_decode( file_get_contents( "$IP/{$this->path}" ) );
        }
 
        /**
index 5770276..e5ed23f 100644 (file)
@@ -33,7 +33,7 @@ class SearchEngine {
        /** @var string */
        public $prefix = '';
 
-       /** @var int[] */
+       /** @var int[]|null */
        public $namespaces = array( NS_MAIN );
 
        /** @var int */
@@ -293,7 +293,7 @@ class SearchEngine {
         * Set which namespaces the search should include.
         * Give an array of namespace index numbers.
         *
-        * @param array $namespaces
+        * @param int[]|null $namespaces
         */
        function setNamespaces( $namespaces ) {
                $this->namespaces = $namespaces;
index 223a2fe..5087e8d 100644 (file)
@@ -58,7 +58,8 @@ class SearchHighlighter {
                        3 => "/(\n\\{\\|)|(\n\\|\\})/" ); // table
 
                // @todo FIXME: This should prolly be a hook or something
-               if ( function_exists( 'wfCite' ) ) {
+               // instead of hardcoding a class name from the Cite extension
+               if ( class_exists( 'Cite' ) ) {
                        $spat .= '|(<ref>)'; // references via cite extension
                        $endPatterns[4] = '/(<ref>)|(<\/ref>)/';
                }
index 62f6ca3..169c0d8 100644 (file)
@@ -57,13 +57,13 @@ class SiteExporter {
                        'xmlns' => 'http://www.mediawiki.org/xml/sitelist-1.0/',
                );
 
-               fwrite( $this->sink, XML::openElement( 'sites', $attributes ) . "\n" );
+               fwrite( $this->sink, Xml::openElement( 'sites', $attributes ) . "\n" );
 
                foreach ( $sites as $site ) {
                        $this->exportSite( $site );
                }
 
-               fwrite( $this->sink, XML::closeElement( 'sites' ) . "\n" );
+               fwrite( $this->sink, Xml::closeElement( 'sites' ) . "\n" );
                fflush( $this->sink );
        }
 
@@ -79,36 +79,36 @@ class SiteExporter {
                        $siteAttr = null;
                }
 
-               fwrite( $this->sink, "\t" . XML::openElement( 'site', $siteAttr ) . "\n" );
+               fwrite( $this->sink, "\t" . Xml::openElement( 'site', $siteAttr ) . "\n" );
 
-               fwrite( $this->sink, "\t\t" . XML::element( 'globalid', null, $site->getGlobalId() ) . "\n" );
+               fwrite( $this->sink, "\t\t" . Xml::element( 'globalid', null, $site->getGlobalId() ) . "\n" );
 
                if ( $site->getGroup() !== Site::GROUP_NONE ) {
-                       fwrite( $this->sink, "\t\t" . XML::element( 'group', null, $site->getGroup() ) . "\n" );
+                       fwrite( $this->sink, "\t\t" . Xml::element( 'group', null, $site->getGroup() ) . "\n" );
                }
 
                if ( $site->getSource() !== Site::SOURCE_LOCAL ) {
-                       fwrite( $this->sink, "\t\t" . XML::element( 'source', null, $site->getSource() ) . "\n" );
+                       fwrite( $this->sink, "\t\t" . Xml::element( 'source', null, $site->getSource() ) . "\n" );
                }
 
                if ( $site->shouldForward() ) {
-                       fwrite( $this->sink, "\t\t" . XML::element( 'forward', null, '' ) . "\n" );
+                       fwrite( $this->sink, "\t\t" . Xml::element( 'forward', null, '' ) . "\n" );
                }
 
                foreach ( $site->getAllPaths() as $type => $path ) {
-                       fwrite( $this->sink, "\t\t" . XML::element( 'path', array( 'type' => $type ), $path ) . "\n" );
+                       fwrite( $this->sink, "\t\t" . Xml::element( 'path', array( 'type' => $type ), $path ) . "\n" );
                }
 
                foreach ( $site->getLocalIds() as $type => $ids ) {
                        foreach ( $ids as $id ) {
-                               fwrite( $this->sink, "\t\t" . XML::element( 'localid', array( 'type' => $type ), $id ) . "\n" );
+                               fwrite( $this->sink, "\t\t" . Xml::element( 'localid', array( 'type' => $type ), $id ) . "\n" );
                        }
                }
 
                //@todo: export <data>
                //@todo: export <config>
 
-               fwrite( $this->sink, "\t" . XML::closeElement( 'site' ) . "\n" );
+               fwrite( $this->sink, "\t" . Xml::closeElement( 'site' ) . "\n" );
        }
 
 }
index 07a2e87..6c5fbcd 100644 (file)
@@ -1234,12 +1234,13 @@ abstract class Skin extends ContextSource {
         * @return array
         */
        function buildSidebar() {
-               global $wgMemc, $wgEnableSidebarCache, $wgSidebarCacheExpiry;
+               global $wgEnableSidebarCache, $wgSidebarCacheExpiry;
 
+               $cache = ObjectCache::getMainWANInstance();
                $key = wfMemcKey( 'sidebar', $this->getLanguage()->getCode() );
 
                if ( $wgEnableSidebarCache ) {
-                       $cachedsidebar = $wgMemc->get( $key );
+                       $cachedsidebar = $cache->get( $key );
                        if ( $cachedsidebar ) {
                                Hooks::run( 'SidebarBeforeOutput', array( $this, &$cachedsidebar ) );
 
@@ -1252,7 +1253,7 @@ abstract class Skin extends ContextSource {
 
                Hooks::run( 'SkinBuildSidebar', array( $this, &$bar ) );
                if ( $wgEnableSidebarCache ) {
-                       $wgMemc->set( $key, $bar, $wgSidebarCacheExpiry );
+                       $cache->set( $key, $bar, $wgSidebarCacheExpiry );
                }
 
                Hooks::run( 'SidebarBeforeOutput', array( $this, &$bar ) );
index 61aad92..d7e0132 100644 (file)
@@ -421,17 +421,11 @@ class SkinTemplate extends Skin {
                $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 AND if the page exists
-               # (or is in MW namespace, because that has default content)
-               if ( !in_array( $title->getNamespace(), array( NS_SPECIAL, NS_FILE ) ) &&
-                       Action::getActionName( $this ) === 'view' &&
-                       ( $title->exists() || $title->getNamespace() == NS_MEDIAWIKI ) ) {
-                       $pageLang = $title->getPageViewLanguage();
-                       $realBodyAttribs['lang'] = $pageLang->getHtmlCode();
-                       $realBodyAttribs['dir'] = $pageLang->getDir();
-                       $realBodyAttribs['class'] = 'mw-content-' . $pageLang->getDir();
-               }
+               # when the content is different from the UI language
+               $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 );
                $tpl->setRef( 'bodytext', $out->mBodytext );
index da752f6..92409cd 100644 (file)
@@ -252,6 +252,17 @@ abstract class QueryPage extends SpecialPage {
                return '';
        }
 
+       /**
+        * Outputs some kind of an informative message (via OutputPage) to let the
+        * user know that the query returned nothing and thus there's nothing to
+        * show.
+        *
+        * @since 1.26
+        */
+       protected function showEmptyText() {
+               $this->getOutput()->addWikiMsg( 'specialpage-empty' );
+       }
+
        /**
         * If using extra form wheely-dealies, return a set of parameters here
         * as an associative array. They will be encoded and added to the paging
@@ -546,7 +557,7 @@ abstract class QueryPage extends SpecialPage {
                        } else {
                                # No results to show, so don't bother with "showing X of Y" etc.
                                # -- just let the user know and give up now
-                               $out->addWikiMsg( 'specialpage-empty' );
+                               $this->showEmptyText();
                                $out->addHTML( Xml::closeElement( 'div' ) );
                                return;
                        }
index 2c00175..047e941 100644 (file)
@@ -267,12 +267,24 @@ class SpecialActiveUsers extends SpecialPage {
                $out->wrapWikiMsg( "<div class='mw-activeusers-intro'>\n$1\n</div>",
                        array( 'activeusers-intro', $this->getLanguage()->formatNum( $days ) ) );
 
-               // Occasionally merge in new updates
-               $seconds = min( self::mergeActiveUsers( 300, $days ), $days * 86400 );
-               if ( $seconds > 0 ) {
-                       // Mention the level of staleness
-                       $out->addWikiMsg( 'cachedspecial-viewing-cached-ttl',
-                               $this->getLanguage()->formatDuration( $seconds ) );
+               // Mention the level of cache staleness...
+               $dbr = wfGetDB( DB_SLAVE, 'recentchanges' );
+               $rcMax = $dbr->selectField( 'recentchanges', 'MAX(rc_timestamp)' );
+               if ( $rcMax ) {
+                       $cTime = $dbr->selectField( 'querycache_info',
+                               'qci_timestamp',
+                               array( 'qci_type' => 'activeusers' )
+                       );
+                       if ( $cTime ) {
+                               $secondsOld = wfTimestamp( TS_UNIX, $rcMax ) - wfTimestamp( TS_UNIX, $cTime );
+                       } else {
+                               $rcMin = $dbr->selectField( 'recentchanges', 'MIN(rc_timestamp)' );
+                               $secondsOld = time() - wfTimestamp( TS_UNIX, $rcMin );
+                       }
+                       if ( $secondsOld > 0 ) {
+                               $out->addWikiMsg( 'cachedspecial-viewing-cached-ttl',
+                               $this->getLanguage()->formatDuration( $secondsOld ) );
+                       }
                }
 
                $up = new ActiveUsersPager( $this->getContext(), null, $par );
@@ -295,163 +307,4 @@ class SpecialActiveUsers extends SpecialPage {
        protected function getGroupName() {
                return 'users';
        }
-
-       /**
-        * @param int $period Seconds (do updates no more often than this)
-        * @param int $days How many days user must be idle before he is considered inactive
-        * @return int How many seconds old the cache is
-        */
-       public static function mergeActiveUsers( $period, $days ) {
-               $dbr = wfGetDB( DB_SLAVE, 'recentchanges' );
-               $cTime = $dbr->selectField( 'querycache_info',
-                       'qci_timestamp',
-                       array( 'qci_type' => 'activeusers' )
-               );
-
-               if ( !wfReadOnly() ) {
-                       if ( !$cTime || ( time() - wfTimestamp( TS_UNIX, $cTime ) ) > $period ) {
-                               $dbw = wfGetDB( DB_MASTER );
-                               $cond = $cTime
-                                       ? array( 'rc_timestamp > ' . $dbw->addQuotes( $cTime ) )
-                                       : array();
-                               if ( $dbw->estimateRowCount( 'recentchanges', '*', $cond ) <= 10000 ) {
-                                       $window = $days * 86400; // small wiki
-                               } else {
-                                       $window = $period * 2;
-                               }
-                               $cTime = self::doQueryCacheUpdate( $dbw, $days, $window ) ?: $cTime;
-                       }
-               }
-
-               return ( time() -
-                       ( $cTime ? wfTimestamp( TS_UNIX, $cTime ) : $days * 86400 ) );
-       }
-
-       /**
-        * @param IDatabase $dbw Passed in from updateSpecialPages.php
-        * @return void
-        */
-       public static function cacheUpdate( IDatabase $dbw ) {
-               global $wgActiveUserDays;
-
-               self::doQueryCacheUpdate( $dbw, $wgActiveUserDays, $wgActiveUserDays * 86400 );
-       }
-
-       /**
-        * Update the query cache as needed
-        *
-        * @param IDatabase $dbw
-        * @param int $days How many days user must be idle before he is considered inactive
-        * @param int $window Maximum time range of new data to scan (in seconds)
-        * @return int|bool UNIX timestamp the cache is now up-to-date as of (false on error)
-        */
-       protected static function doQueryCacheUpdate( IDatabase $dbw, $days, $window ) {
-               $dbw->startAtomic( __METHOD__ );
-
-               $lockKey = wfWikiID() . '-activeusers';
-               if ( !$dbw->lock( $lockKey, __METHOD__, 1 ) ) {
-                       return false; // exclusive update (avoids duplicate entries)
-               }
-
-               $nowUnix = time();
-               // Get the last-updated timestamp for the cache
-               $cTime = $dbw->selectField( 'querycache_info',
-                       'qci_timestamp',
-                       array( 'qci_type' => 'activeusers' )
-               );
-               $cTimeUnix = $cTime ? wfTimestamp( TS_UNIX, $cTime ) : 1;
-
-               // Pick the date range to fetch from. This is normally from the last
-               // update to till the present time, but has a limited window for sanity.
-               // If the window is limited, multiple runs are need to fully populate it.
-               $sTimestamp = max( $cTimeUnix, $nowUnix - $days * 86400 );
-               $eTimestamp = min( $sTimestamp + $window, $nowUnix );
-
-               // Get all the users active since the last update
-               $res = $dbw->select(
-                       array( 'recentchanges' ),
-                       array( 'rc_user_text', 'lastedittime' => 'MAX(rc_timestamp)' ),
-                       array(
-                               'rc_user > 0', // actual accounts
-                               'rc_type != ' . $dbw->addQuotes( RC_EXTERNAL ), // no wikidata
-                               'rc_log_type IS NULL OR rc_log_type != ' . $dbw->addQuotes( 'newusers' ),
-                               'rc_timestamp >= ' . $dbw->addQuotes( $dbw->timestamp( $sTimestamp ) ),
-                               'rc_timestamp <= ' . $dbw->addQuotes( $dbw->timestamp( $eTimestamp ) )
-                       ),
-                       __METHOD__,
-                       array(
-                               'GROUP BY' => array( 'rc_user_text' ),
-                               'ORDER BY' => 'NULL' // avoid filesort
-                       )
-               );
-               $names = array();
-               foreach ( $res as $row ) {
-                       $names[$row->rc_user_text] = $row->lastedittime;
-               }
-
-               // Rotate out users that have not edited in too long (according to old data set)
-               $dbw->delete( 'querycachetwo',
-                       array(
-                               'qcc_type' => 'activeusers',
-                               'qcc_value < ' . $dbw->addQuotes( $nowUnix - $days * 86400 ) // TS_UNIX
-                       ),
-                       __METHOD__
-               );
-
-               // Find which of the recently active users are already accounted for
-               if ( count( $names ) ) {
-                       $res = $dbw->select( 'querycachetwo',
-                               array( 'user_name' => 'qcc_title' ),
-                               array(
-                                       'qcc_type' => 'activeusers',
-                                       'qcc_namespace' => NS_USER,
-                                       'qcc_title' => array_keys( $names ) ),
-                               __METHOD__,
-                               // See the latest data (ignoring trx snapshot) to avoid
-                               // duplicates if this method was called in a transaction
-                               array( 'LOCK IN SHARE MODE' )
-                       );
-                       foreach ( $res as $row ) {
-                               unset( $names[$row->user_name] );
-                       }
-               }
-
-               // Insert the users that need to be added to the list (which their last edit time
-               if ( count( $names ) ) {
-                       $newRows = array();
-                       foreach ( $names as $name => $lastEditTime ) {
-                               $newRows[] = array(
-                                       'qcc_type' => 'activeusers',
-                                       'qcc_namespace' => NS_USER,
-                                       'qcc_title' => $name,
-                                       'qcc_value' => wfTimestamp( TS_UNIX, $lastEditTime ),
-                                       'qcc_namespacetwo' => 0, // unused
-                                       'qcc_titletwo' => '' // unused
-                               );
-                       }
-                       foreach ( array_chunk( $newRows, 500 ) as $rowBatch ) {
-                               $dbw->insert( 'querycachetwo', $rowBatch, __METHOD__ );
-                               if ( !$dbw->trxLevel() ) {
-                                       wfWaitForSlaves();
-                               }
-                       }
-               }
-
-               // If a transaction was already started, it might have an old
-               // snapshot, so kludge the timestamp range back as needed.
-               $asOfTimestamp = min( $eTimestamp, (int)$dbw->trxTimestamp() );
-
-               // Touch the data freshness timestamp
-               $dbw->replace( 'querycache_info',
-                       array( 'qci_type' ),
-                       array( 'qci_type' => 'activeusers',
-                               'qci_timestamp' => $dbw->timestamp( $asOfTimestamp ) ), // not always $now
-                       __METHOD__
-               );
-
-               $dbw->unlock( $lockKey, __METHOD__ );
-               $dbw->endAtomic( __METHOD__ );
-
-               return $eTimestamp;
-       }
 }
index 5211e30..91eade1 100644 (file)
@@ -29,7 +29,7 @@
  */
 class SpecialAllMessages extends SpecialPage {
        /**
-        * @var AllmessagesTablePager
+        * @var AllMessagesTablePager
         */
        protected $table;
 
@@ -61,7 +61,7 @@ class SpecialAllMessages extends SpecialPage {
                $out->addModuleStyles( 'mediawiki.special' );
                $out->addHelpLink( 'Help:System message' );
 
-               $this->table = new AllmessagesTablePager(
+               $this->table = new AllMessagesTablePager(
                        $this,
                        array(),
                        wfGetLangObj( $request->getVal( 'lang', $par ) )
index c2cd812..6b918e9 100644 (file)
@@ -724,7 +724,6 @@ class ContribsPager extends ReverseChronologicalPager {
                        $limit,
                        $descending
                );
-               $pager = $this;
 
                /*
                 * This hook will allow extensions to add in additional queries, so they can get their data
@@ -749,7 +748,7 @@ class ContribsPager extends ReverseChronologicalPager {
                ) );
                Hooks::run(
                        'ContribsPager::reallyDoQuery',
-                       array( &$data, $pager, $offset, $limit, $descending )
+                       array( &$data, $this, $offset, $limit, $descending )
                );
 
                $result = array();
index 9e4bbbe..387c174 100644 (file)
@@ -88,15 +88,13 @@ class DeletedContribsPager extends IndexPager {
         * @return ResultWrapper
         */
        function reallyDoQuery( $offset, $limit, $descending ) {
-               $pager = $this;
-
                $data = array( parent::reallyDoQuery( $offset, $limit, $descending ) );
 
                // This hook will allow extensions to add in additional queries, nearly
                // identical to ContribsPager::reallyDoQuery.
                Hooks::run(
                        'DeletedContribsPager::reallyDoQuery',
-                       array( &$data, $pager, $offset, $limit, $descending )
+                       array( &$data, $this, $offset, $limit, $descending )
                );
 
                $result = array();
index 14850ff..bfd1717 100644 (file)
@@ -408,8 +408,6 @@ class SpecialEditTags extends UnlistedSpecialPage {
                        $tagsToRemove = array_diff( $existingTags, $tagList );
                }
 
-               //var_dump( array( 'add' => $tagsToAdd, 'remove' => $tagsToRemove ) );
-
                if ( !$tagsToAdd && !$tagsToRemove ) {
                        $status = Status::newFatal( 'tags-edit-none-selected' );
                } else {
@@ -431,7 +429,7 @@ class SpecialEditTags extends UnlistedSpecialPage {
         */
        protected function success() {
                $this->getOutput()->setPageTitle( $this->msg( 'actioncomplete' ) );
-               $this->getOutput()->wrapWikiMsg( "<span class=\"success\">\n$1\n</span>",
+               $this->getOutput()->wrapWikiMsg( "<div class=\"successbox\">\n$1\n</div>",
                        'tags-edit-success' );
                $this->wasSaved = true;
                $this->revList->reloadFromMaster();
@@ -445,7 +443,10 @@ class SpecialEditTags extends UnlistedSpecialPage {
         */
        protected function failure( $status ) {
                $this->getOutput()->setPageTitle( $this->msg( 'actionfailed' ) );
-               $this->getOutput()->addWikiText( $status->getWikiText( 'tags-edit-failure' ) );
+               $this->getOutput()->addWikiText( '<div class="errorbox">' .
+                       $status->getWikiText( 'tags-edit-failure' ) .
+                       '</div>'
+               );
                $this->showForm();
        }
 
index af86964..8124f10 100644 (file)
@@ -34,6 +34,7 @@ class SpecialImport extends SpecialPage {
        private $interwiki = false;
        private $subproject;
        private $fullInterwikiPrefix;
+       private $mapping = 'default';
        private $namespace;
        private $rootpage = '';
        private $frompage = '';
@@ -101,26 +102,33 @@ class SpecialImport extends SpecialPage {
        private function doImport() {
                $isUpload = false;
                $request = $this->getRequest();
-               $this->namespace = $request->getIntOrNull( 'namespace' );
                $this->sourceName = $request->getVal( "source" );
 
                $this->logcomment = $request->getText( 'log-comment' );
                $this->pageLinkDepth = $this->getConfig()->get( 'ExportMaxLinkDepth' ) == 0
                        ? 0
                        : $request->getIntOrNull( 'pagelink-depth' );
-               $this->rootpage = $request->getText( 'rootpage' );
+
+               $this->mapping = $request->getVal( 'mapping' );
+               if ( $this->mapping === 'namespace' ) {
+                       $this->namespace = $request->getIntOrNull( 'namespace' );
+               } elseif ( $this->mapping === 'subpage' ) {
+                       $this->rootpage = $request->getText( 'rootpage' );
+               } else {
+                       $this->mapping = 'default';
+               }
 
                $user = $this->getUser();
                if ( !$user->matchEditToken( $request->getVal( 'editToken' ) ) ) {
                        $source = Status::newFatal( 'import-token-mismatch' );
-               } elseif ( $this->sourceName == 'upload' ) {
+               } elseif ( $this->sourceName === 'upload' ) {
                        $isUpload = true;
                        if ( $user->isAllowed( 'importupload' ) ) {
                                $source = ImportStreamSource::newFromUpload( "xmlimport" );
                        } else {
                                throw new PermissionsError( 'importupload' );
                        }
-               } elseif ( $this->sourceName == "interwiki" ) {
+               } elseif ( $this->sourceName === 'interwiki' ) {
                        if ( !$user->isAllowed( 'import' ) ) {
                                throw new PermissionsError( 'import' );
                        }
@@ -163,8 +171,7 @@ class SpecialImport extends SpecialPage {
                        $importer = new WikiImporter( $source->value, $this->getConfig() );
                        if ( !is_null( $this->namespace ) ) {
                                $importer->setTargetNamespace( $this->namespace );
-                       }
-                       if ( !is_null( $this->rootpage ) ) {
+                       } elseif ( !is_null( $this->rootpage ) ) {
                                $statusRootPage = $importer->setTargetRootPage( $this->rootpage );
                                if ( !$statusRootPage->isGood() ) {
                                        $out->wrapWikiMsg(
@@ -219,6 +226,79 @@ class SpecialImport extends SpecialPage {
                }
        }
 
+       private function getMappingFormPart( $sourceName ) {
+               $isSameSourceAsBefore = ( $this->sourceName === $sourceName );
+               $defaultNamespace = $this->getConfig()->get( 'ImportTargetNamespace' );
+               return "<tr>
+                                       <td>
+                                       </td>
+                                       <td class='mw-input'>" .
+                                       Xml::radioLabel(
+                                               $this->msg( 'import-mapping-default' )->text(),
+                                               'mapping',
+                                               'default',
+                                               // mw-import-mapping-interwiki-default, mw-import-mapping-upload-default
+                                               "mw-import-mapping-$sourceName-default",
+                                               ( $isSameSourceAsBefore ?
+                                                       ( $this->mapping === 'default' ) :
+                                                       is_null( $defaultNamespace ) )
+                                       ) .
+                                       "</td>
+                               </tr>
+                               <tr>
+                                       <td>
+                                       </td>
+                                       <td class='mw-input'>" .
+                                       Xml::radioLabel(
+                                               $this->msg( 'import-mapping-namespace' )->text(),
+                                               'mapping',
+                                               'namespace',
+                                               // mw-import-mapping-interwiki-namespace, mw-import-mapping-upload-namespace
+                                               "mw-import-mapping-$sourceName-namespace",
+                                               ( $isSameSourceAsBefore ?
+                                                       ( $this->mapping === 'namespace' ) :
+                                                       !is_null( $defaultNamespace ) )
+                                       ) . ' ' .
+                                       Html::namespaceSelector(
+                                               array(
+                                                       'selected' => ( $isSameSourceAsBefore ?
+                                                               $this->namespace :
+                                                               ( $defaultNamespace || '' ) ),
+                                               ), array(
+                                                       'name' => "namespace",
+                                                       // mw-import-namespace-interwiki, mw-import-namespace-upload
+                                                       'id' => "mw-import-namespace-$sourceName",
+                                                       'class' => 'namespaceselector',
+                                               )
+                                       ) .
+                                       "</td>
+                               </tr>
+                               <tr>
+                                       <td>
+                                       </td>
+                                       <td class='mw-input'>" .
+                                       Xml::radioLabel(
+                                               $this->msg( 'import-mapping-subpage' )->text(),
+                                               'mapping',
+                                               'subpage',
+                                               // mw-import-mapping-interwiki-subpage, mw-import-mapping-upload-subpage
+                                               "mw-import-mapping-$sourceName-subpage",
+                                               ( $isSameSourceAsBefore ? ( $this->mapping === 'subpage' ) : '' )
+                                       ) . ' ' .
+                                       Xml::input( 'rootpage', 50,
+                                               ( $isSameSourceAsBefore ? $this->rootpage : '' ),
+                                               array(
+                                                       // Should be "mw-import-rootpage-...", but we keep this inaccurate
+                                                       // ID for legacy reasons
+                                                       // mw-interwiki-rootpage-interwiki, mw-interwiki-rootpage-upload
+                                                       'id' => "mw-interwiki-rootpage-$sourceName",
+                                                       'type' => 'text'
+                                               )
+                                       ) . ' ' .
+                                       "</td>
+                               </tr>";
+       }
+
        private function showForm() {
                $action = $this->getPageTitle()->getLocalURL( array( 'action' => 'submit' ) );
                $user = $this->getUser();
@@ -226,6 +306,7 @@ class SpecialImport extends SpecialPage {
                $importSources = $this->getConfig()->get( 'ImportSources' );
 
                if ( $user->isAllowed( 'importupload' ) ) {
+                       $mappingSelection = $this->getMappingFormPart( 'upload' );
                        $out->addHTML(
                                Xml::fieldset( $this->msg( 'import-upload' )->text() ) .
                                        Xml::openElement(
@@ -255,22 +336,11 @@ class SpecialImport extends SpecialPage {
                                        "</td>
                                        <td class='mw-input'>" .
                                        Xml::input( 'log-comment', 50,
-                                               ( $this->sourceName == 'upload' ? $this->logcomment : '' ),
+                                               ( $this->sourceName === 'upload' ? $this->logcomment : '' ),
                                                array( 'id' => 'mw-import-comment', 'type' => 'text' ) ) . ' ' .
                                        "</td>
                                </tr>
-                               <tr>
-                                       <td class='mw-label'>" .
-                                       Xml::label(
-                                               $this->msg( 'import-interwiki-rootpage' )->text(),
-                                               'mw-interwiki-rootpage-upload'
-                                       ) .
-                                       "</td>
-                                       <td class='mw-input'>" .
-                                       Xml::input( 'rootpage', 50, $this->rootpage,
-                                               array( 'id' => 'mw-interwiki-rootpage-upload', 'type' => 'text' ) ) . ' ' .
-                                       "</td>
-                               </tr>
+                               $mappingSelection
                                <tr>
                                        <td></td>
                                        <td class='mw-submit'>" .
@@ -301,6 +371,7 @@ class SpecialImport extends SpecialPage {
                                        "</td>
                                </tr>";
                        }
+                       $mappingSelection = $this->getMappingFormPart( 'interwiki' );
 
                        $out->addHTML(
                                Xml::fieldset( $this->msg( 'importinterwiki' )->text() ) .
@@ -413,45 +484,17 @@ class SpecialImport extends SpecialPage {
                                        "</td>
                                </tr>
                                $importDepth
-                               <tr>
-                                       <td class='mw-label'>" .
-                                       Xml::label( $this->msg( 'import-interwiki-namespace' )->text(), 'namespace' ) .
-                                       "</td>
-                                       <td class='mw-input'>" .
-                                       Html::namespaceSelector(
-                                               array(
-                                                       'selected' => $this->namespace,
-                                                       'all' => '',
-                                               ), array(
-                                                       'name' => 'namespace',
-                                                       'id' => 'namespace',
-                                                       'class' => 'namespaceselector',
-                                               )
-                                       ) .
-                                       "</td>
-                               </tr>
                                <tr>
                                        <td class='mw-label'>" .
                                        Xml::label( $this->msg( 'import-comment' )->text(), 'mw-interwiki-comment' ) .
                                        "</td>
                                        <td class='mw-input'>" .
                                        Xml::input( 'log-comment', 50,
-                                               ( $this->sourceName == 'interwiki' ? $this->logcomment : '' ),
+                                               ( $this->sourceName === 'interwiki' ? $this->logcomment : '' ),
                                                array( 'id' => 'mw-interwiki-comment', 'type' => 'text' ) ) . ' ' .
                                        "</td>
                                </tr>
-                               <tr>
-                                       <td class='mw-label'>" .
-                                       Xml::label(
-                                               $this->msg( 'import-interwiki-rootpage' )->text(),
-                                               'mw-interwiki-rootpage-interwiki'
-                                       ) .
-                                       "</td>
-                                       <td class='mw-input'>" .
-                                       Xml::input( 'rootpage', 50, $this->rootpage,
-                                               array( 'id' => 'mw-interwiki-rootpage-interwiki', 'type' => 'text' ) ) . ' ' .
-                                       "</td>
-                               </tr>
+                               $mappingSelection
                                <tr>
                                        <td>
                                        </td>
index 75ff8f3..0c02628 100644 (file)
@@ -121,43 +121,39 @@ class LinkSearchPage extends QueryPage {
                        '<nowiki>' . $this->getLanguage()->commaList( $protocols_list ) . '</nowiki>',
                        count( $protocols_list )
                );
-               $s = Html::openElement(
-                       'form',
-                       array( 'id' => 'mw-linksearch-form', 'method' => 'get', 'action' => wfScript() )
-               ) . "\n" .
-                       Html::hidden( 'title', $this->getPageTitle()->getPrefixedDBkey() ) . "\n" .
-                       Html::openElement( 'fieldset' ) . "\n" .
-                       Html::element( 'legend', array(), $this->msg( 'linksearch' )->text() ) . "\n" .
-                       Xml::inputLabel(
-                               $this->msg( 'linksearch-pat' )->text(),
-                               'target',
-                               'target',
-                               50,
-                               $target,
-                               array(
-                                       // URLs are always ltr
-                                       'dir' => 'ltr',
-                               )
-                       ) . "\n";
-
+               $fields = array(
+                       'target' => array(
+                               'type' => 'text',
+                               'name' => 'target',
+                               'id' => 'target',
+                               'size' => 50,
+                               'label-message' => 'linksearch-pat',
+                               'default' => $target,
+                               'dir' => 'ltr',
+                       )
+               );
                if ( !$this->getConfig()->get( 'MiserMode' ) ) {
-                       $s .= Html::namespaceSelector(
-                               array(
-                                       'selected' => $namespace,
-                                       'all' => '',
-                                       'label' => $this->msg( 'linksearch-ns' )->text()
-                               ), array(
+                       $fields += array(
+                               'namespace' => array(
+                                       'class' => 'HTMLSelectNamespace',
                                        'name' => 'namespace',
+                                       'label-message' => 'linksearch-ns',
+                                       'default' => $namespace,
                                        'id' => 'namespace',
-                                       'class' => 'namespaceselector',
-                               )
+                                       'cssclass' => 'namespaceselector',
+                               ),
                        );
                }
-
-               $s .= Xml::submitButton( $this->msg( 'linksearch-ok' )->text() ) . "\n" .
-                       Html::closeElement( 'fieldset' ) . "\n" .
-                       Html::closeElement( 'form' ) . "\n";
-               $out->addHTML( $s );
+               $hiddenFields = array(
+                       'title' => $this->getPageTitle()->getPrefixedDBkey(),
+               );
+               $htmlForm = HTMLForm::factory( 'inline', $fields, $this->getContext() );
+               $htmlForm->addHiddenFields( $hiddenFields );
+               $htmlForm->setSubmitTextMsg( 'linksearch-ok' );
+               $htmlForm->setWrapperLegendMsg( 'linksearch' );
+               $htmlForm->setAction( wfScript() );
+               $htmlForm->setMethod( 'get' );
+               $htmlForm->prepareForm()->displayForm( false );
 
                if ( $target != '' ) {
                        $this->setParams( array(
index f16e5ba..e44ce5f 100644 (file)
@@ -165,7 +165,7 @@ class SpecialLog extends SpecialPage {
                $loglist = new LogEventsList(
                        $this->getContext(),
                        null,
-                       LogEventsList::USE_REVDEL_CHECKBOXES
+                       LogEventsList::USE_CHECKBOXES
                );
                $pager = new LogPager(
                        $loglist,
@@ -218,10 +218,10 @@ class SpecialLog extends SpecialPage {
        private function getActionButtons( $formcontents ) {
                $user = $this->getUser();
                $canRevDelete = $user->isAllowedAll( 'deletedhistory', 'deletelogentry' );
-               $canModifyTags = $user->isAllowed( 'changetags' );
+               $showTagEditUI = ChangeTags::showTagEditingUI( $user );
                # If the user doesn't have the ability to delete log entries nor edit tags,
                # don't bother showing them the button(s).
-               if ( !$canRevDelete && !$canModifyTags ) {
+               if ( !$canRevDelete && !$showTagEditUI ) {
                        return $formcontents;
                }
 
@@ -246,7 +246,7 @@ class SpecialLog extends SpecialPage {
                                $this->msg( 'showhideselectedlogentries' )->text()
                        ) . "\n";
                }
-               if ( $canModifyTags ) {
+               if ( $showTagEditUI ) {
                        $buttons .= Html::element(
                                'button',
                                array(
index 368d491..b6cf8e4 100644 (file)
@@ -152,7 +152,7 @@ class SpecialMergeHistory extends SpecialPage {
 
                if ( count( $errors ) ) {
                        $this->showMergeForm();
-                       $out->addHTML( implode( "\n", $errors ) );
+                       $this->getOutput()->addHTML( implode( "\n", $errors ) );
                } else {
                        $this->showHistory();
                }
index 1387988..7dc1158 100644 (file)
@@ -233,14 +233,21 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
                        return false;
                }
 
-               // rc_new is not an ENUM, but adding a redundant rc_new IN (0,1) gives mysql enough
-               // knowledge to use an index merge if it wants (it may use some other index though).
+               // array_merge() is used intentionally here so that hooks can, should
+               // they so desire, override the ORDER BY / LIMIT condition(s); prior to
+               // MediaWiki 1.26 this used to use the plus operator instead, which meant
+               // that extensions weren't able to change these conditions
+               $query_options = array_merge( array(
+                       'ORDER BY' => 'rc_timestamp DESC',
+                       'LIMIT' => $opts['limit'] ), $query_options );
                $rows = $dbr->select(
                        $tables,
                        $fields,
+                       // rc_new is not an ENUM, but adding a redundant rc_new IN (0,1) gives mysql enough
+                       // knowledge to use an index merge if it wants (it may use some other index though).
                        $conds + array( 'rc_new' => array( 0, 1 ) ),
                        __METHOD__,
-                       array( 'ORDER BY' => 'rc_timestamp DESC', 'LIMIT' => $opts['limit'] ) + $query_options,
+                       $query_options,
                        $join_conds
                );
 
index bdfe911..62025e7 100644 (file)
@@ -606,7 +606,7 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
                // Messages: revdelete-success, logdelete-success
                $this->getOutput()->setPageTitle( $this->msg( 'actioncomplete' ) );
                $this->getOutput()->wrapWikiMsg(
-                       "<span class=\"success\">\n$1\n</span>",
+                       "<div class=\"successbox\">\n$1\n</div>",
                        $this->typeLabels['success']
                );
                $this->wasSaved = true;
@@ -621,7 +621,10 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
        protected function failure( $status ) {
                // Messages: revdelete-failure, logdelete-failure
                $this->getOutput()->setPageTitle( $this->msg( 'actionfailed' ) );
-               $this->getOutput()->addWikiText( $status->getWikiText( $this->typeLabels['failure'] ) );
+               $this->getOutput()->addWikiText( '<div class="errorbox">' .
+                       $status->getWikiText( $this->typeLabels['failure'] ) .
+                       '</div>'
+               );
                $this->showForm();
        }
 
index 608d62e..ef50fed 100644 (file)
@@ -47,7 +47,10 @@ class SpecialSearch extends SpecialPage {
        /** @var array For links */
        protected $extraParams = array();
 
-       /** @var string No idea, apparently used by some other classes */
+       /**
+        * @var string The prefix url parameter. Set on the searcher and the
+        * is expected to treat it as prefix filter on titles.
+        */
        protected $mPrefix;
 
        /**
index 10edbcf..c4da642 100644 (file)
@@ -194,13 +194,13 @@ class LoginForm extends SpecialPage {
                        && in_array( $entryError->getKey(), self::getValidErrorMessages() )
                ) {
                        $this->mEntryErrorType = 'error';
-                       $this->mEntryError = $entryError->rawParams( $loginreqlink )->escaped();
+                       $this->mEntryError = $entryError->rawParams( $loginreqlink )->parse();
 
                } elseif ( $entryWarning->exists()
                        && in_array( $entryWarning->getKey(), self::getValidErrorMessages() )
                ) {
                        $this->mEntryErrorType = 'warning';
-                       $this->mEntryError = $entryWarning->rawParams( $loginreqlink )->escaped();
+                       $this->mEntryError = $entryWarning->rawParams( $loginreqlink )->parse();
                }
 
                if ( $wgEnableEmail ) {
index 9a1c5e5..620c736 100644 (file)
@@ -842,7 +842,7 @@ class SpecialVersion extends SpecialPage {
                // Finally! Create the table
                $html = Html::openElement( 'tr', array(
                                'class' => 'mw-version-ext',
-                               'id' => "mw-version-ext-{$extension['name']}"
+                               'id' => Sanitizer::escapeId( 'mw-version-ext-' . $extension['name'] )
                        )
                );
 
index a9e58b3..fb89e4f 100644 (file)
@@ -1,7 +1,5 @@
 <?php
 /**
- * Representation of a page title within %MediaWiki.
- *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
  * http://www.gnu.org/copyleft/gpl.html
  *
  * @file
- * @license GPL 2+
- * @author Daniel Kinzler
  */
 
 /**
  * MalformedTitleException is thrown when a TitleParser is unable to parse a title string.
- *
- * @license GPL 2+
- * @author Daniel Kinzler
  * @since 1.23
  */
 class MalformedTitleException extends Exception {
+       private $titleText = null;
+       private $errorMessage = null;
+       private $errorMessageParameters = array();
+
+       /**
+        * @param string $errorMessage Localisation message describing the error (since MW 1.26)
+        * @param string $titleText The invalid title text (since MW 1.26)
+        * @param string[] $errorMessageParameters Additional parameters for the error message. $titleText will be appended if it's not null. (since MW 1.26)
+        */
+       public function __construct( $errorMessage = null, $titleText = null, $errorMessageParameters = array() ) {
+               $this->errorMessage = $errorMessage;
+               $this->titleText = $titleText;
+               if ( $titleText !== null ) {
+                       $errorMessageParameters[] = $titleText;
+               }
+               $this->errorMessageParameters = $errorMessageParameters;
+
+               // Supply something useful for Exception::getMessage() to return.
+               $enMsg = wfMessage( $errorMessage, $errorMessageParameters );
+               $enMsg->inLanguage( 'en' )->useDatabase( false );
+               parent::__construct( $enMsg->text() );
+       }
+
+       /**
+        * @since 1.26
+        * @return string|null
+        */
+       public function getTitleText() {
+               return $this->titleText;
+       }
+
+       /**
+        * @since 1.26
+        * @return string|null
+        */
+       public function getErrorMessage() {
+               return $this->errorMessage;
+       }
+
+       /**
+        * @since 1.26
+        * @return string[]
+        */
+       public function getErrorMessageParameters() {
+               return $this->errorMessageParameters;
+       }
 }
index 20034b7..98cec59 100644 (file)
@@ -137,12 +137,12 @@ class MediaWikiTitleCodec implements TitleFormatter, TitleParser {
 
                // Interwiki links are not supported by TitleValue
                if ( $parts['interwiki'] !== '' ) {
-                       throw new MalformedTitleException( 'Title must not contain an interwiki prefix: ' . $text );
+                       throw new MalformedTitleException( 'title-invalid-interwiki', $text );
                }
 
                // Relative fragment links are not supported by TitleValue
                if ( $parts['dbkey'] === '' ) {
-                       throw new MalformedTitleException( 'Title must not be empty: ' . $text );
+                       throw new MalformedTitleException( 'title-invalid-empty', $text );
                }
 
                return new TitleValue( $parts['namespace'], $parts['dbkey'], $parts['fragment'] );
@@ -232,7 +232,7 @@ class MediaWikiTitleCodec implements TitleFormatter, TitleParser {
 
                if ( strpos( $dbkey, UtfNormal\Constants::UTF8_REPLACEMENT ) !== false ) {
                        # Contained illegal UTF-8 sequences or forbidden Unicode chars.
-                       throw new MalformedTitleException( 'Bad UTF-8 sequences found in title: ' . $text );
+                       throw new MalformedTitleException( 'title-invalid-utf8', $text );
                }
 
                $parts['dbkey'] = $dbkey;
@@ -246,7 +246,7 @@ class MediaWikiTitleCodec implements TitleFormatter, TitleParser {
                }
 
                if ( $dbkey == '' ) {
-                       throw new MalformedTitleException( 'Empty title: ' . $text );
+                       throw new MalformedTitleException( 'title-invalid-empty', $text );
                }
 
                # Namespace or interwiki prefix
@@ -263,11 +263,11 @@ class MediaWikiTitleCodec implements TitleFormatter, TitleParser {
                                        if ( $ns == NS_TALK && preg_match( $prefixRegexp, $dbkey, $x ) ) {
                                                if ( $this->language->getNsIndex( $x[1] ) ) {
                                                        # Disallow Talk:File:x type titles...
-                                                       throw new MalformedTitleException( 'Bad namespace prefix: ' . $text );
+                                                       throw new MalformedTitleException( 'title-invalid-talk-namespace', $text );
                                                } elseif ( Interwiki::isValidInterwiki( $x[1] ) ) {
                                                        //TODO: get rid of global state!
                                                        # Disallow Talk:Interwiki:x type titles...
-                                                       throw new MalformedTitleException( 'Interwiki prefix found in title: ' . $text );
+                                                       throw new MalformedTitleException( 'title-invalid-talk-namespace', $text );
                                                }
                                        }
                                } elseif ( Interwiki::isValidInterwiki( $p ) ) {
@@ -324,8 +324,9 @@ class MediaWikiTitleCodec implements TitleFormatter, TitleParser {
 
                # Reject illegal characters.
                $rxTc = self::getTitleInvalidRegex();
-               if ( preg_match( $rxTc, $dbkey ) ) {
-                       throw new MalformedTitleException( 'Illegal characters found in title: ' . $text );
+               $matches = array();
+               if ( preg_match( $rxTc, $dbkey, $matches ) ) {
+                       throw new MalformedTitleException( 'title-invalid-characters', $text, array( $matches[0] ) );
                }
 
                # Pages with "/./" or "/../" appearing in the URLs will often be un-
@@ -343,23 +344,21 @@ class MediaWikiTitleCodec implements TitleFormatter, TitleParser {
                                substr( $dbkey, -3 ) == '/..'
                        )
                ) {
-                       throw new MalformedTitleException( 'Bad title: ' . $text );
+                       throw new MalformedTitleException( 'title-invalid-relative', $text );
                }
 
                # Magic tilde sequences? Nu-uh!
                if ( strpos( $dbkey, '~~~' ) !== false ) {
-                       throw new MalformedTitleException( 'Bad title: ' . $text );
+                       throw new MalformedTitleException( 'title-invalid-magic-tilde', $text );
                }
 
                # Limit the size of titles to 255 bytes. This is typically the size of the
                # underlying database field. We make an exception for special pages, which
                # don't need to be stored in the database, and may edge over 255 bytes due
                # to subpage syntax for long titles, e.g. [[Special:Block/Long name]]
-               if (
-                       ( $parts['namespace'] != NS_SPECIAL && strlen( $dbkey ) > 255 )
-                       || strlen( $dbkey ) > 512
-               ) {
-                       throw new MalformedTitleException( 'Title too long: ' . substr( $dbkey, 0, 255 ) . '...' );
+               $maxLength = ( $parts['namespace'] != NS_SPECIAL ) ? 255 : 512;
+               if ( strlen( $dbkey ) > $maxLength ) {
+                       throw new MalformedTitleException( 'title-invalid-too-long', $text, array( $maxLength ) );
                }
 
                # Normally, all wiki links are forced to have an initial capital letter so [[foo]]
@@ -374,7 +373,7 @@ class MediaWikiTitleCodec implements TitleFormatter, TitleParser {
                # self-links with a fragment identifier.
                if ( $dbkey == '' && $parts['interwiki'] === '' ) {
                        if ( $parts['namespace'] != NS_MAIN ) {
-                               throw new MalformedTitleException( 'Empty title: ' . $text );
+                               throw new MalformedTitleException( 'title-invalid-empty', $text );
                        }
                }
 
@@ -390,7 +389,7 @@ class MediaWikiTitleCodec implements TitleFormatter, TitleParser {
 
                // Any remaining initial :s are illegal.
                if ( $dbkey !== '' && ':' == $dbkey[0] ) {
-                       throw new MalformedTitleException( 'Title must not start with a colon: ' . $text );
+                       throw new MalformedTitleException( 'title-invalid-leading-colon', $text );
                }
 
                # Fill fields
index 5cac347..a0f3b6f 100644 (file)
@@ -21,6 +21,7 @@
  * @license GPL 2+
  * @author Daniel Kinzler
  */
+use Wikimedia\Assert\Assert;
 
 /**
  * Represents a page (or page fragment) title within %MediaWiki.
@@ -67,26 +68,13 @@ class TitleValue {
         * @throws InvalidArgumentException
         */
        public function __construct( $namespace, $dbkey, $fragment = '' ) {
-               if ( !is_int( $namespace ) ) {
-                       throw new InvalidArgumentException( '$namespace must be an integer' );
-               }
-
-               if ( !is_string( $dbkey ) ) {
-                       throw new InvalidArgumentException( '$dbkey must be a string' );
-               }
+               Assert::parameterType( 'integer', $namespace, '$namespace' );
+               Assert::parameterType( 'string', $dbkey, '$dbkey' );
+               Assert::parameterType( 'string', $fragment, '$fragment' );
 
                // Sanity check, no full validation or normalization applied here!
-               if ( preg_match( '/^_|[ \r\n\t]|_$/', $dbkey ) ) {
-                       throw new InvalidArgumentException( '$dbkey must be a valid DB key: ' . $dbkey );
-               }
-
-               if ( !is_string( $fragment ) ) {
-                       throw new InvalidArgumentException( '$fragment must be a string' );
-               }
-
-               if ( $dbkey === '' ) {
-                       throw new InvalidArgumentException( '$dbkey must not be empty' );
-               }
+               Assert::parameter( !preg_match( '/^_|[ \r\n\t]|_$/', $dbkey ), '$dbkey', 'invalid DB key' );
+               Assert::parameter( $dbkey !== '', '$dbkey', 'should not be empty' );
 
                $this->namespace = $namespace;
                $this->dbkey = $dbkey;
index 9241587..cb32357 100644 (file)
@@ -20,6 +20,7 @@
  * @file
  * @author Aaron Schulz
  */
+use Wikimedia\Assert\Assert;
 
 /**
  * Class for getting statistically unique IDs
@@ -107,9 +108,10 @@ class UIDGenerator {
         * @throws MWException
         */
        public static function newTimestampedUID88( $base = 10 ) {
-               if ( !is_integer( $base ) || $base > 36 || $base < 2 ) {
-                       throw new MWException( "Base must an integer be between 2 and 36" );
-               }
+               Assert::parameterType( 'integer', $base, '$base' );
+               Assert::parameter( $base <= 36, '$base', 'must be <= 36' );
+               Assert::parameter( $base >= 2, '$base', 'must be >= 2' );
+
                $gen = self::singleton();
                $time = $gen->getTimestampAndDelay( 'lockFile88', 1, 1024 );
 
@@ -152,9 +154,10 @@ class UIDGenerator {
         * @throws MWException
         */
        public static function newTimestampedUID128( $base = 10 ) {
-               if ( !is_integer( $base ) || $base > 36 || $base < 2 ) {
-                       throw new MWException( "Base must be an integer between 2 and 36" );
-               }
+               Assert::parameterType( 'integer', $base, '$base' );
+               Assert::parameter( $base <= 36, '$base', 'must be <= 36' );
+               Assert::parameter( $base >= 2, '$base', 'must be >= 2' );
+
                $gen = self::singleton();
                $time = $gen->getTimestampAndDelay( 'lockFile128', 16384, 1048576 );
 
index b2ffe50..2a65c71 100644 (file)
@@ -21,4 +21,6 @@
  * @file
  */
 
+define( 'MW_ENTRY_PHP5', true );
+
 require './index.php';
index d4df1ab..f7c9f65 100644 (file)
@@ -41,7 +41,9 @@
        'aa' => 'Qafár af',    # Afar
        'ab' => 'Аҧсшәа', # Abkhaz
        'ace' => 'Acèh',       # Aceh
-       'aeb' => 'تونسي',  # Tunisian Arabic
+       'aeb' => 'تونسي/Tûnsî',  # Tunisian Arabic (multiple scripts - defaults to Arabic)
+       'aeb-arab' => 'تونسي',     # Tunisian Arabic (Arabic Script)
+       'aeb-latn' => 'Tûnsî',        # Tunisian Arabic (Latin Script)
        'af' => 'Afrikaans',    # Afrikaans
        'ak' => 'Akan',         # Akan
        'aln' => 'Gegë',       # Gheg Albanian
@@ -60,6 +62,7 @@
        'ast' => 'asturianu',   # Asturian
        'av' => 'авар',     # Avar
        'avk' => 'Kotava', # Kotava
+       'awa' => 'अवधी',        # Awadhi
        'ay' => 'Aymar aru',    # Aymara
        'az' => 'azərbaycanca',        # Azerbaijani
        'azb' => 'تورکجه',        # South Azerbaijani
@@ -75,7 +78,6 @@
        'be-x-old' => "беларуская (тарашкевіца)\xE2\x80\x8E",      # (be-tarask compat)
        'bg' => 'български',   # Bulgarian
        'bgn' => 'بلوچی رخشانی', # Western Balochi
-       'bh' => 'भोजपुरी',        # Bihari macro language. Falls back to Bhojpuri (bho)
        'bho' => 'भोजपुरी',       # Bhojpuri
        'bi' => 'Bislama',              # Bislama
        'bjn' => 'Bahasa Banjar',       # Banjarese
        'lmo' => 'lumbaart',    # Lombard
        'ln' => 'lingála',             # Lingala
        'lo' => 'ລາວ',    # Laotian
-       'lrc' => 'لوری',    # Northern Luri
+       'lrc' => 'لوری مینجایی',     # Northern Luri
        'loz' => 'Silozi', # Lozi
        'lt' => 'lietuvių',    # Lithuanian
        'ltg' => 'latgaļu',    # Latgalian
diff --git a/languages/i18n/aeb-arab.json b/languages/i18n/aeb-arab.json
new file mode 100644 (file)
index 0000000..721b6d6
--- /dev/null
@@ -0,0 +1,652 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Abanima",
+                       "Csisc",
+                       "Kuwaity26",
+                       "Malekbr",
+                       "아라",
+                       "Aħmedbaɛl",
+                       "GeekEmad"
+               ]
+       },
+       "tog-usenewrc": ")جمّع التعديلات حسب الصفحة في أحدث التغييرات وقائمة المراقبة (يتطلب جافاسكربت",
+       "tog-showtoolbar": "أظهر شريط التحرير (يتطلب جافاسكربت)",
+       "tog-editondblclick": "عدل الصفحات عند الضغط المزدوج (جافاسكربت)",
+       "tog-editsectiononrightclick": "فعل تعديل الأقسام بواسطة كبسة الفأرة اليمين على عناوين الأقسام (جافاسكريبت)",
+       "tog-fancysig": "عامل التوقيع كنص ويكي (بدون وصلة أوتوماتيكية)",
+       "tog-uselivepreview": "استخدم الاستعراض السريع (جافاسكريبت) (تجريبي)",
+       "tog-forceeditsummary": "نبهني عند إدخال ملخص تعديل فارغ",
+       "tog-watchlisthideown": "أخف تعديلاتي من قائمة المراقبة",
+       "tog-watchlisthidebots": "أخف تعديلات البوت من قائمة المراقبة",
+       "tog-watchlisthideminor": "أخف التعديلات الطفيفة من قائمة المراقبة",
+       "tog-watchlisthideliu": "أخف تعديلات المستخدمين المسجلين من قائمة المراقبة",
+       "tog-watchlisthideanons": "أخف تعديلات المستخدمين المجهولين من قائمة المراقبة",
+       "tog-watchlisthidepatrolled": "أخف التعديلات المراجعة من قائمة المراقبة",
+       "tog-ccmeonemails": "أرسل لي نسخا من رسائل البريد الإلكتروني التي أرسلها للمستخدمين الآخرين",
+       "tog-diffonly": "لا تعرض محتوى الصفحة أسفل الفروقات",
+       "tog-showhiddencats": "أظهر التصنيفات المخفية",
+       "tog-norollbackdiff": "أزل الفرق بعد القيام باسترجاع",
+       "underline-default": "تبعا لإعدادات المتصفح",
+       "editfont-style": "نمط خط منطقة التحرير:",
+       "editfont-default": "تبعا لإعدادات المتصفح",
+       "editfont-monospace": "خط ثابت العرض",
+       "editfont-sansserif": "خط بلا زوائد",
+       "editfont-serif": "خط بزوائد",
+       "category_header": "صفحات تصنيف \"$1\"",
+       "subcategories": "التصنيفات الفرعية",
+       "category-media-header": "الوسائط في التصنيف \"$1\"",
+       "category-empty": "''هذا التصنيف لا يحتوي حاليا على صفحات أو وسائط.''",
+       "hidden-category-category": "تصنيفات مخفية",
+       "category-subcat-count": "{{PLURAL:$2|لا تصانيف فرعية في هذا التصنيف|هذا التصنيف فيه التصنيف الفرعي التالي فقط.|هذا التصنيف فيه {{PLURAL:$1||هذا التصنيف الفرعي|هذين التصنيفين الفرعيين|هذه ال$1 تصانيف الفرعية|هذه ال$1 تصنيفا فرعيا|هذه ال$1 تصنيف فرعي}}، من إجمالي $2.}}",
+       "category-subcat-count-limited": "هذا التصنيف فيه {{PLURAL:$1||التصنيف الفرعي التالي|التصنيفين الفرعيين التاليين|$1 تصانيف فرعية تالية|$1 تصنيفا فرعيا تاليا|$1 تصنيف فرعي تالي}}.",
+       "category-article-count": "{{PLURAL:$2|لا يحتوي هذا التصنيف أي صفحات.|هذا التصنيف يحتوي على الصفحة التالية فقط.|{{PLURAL:$1||الصفحة التالية|الصفحتان التاليتان|ال$1 صفحات التالية|ال$1 صفحة التالية|ال$1 صفحة التالية}} في هذا التصنيف، من إجمالي $2.}}",
+       "category-article-count-limited": "{{PLURAL:$1||الصفحة التالية|الصفحتان التاليتان|ال$1 صفحات التالية|ال$1 صفحة التالية|ال$1 صفحة التالية}} في التصنيف الحالي.",
+       "category-file-count": "{{PLURAL:$2|لا يحتوي هذا التصنيف أي صفحات.|هذا التصنيف يحتوي على الصفحة التالية فقط.|{{PLURAL:$1||الصفحة التالية|الصفحتان التاليتان|ال$1 صفحات التالية|ال$1 صفحة التالية|ال$1 صفحة التالية}} في هذا التصنيف، من إجمالي $2.}}",
+       "category-file-count-limited": "{{PLURAL:$1|الملف التالي|الملفان التاليان|ال$1 ملفات التالية|ال$1 ملفًا تاليًا|ال$1 ملف تالٍ}} في التصنيف الحالي.",
+       "listingcontinuesabbrev": "متابعة",
+       "index-category": "صفحات مفهرسة",
+       "noindex-category": "صفحات غير مفهرسة",
+       "broken-file-category": "صفحات تحتوي وصلات ملفات معطوبة",
+       "about": "عن",
+       "article": "صفحة محتوى",
+       "newwindow": "(تفتح في نافذة جديدة)",
+       "mypage": "صفحتي",
+       "mytalk": "نقاشي",
+       "copyright": "المحتوى متوفر تحت $1.",
+       "badaccess": "خطأ في السماح",
+       "badaccess-group0": "ليس من المسموح لك تنفيذ الفعل الذي طلبته.",
+       "badaccess-groups": "الفعل الذي طلبته مقصور على المستخدمين في {{PLURAL:$2||مجموعة|واحدة من مجموعتي|واحدة من مجموعات}}: $1.",
+       "versionrequired": "تلزم نسخة $1 من ميدياويكي",
+       "versionrequiredtext": "تلزم النسخة $1 من ميدياويكي لاستعمال هذه الصفحة. انظر [[Special:Version|صفحة النسخة]]",
+       "youhavenewmessages": "توجد لديك $1 ($2).",
+       "youhavenewmessagesmulti": "لديك رسائل جديدة على $1",
+       "restorelink": "{{PLURAL:$1|$1 تعديل محذوف|تعديلا واحدا محذوفا|تعديلين محذوفين|$1 تعديلات محذوفة|$1 تعديلا محذوفا|$1 تعديلا محذوفا}}",
+       "feedlinks": "التغذية:",
+       "feed-invalid": "نوع اشتراك التلقيم غير صحيح.",
+       "feed-unavailable": "التلقيمات غير متوفرة",
+       "site-rss-feed": "$1 تلقيم أر إس إس",
+       "page-rss-feed": "\"$1\" تلقيم أر إس إس",
+       "page-atom-feed": "$1 تلقيم أتوم",
+       "sort-descending": "ترتيب تنازلي",
+       "sort-ascending": "ترتيب تصاعدي",
+       "nstab-user": "صفحة مستخدم",
+       "nstab-media": "صفحة وسيط",
+       "nstab-project": "صفحة مشروع",
+       "nstab-template": "قالب",
+       "nstab-help": "صفحة مساعدة",
+       "nstab-category": "تصنيف",
+       "nosuchaction": "لا يوجد فعل كهذا",
+       "nosuchactiontext": "الفعل المحدد بواسطة المسار غير صحيح.\nربما تكون قد كتبت المسار بطريقة غير صحيحة، أو اتبعت وصلة غير صحيحة.\nهذا ربما يشير أيضا إلى علة في {{SITENAME}}.",
+       "nosuchspecialpage": "لا توجد صفحة خاصة بهذا الاسم",
+       "nospecialpagetext": "<strong>لقد طلبت صفحة خاصة غير صحيحة.</strong>\n\nقائمة بالصفحات الخاصة الصحيحة يمكن إيجادها في [[Special:SpecialPages|{{int:specialpages}}]].",
+       "databaseerror": "خطأ في قاعدة البيانات",
+       "laggedslavemode": "'''تحذير:''' الصفحة قد لا تحتوي على أحدث التحديثات.",
+       "readonly": "قاعدة البيانات مغلقة",
+       "enterlockreason": "أدخل سببا للغلق، متضمنا تقديرا لوقت رفع الغلق",
+       "readonlytext": "قاعدة البيانات مغلقة حاليا أمام المدخلات الجديدة والتعديلات الأخرى، السبب غالبا ما يكون الصيانة، وستعود قاعدة البيانات للوضع الطبيعي قريبا.\n\nالإداري الذي أغلق قاعدة البيانات أعطى التفسير التالي: $1",
+       "missingarticle-rev": "(رقم المراجعة: $1)",
+       "missingarticle-diff": "(فرق: $1، $2)",
+       "readonly_lag": "تم إغلاق قاعدة البيانات تلقائيا حتى تستطيع الخواديم التابعة ملاحقة الخادوم الرئيسي",
+       "internalerror": "خطأ داخلي",
+       "internalerror_info": "خطأ داخلي: $1",
+       "filecopyerror": "لم يمكن نسخ الملف \"$1\" إلى \"$2\".",
+       "filerenameerror": "لم يمكن إعادة تسمية الملف \"$1\" إلى \"$2\".",
+       "filedeleteerror": "لم يمكن حذف الملف \"$1\".",
+       "directorycreateerror": "لم يمكن إنشاء المجلد \"$1\".",
+       "filenotfound": "لم يمكن إيجاد الملف \"$1\".",
+       "unexpected": "قيمة غير متوقعة: \"$1\"=\"$2\".",
+       "formerror": "خطأ: لم يمكن تنفيذ الاستمارة",
+       "badarticleerror": "لا يمكن إجراء هذا الفعل على هذه الصفحة.",
+       "cannotdelete": "تعذر حذف الصفحة أو الملف \"$1\".\nربما حذفها شحص آخر.",
+       "cannotdelete-title": "لا يمكن حذف الصفحة \"$1\"",
+       "badtitle": "عنوان سيء",
+       "badtitletext": "عنوان الصفحة المطلوب إما غير صحيح أو فارغ، وربما الوصلة بين اللغات أو بين المشاريع خاطئة.\nومن الممكن وجود رموز لا تصلح للاستخدام في العناوين.",
+       "perfcached": "البيانات التالية مختزنة وقد لا تكون محدثة. {{PLURAL:$1||نتيجة واحدة|نتيجتان|$1 نتائج|$1 نتيجة}} على الأكثر {{PLURAL:$1||مختزنة|مختزنتان|مختزنة}}.",
+       "perfcachedts": "البيانات التالية مختزنة وكان آخر تحديث لها في $1. {{PLURAL:$4||نتيجة واحدة|نتيجتان|$4 نتائج|$4 نتيجة}} على الأكثر {{PLURAL:$4||مختزنة|مختزنتان|مختزنة}}.",
+       "querypage-no-updates": "التحديثات لهذه الصفحة معطلة حاليا.\nالبيانات هنا لن يتم تحديثها حاليا.",
+       "viewsource": "اعرض المصدر",
+       "viewsource-title": "إظهار مصدر $1",
+       "actionthrottled": "لا يمكن عمل المزيد من هذا الفعل",
+       "actionthrottledtext": "كإجراء ضد السبام، أنت ممنوع من إجراء هذا الفعل عدد كبير من المرات في فترة زمنية قصيرة، ولقد تجاوزت هذا الحد.\nمن فضلك حاول مرة ثانية خلال عدة دقائق.",
+       "protectedpagetext": "هذه الصفحة تمت حمايتها لمنع التعديل.",
+       "viewsourcetext": "يمكنك رؤية ونسخ مصدر هذه الصفحة:",
+       "viewyourtext": "يمكنك رؤية ونسخ مصدر ''' تعديلاتك ''' في هذه الصفحة:",
+       "protectedinterface": "هذه الصفحة توفر نص الواجهة للبرنامج، وهي مقفلة لمنع التخريب.",
+       "editinginterface": "'''تحذير:''' أنت تقوم بتحرير صفحة تستخدم في الواجهة النصية للبرنامج.\nسوف تؤثر التغييرات على هذه الصفحة على مظهر واجهة المستخدم للمستخدمين الآخرين.\nللترجمات، من فضلك استخدم مشروع ترجمة ميدياويكي [//translatewiki.net/wiki/Main_Page?setlang=ar translatewiki.net].",
+       "cascadeprotected": "تمت حماية هذه الصفحة من التعديل لأنها مدمجة في {{PLURAL:$1||الصفحة التالية، والتي|الصفحتين التاليتين، واللتين|الصفحات التالية، والتي}} تم استعمال خاصية \"حماية الصفحات المدمجة\" {{PLURAL:$1||بها|بهما|بها}}:\n$2",
+       "namespaceprotected": "لا تمتلك الصلاحية لتعديل الصفحات في نطاق '''$1'''.",
+       "customcssprotected": "أنت لا تمتلك السماح لتعديل صفحة الCSS هذه، لأنها تحتوي على الإعدادات الشخصية لمستخدم آخر.",
+       "customjsprotected": "أنت لا تمتلك السماح لتعديل صفحة الجافاسكريبت هذه، لأنها تحتوي على الإعدادات الشخصية لمستخدم آخر.",
+       "ns-specialprotected": "الصفحات الخاصة لا يمكن تعديلها.",
+       "titleprotected": "{{GENDER:$1|حمى|حمت}} [[User:$1|$1]] هذا العنوان من الإنشاء.\nالسبب المعطى هو ''$2''.",
+       "filereadonlyerror": "تعذر تعديل الملف \"$1\" لأن مستودع الملف \"$2\" في وضع القراءة فقط. \n\nالمدير الذي قام بغلقه قدم التفسير التالي: \"$3\".",
+       "invalidtitle-knownnamespace": "عنوان غير صالح في النطاق «$2» مع نص «$3»",
+       "invalidtitle-unknownnamespace": "عنوان غير صالح ذو نطاق غير معروف رقم $1 ونص «$2»",
+       "exception-nologin": "غير مسجل الدخول",
+       "virus-badscanner": "ضبط سيء: ماسح فيروسات غير معروف: ''$1''",
+       "virus-scanfailed": "فشل المسح (كود $1)",
+       "virus-unknownscanner": "مضاد فيروسات غير معروف:",
+       "logouttext": "'''أنت الآن غير مسجل الدخول.'''\n\nتستطيع المتابعة باستعمال {{SITENAME}} كمجهول، أو <span class='plainlinks'>[$1 الدخول مرة أخرى]</span> بنفس الاسم أو باسم آخر.\nمن الممكن أن ترى بعض الصفحات كما لو أنك مسجل الدخول، وذلك حتى تقوم بإفراغ الصفحات المختزنة في المتصفح لديك.",
+       "yourname": "اسم المستخدم:",
+       "yourpassword": "كلمة السر:",
+       "yourpasswordagain": "أعد كتابة كلمة السر:",
+       "remembermypassword": "تذكر دخولي على هذا الحاسوب (إلى {{PLURAL:$1||يوم واحد|يومين|$1 أيام|$1 يومًا|$1 يوم}} كحد أقصى)",
+       "yourdomainname": "نطاقك:",
+       "externaldberror": "هناك إما خطأ في دخول قاعدة البيانات الخارجية أو أنه غير مسموح لك بتحديث حسابك الخارجي.",
+       "login": "ادخل",
+       "userlogin": "ادخل / أنشئ حسابا",
+       "userloginnocreate": "دخول",
+       "logout": "اخرج",
+       "userlogout": "خروج",
+       "notloggedin": "غير مسجل الدخول",
+       "nologin": "ألا تمتلك حسابا؟ '''$1'''.",
+       "nologinlink": "أنشئ حسابا",
+       "createaccount": "أنشئ حسابا",
+       "gotaccount": "تمتلك حسابا بالفعل؟ '''$1'''.",
+       "gotaccountlink": "ادخل",
+       "userlogin-resetlink": "أنسيت بيانات الولوج؟",
+       "createaccountmail": "بواسطة البريد الإلكتروني",
+       "createaccountreason": "السبب:",
+       "badretype": "كلمات السر التي أدخلتها لا تتطابق.",
+       "userexists": "اسم المستخدم الذي تم إدخاله مستعمل بالفعل.\nالرجاء اختيار اسم مختلف.",
+       "loginerror": "خطأ في الدخول",
+       "createaccounterror": "تعذر إنشاء حساب المستخدم: $1",
+       "nocookiesnew": "تم إنشاء حساب المستخدم، ولكنك لست مسجل الدخول بعد.\nيستخدم {{SITENAME}} كوكيز لتسجيل الدخول.\nلديك الكوكيز معطلة.\nمن فضلك فعلها، ثم سجل الدخول باسم المستخدم وكلمة السر الجديدين.",
+       "nocookieslogin": "يستخدم {{SITENAME}} الكوكيز لتسجيل الدخول.\nالكوكيز معطلة لديك.\nمن فضلك فعلها ثم حاول مرة أخرى.",
+       "nocookiesfornew": "لم يتم إنشاء حساب المستخدم، لأننا لم نستطع تأكيد مصدره. \nتأكد من أن ملفات تعريف الارتباط (الكوكيز) مفعلة عندك، ثم أعد تحميل الصفحة وحاول مرة أخرى.",
+       "noname": "لم تحدد اسم مستخدم صحيح.",
+       "loginsuccesstitle": "تم الدخول بشكل صحيح",
+       "loginsuccess": "'''لقد قمت بتسجيل الدخول ل{{SITENAME}} باسم \"$1\".'''",
+       "nosuchuser": "لا يوجد مستخدم بالاسم \"$1\".\nأسماء المستخدمين حساسة لحالة الحروف.\nتأكد من إملاء الاسم، أو [[Special:UserLogin/signup|قم بإنشاء حساب جديد]].",
+       "nosuchusershort": "لا يوجد مستخدم باسم $1\".\nتأكد من إملاء الاسم.",
+       "nouserspecified": "يجب عليك تحديد اسم مستخدم.",
+       "login-userblocked": "هذا المستخدم ممنوع. لا يسمح بالولوج.",
+       "wrongpassword": "كلمة السر التي أدخلتها غير صحيحة.\nمن فضلك حاول مرة أخرى.",
+       "wrongpasswordempty": "كلمة السر المدخلة كانت فارغة.\nمن فضلك حاول مرة أخرى.",
+       "passwordtooshort": "يجب أن تتكون كلمة السر على الأقل من {{PLURAL:$1|حرف واحد|حرفين|$1 حروف|$1 حرفا|$1 حرف}}.",
+       "password-name-match": "يجب أن تكون كلمة المرور مختلفة عن اسم المستخدم.",
+       "password-login-forbidden": "تم منع استخدام اسم المستخدم هذا وكلمة السر.",
+       "mailmypassword": "أرسل لي كلمة سر جديدة",
+       "passwordremindertitle": "كلمة سر مؤقتة جديدة ل{{SITENAME}}",
+       "passwordremindertext": "لقد طلب شخص ما (غالبا أنت، من عنوان الآيبي $1) كلمة سر جديدة ل{{SITENAME}} ($4).\nأنشئت كلمة سر مؤقتة للمستخدم \"$2\" وجعلت \"$3\".\nلو أن هذا ما تريده، فعليك أن تقوم بتسجيل الدخول واختيار كلمة سر جديدة الآن.\nسوف تنتهي مدة صلاحية كلمة سرك المؤقتة في غضون {{PLURAL:$5|أقل من يوم واحد|يوم واحد|يومين|$5 أيام|$5 يوما|$5 يوم}}.\n\nإذا كان الذي قام بهذا الطلب شخص آخر أو إذا تذكرت كلمة سرك ولا ترغب  في تغييرها، فبإمكانك أن تتجاهل هذه الرسالة وأن تستمر في استخدام كلمة سرك القديمة.",
+       "noemail": "لا يوجد عنوان بريد إلكتروني مسجل للمستخدم \"$1\".",
+       "noemailcreate": "عليك تقديم عنوان بريد إلكتروني صالح",
+       "passwordsent": "تم إرسال كلمة سر جديدة إلى عنوان البريد الإلكتروني المسجل للمستخدم \"$1\".\nمن فضلك حاول تسجيل الدخول مرة ثانية بعد استلامها.",
+       "blocked-mailpassword": "تم منع عنوان الأيبي الخاص بك من التحرير، ولمنع التخريب لا يمكنك أن تستخدم خاصية استرجاع كلمة السر.",
+       "eauthentsent": "تم إرسال رسالة تأكيد إلكترونية إلى العنوان المسمى.\nحتى ترسل أي رسالة أخرى لذلك الحساب عليك أن تتبع التعليمات الواردة في الرسالة لتأكيد أن هذا الحساب هو لك بالفعل.",
+       "throttled-mailpassword": "تم بالفعل إرسال تذكير بكلمة السر، في ال{{PLURAL:$1||ساعة الماضية|ساعتين الماضيتين|$1 ساعات الماضية|$1 ساعة الماضية}}.\nلمنع التخريب، سيتم إرسال تذكير واحد كل {{PLURAL:$1||ساعة|ساعتين|$1 ساعات|$1 ساعة}}.",
+       "mailerror": "خطأ أثناء إرسال البريد: $1",
+       "acct_creation_throttle_hit": "أنشأ زوار هذه الويكي باستخدام عنوان آيبيك {{PLURAL:$1||حسابا واحدا|حسابين|$1 حسابات|$1 حسابا|$1 حساب}} في اليوم الماضي، وهو الحد الأقصى المسموح به في هذه الفترة الزمنية.\nوكنتيجة لذلك، لن يتمكن الزوار الذين يستخدمون عنوان الأيبي هذا من إنشاء أي حسابات أخرى حاليا.",
+       "emailauthenticated": "تم تأكيد بريدك الإلكتروني في $2 الساعة $3.",
+       "emailnotauthenticated": "لم يتم التحقق من بريدك الإلكتروني.\nلن يتم إرسال رسائل لأي من الميزات التالية.",
+       "noemailprefs": "حدد عنوان بريد إلكتروني في تفضيلاتك لهذه الخصائص لتعمل.",
+       "emailconfirmlink": "أكد عنوان بريدك الإلكتروني",
+       "invalidemailaddress": "لا يمكن قبول عنوان البريد الإلكتروني حيث تبدو صيغته خاطئة.\nضع عنوانا مضبوطا أو أفرغ هذا الحقل.",
+       "cannotchangeemail": "تغيير عنوان البريد الإلكتروني لهذا الحساب غير ممكن على هذا الويكي",
+       "emaildisabled": "لا يمكن إرسال رسائل البريد الإلكتروني من هذا الموقع.",
+       "accountcreated": "تم إنشاء الحساب",
+       "accountcreatedtext": "تم إنشاء الحساب الخاص ب$1.",
+       "createaccount-title": "إنشاء حساب في {{SITENAME}}",
+       "createaccount-text": "شخص ما أنشأ حسابا لعنوان بريدك الإلكتروني في {{SITENAME}} ($4) بالاسم \"$2\"، كلمة السر \"$3\".\nينبغي عليك تسجيل الدخول وتغيير كلمة السر الخاصة بك الآن.\n\nيمكنك تجاهل هذه الرسالة، لو تم إنشاء هذا الحساب بالخطأ.",
+       "login-throttled": "لقد قمت بمحاولات دخول كثيرة جدا مؤخرا.\nمن فضلك انتظر قبل المحاولة مرة أخرى.",
+       "login-abort-generic": "لم ينجح ولوجك - إجهاض",
+       "loginlanguagelabel": "اللغة: $1",
+       "suspicious-userlogout": "رفض طلب خروجك لأنه يبدو كأنه أرسل عن طريق متصفح معطوب أو وسيط تخزين.",
+       "pt-login": "Odkul",
+       "php-mail-error-unknown": "خطأ غير معروف في وظيفة البريد PHP's mail()",
+       "user-mail-no-addy": "لقد حاولت إرسال بريد إلكتروني دون عنوان بريد إلكتروني.",
+       "resetpass_announce": "تم تسجيل دخولك بكلمة سر مؤقتة.\nللدخول بشكل نهائي، يجب عليك ضبط كلمة سر جديدة هنا:",
+       "resetpass_header": "غير كلمة سر الحساب",
+       "oldpassword": "كلمة السر القديمة:",
+       "newpassword": "كلمة السر الجديدة:",
+       "retypenew": "أعد كتابة كلمة السر الجديدة:",
+       "resetpass_submit": "ضبط كلمة السر والدخول",
+       "changepassword-success": "تم تغيير كلمة السر الخاصة بك بنجاح! يتم تسجيل دخولك الآن...",
+       "resetpass_forbidden": "كلمات السر لا يمكن تغييرها",
+       "resetpass-no-info": "يجب أن تكون مسجل الدخول للوصول إلى هذه الصفحة مباشرة.",
+       "resetpass-submit-loggedin": "تغيير كلمة السر",
+       "resetpass-wrong-oldpass": "كلمة سر حالية أو مؤقتة غير صحيحة.\nربما تكون غيرت كلمة السر الخاصة بك بنجاح أو طلبت كلمة سر مؤقتة جديدة.",
+       "resetpass-temp-password": "كلمة سر مؤقتة:",
+       "passwordreset": "إعادة ضبط كلمة السر",
+       "passwordreset-legend": "إعادة تعيين كلمة السر",
+       "passwordreset-disabled": "عُطّلت إعادة تعيين كلمة السر على هذه الويكي.",
+       "passwordreset-username": "اسم المستخدم:",
+       "passwordreset-domain": "النطاق:",
+       "passwordreset-capture": "أأعرض البريد الإلكتروني الناتج؟",
+       "passwordreset-capture-help": "إذا علّمت هذا الصندوق فسيعرض لك البريد الإلكتروني (الذي يحتوي كلمة سر مؤقتة) وسيرسل أيضا للمستخدم.",
+       "passwordreset-email": "عنوان البريد الإلكتروني:",
+       "passwordreset-emailtitle": "تفاصيل حساب {{SITENAME}}",
+       "passwordreset-emailtext-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": "اسم المستخدم: $1\nكلمة السر المؤقتة: $2",
+       "passwordreset-emailsent": "أرسل بريد إلكتروني تذكيري",
+       "passwordreset-emailsent-capture": "أرسل بريد إلكتروني تذكيري وهو معروض بالأسفل.",
+       "passwordreset-emailerror-capture": "ولّد بريد إلكتروني تذكيري وهو معروض بالأسفل لكن فشل إرساله للمستخدم: $1",
+       "changeemail": "تغيير عنوان البريد الإلكتروني",
+       "changeemail-text": "أكمل هذا النموذج لتغيير عنوان البريد الإلكتروني. سوف تحتاج إلى إدخال كلمة السر الخاصة بك لتأكيد هذا التغيير.",
+       "changeemail-no-info": "يجب تسجيل الدخول للوصول إلى هذه الصفحة مباشرة.",
+       "changeemail-oldemail": "عنوان البريد الإلكتروني الحالي:",
+       "changeemail-newemail": "عنوان البريد الإلكتروني الجديد:",
+       "changeemail-none": "(لا شيء)",
+       "changeemail-submit": "غيّر البريد الإلكتروني",
+       "bold_sample": "نص غليظ",
+       "bold_tip": "نص غليظ",
+       "italic_sample": "نص مائل",
+       "italic_tip": "نص مائل",
+       "link_sample": "عنوان وصلة",
+       "link_tip": "وصلة داخلية",
+       "extlink_sample": "http://www.example.com عنوان الوصلة",
+       "extlink_tip": "وصلة خارجية (تذكر بادئة http://)",
+       "headline_sample": "نص عنوان رئيسي",
+       "headline_tip": "عنوان من المستوى الثاني",
+       "nowiki_sample": "أدخل النص غير المنسق هنا",
+       "nowiki_tip": "أهمل تهيئة الويكي",
+       "image_tip": "ملف مدرج",
+       "media_tip": "وصلة ملف",
+       "sig_tip": "توقيعك مع الساعة والتاريخ",
+       "hr_tip": "خط أفقي (تجنب الاستخدام بكثرة)",
+       "summary": "ملخص:",
+       "subject": "موضوع/عنوان:",
+       "minoredit": "هذا تعديل طفيف",
+       "watchthis": "راقب هذه الصفحة",
+       "savearticle": "احفظ الصفحة",
+       "preview": "معاينة",
+       "showpreview": "أظهر معاينة",
+       "showdiff": "أظهر التغييرات",
+       "anoneditwarning": "'''تحذير:''' لم تقم بالدخول.\nسيسجل عنوان الآيبي خاصتك في تاريخ هذه الصفحة.",
+       "anonpreviewwarning": "''أنت غير مسجل الدخول. الحفظ سيسجل عنوان الأيبي الخاص بك في تاريخ هذه الصفحة.''",
+       "missingsummary": "'''تنبيه:''' لم تقم بكتابة ملخص للتعديل.\nإذا قمت بضغط حفظ الصفحة مرة أخرى، فيتم حفظ تعديلك بدون ملخص.",
+       "missingcommenttext": "من فضلك أدخل تعليقا في الأسفل.",
+       "missingcommentheader": "'''تنبيه:''' لم تقم بوضع موضوع/عنوان لهذا التعليق.\nإذا قمت بالضغط على \"{{int:savearticle}}\" مجددا، سيتم حفظ تعليقك بدون عنوان.",
+       "summary-preview": "معاينة الملخص:",
+       "subject-preview": "معاينة للموضوع/العنوان:",
+       "blockedtitle": "المستخدم ممنوع",
+       "blockedtext": "'''اسم المستخدم أو عنوان الأيبي الخاص بك تم منعه.'''\n\nقام بالمنع $1.\nسبب المنع هو: ''$2''.\n\n* بداية المنع: $8\n* انتهاء المنع: $6\n* الممنوع المقصود: $7\n\nيمكنك الاتصال ب$1 أو مع أحد [[{{MediaWiki:Grouppage-sysop}}|الإداريين]] للنقاش حول المنع.\nلا يمكنك استخدام خاصية 'مراسلة هذا المستخدم' إلا إذا كنت قد وضعت عنوان بريدي صحيح في [[Special:Preferences|تفضيلات حسابك]] ولم يتم منعك من استخدامها.\nعنوان الأيبي الخاص بك حاليا هو $3، ورقم المنع هو #$5.\nمن فضلك اذكر كل التفاصيل بالأعلى في أي استعلامات تقوم بها.",
+       "autoblockedtext": "تم منع عنوان آيبيك تلقائيا لأن مستخدما آخرا ممنوعا بواسطة $1 استخدمه.\nالسبب الممنوح هو التالي:\n\n:''$2''\n\n* بداية المنع: $8\n* انتهاء المنع: $6\n* الممنوع المقصود: $7\n\nيمكنك أن تتصل ب $1 أو أحد [[{{MediaWiki:Grouppage-sysop}}|الإداريين]] الآخرين لمناقشة المنع.\n\nلاحظ أنه لا يمكنك استخدام خاصية \"إرسال رسالة لهذا المستخدم\" إلا لو كان لديك عنوان بريد إلكتروني صحيح مسجل في [[Special:Preferences|تفضيلاتك]] ولم يتم منعك من استخدامه.\n\nعنوان آيبيك الحالي $3، ورقم المنع #$5.\nمن فضلك اذكر كل التفاصيل بالأعلى في أي استعلامات تقوم بها.",
+       "blockednoreason": "لا سبب معطى",
+       "whitelistedittext": "يجب عليك $1 لتتمكن من تعديل الصفحات.",
+       "confirmedittext": "يجب عليك تأكيد بريدك الإلكتروني قبل تعديل الصفحات.\nمن فضلك اكتب وأكد بريدك الإلكتروني من خلال [[Special:Preferences|تفضيلاتك]].",
+       "nosuchsectiontitle": "تعذر إيجاد القسم",
+       "nosuchsectiontext": "لقد حاولت تحرير قسم غير موجود.\nربما يكون قد تم نقله أو حذفه أثناء مشاهدتك للصفحة.",
+       "loginreqtitle": "تسجيل الدخول مطلوب",
+       "loginreqlink": "الولوج",
+       "loginreqpagetext": "يجب عليك $1 لتشاهد صفحات أخرى.",
+       "accmailtitle": "تم إرسال كلمة السر.",
+       "accmailtext": "كلمة سر مولدة عشوائيا ل [[User talk:$1|$1]] تم إرسالها إلى $2.\n\nكلمة السر لهذا الحساب الجديد يمكن تغييرها في صفحة ''[[Special:ChangePassword|تغيير كلمة السر]]'' عند تسجيل الدخول.",
+       "newarticle": "(جديد)",
+       "newarticletext": "لقد تبعت وصلة لصفحة لم يتم إنشائها بعد.\nلإنشاء هذه الصفحة ابدأ الكتابة في الصندوق بالأسفل (انظر في [$1 صفحة المساعدة] للمزيد من المعلومات).\nإذا كانت زيارتك لهذه الصفحة بالخطأ، اضغط على زر ''رجوع'' في متصفح الإنترنت لديك.",
+       "anontalkpagetext": "----''هذه صفحة نقاش لمستخدم مجهول لم يقم بإنشاء حساب بعد أو لا يستعمل ذلك الحساب.\nلذا فيجب علينا استعمال رقم الأيبي للتعرف عليه/عليها.\nمثل هذا العنوان يمكن أن يشترك فيه عدة مستخدمين.\nلو كنت مستخدما مجهولا وتشعر بأن تعليقات لا تخصك تم توجيهها إليك، من فضلك [[Special:UserLogin/signup|أنشئ حسابا]] أو [[Special:UserLogin|سجل الدخول]] لتجنب الارتباك المستقبلي مع مستخدمين مجهولين آخرين.''",
+       "noarticletext-nopermission": "لا يوجد حاليا أي نص في هذه الصفحة.يمكنك [[Special:Search/{{PAGENAME}}|البحث عن عنوان هذه الصفحة]] في الصفحات الأخرى,أو <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} بحث السجلات المتصلة]</span>.",
+       "userpage-userdoesnotexist": "حساب المستخدم \"<nowiki>$1</nowiki>\" غير مسجل.\nمن فضلك تأكد أنك تريد إنشاء/تعديل هذه الصفحة.",
+       "userpage-userdoesnotexist-view": "حساب المستخدم \"$1\" غير مسجل.",
+       "blocked-notice-logextract": "هذا المستخدم ممنوع حاليا.\nآخر مدخلة في سجل المنع موفرة بالأسفل كمرجع:",
+       "clearyourcache": "'''ملاحظة:''' بعد الحفظ, أنت ربما تحتاج إلى إفراغ كاش متصفحك لرؤية التغييرات.\n* '''فيرفكس / سفاري:''' اضغط ''Shift'' أثناء ضغط ''Reload'', أو اضغط أيا من ''Ctrl-F5'' أو ''Ctrl-R'' (''⌘-R'' على ماك)\n* '''جوجل كروم:''' اضغط ''Ctrl-Shift-R'' (''⌘-Shift-R'' على ماك)\n* '''إنترنت إكسبلورر:''' اضغط ''Ctrl'' أثناء ضغط ''Refresh''، أو اضغط ''Ctrl-F5''\n* '''كنكرر:''' اضغط ''Reload'' أو اضغط ''F5''\n* '''أوبرا:''' أفرغ الكاش في ''Tools → Preferences''",
+       "usercssyoucanpreview": "'''ملاحظة:''' استعمل زر \"{{int:showpreview}}\" لتجربة CSS الجديد قبل حفظ الصفحة.",
+       "userjsyoucanpreview": "'''ملاحظة:''' استعمل زر \"{{int:showpreview}}\" لتجربة جافاسكربت الجديدة قبل حفظ الصفحة.",
+       "usercsspreview": "'''تذكر أنك تقوم بعرض الأنماط المتراصة (CSS) الخاصة بك فقط\nلم يتم حفظها بعد!'''",
+       "userjspreview": "'''تذكر أنك فقط تجرب/تعاين جافاسكربت.'''\n'''لم يتم الحفظ بعد!'''",
+       "sitecsspreview": "''' تذكر أنك فقط في وضع المعاينة لهذا CSS ''' \n''' ولم يتم حفظ الصفحة بعد! '''",
+       "sitejspreview": "''' تذكر أنك فقط في وضع المعاينة لكود JavaScript هذا''' \n''' ولم يتم حفظه بعد! '''",
+       "userinvalidcssjstitle": "'''تحذير:''' لا توجد واجهة  \"$1\".\nتذكر أن ملفات ال.css و ال.js تستخدم حروف صغيرة في العنوان ، كمثال {{ns:user}}:Foo/vector.css و ليس {{ns:user}}:Foo/Vector.css.",
+       "updated": "(محدثة)",
+       "note": "'''ملاحظة:'''",
+       "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|تسجيل الخروج]] ثم تسجيل الدخول مجددا.'''",
+       "token_suffix_mismatch": "'''تعديلك تم رفضه لأن عميلك أخطأ في علامات الترقيم\nفي نص التعديل. تم رفض التعديل لمنع فساد نص المقالة.\nهذا يحدث أحيانا عندما تستخدم خدمة بروكسي مجهول معيبة مبنية على الوب.'''",
+       "edit_form_incomplete": "'''بعض أجزاء من نموذج التعديل لم تصل إلى الخادم؛ تأكد من أن تعديلاتك لم تمس وحاول مجددا.'''",
+       "editing": "تحرير $1",
+       "creating": "إنشاء «$1»",
+       "editingsection": "تحرير $1 (قسم)",
+       "editingcomment": "تعديل $1 (قسم جديد)",
+       "editconflict": "تضارب في التحرير: $1",
+       "explainconflict": "لقد عدل شخص آخر هذه الصفحة بعد أن بدأت أنت بتحريرها.\nصندوق النصوص العلوي يحتوي على النص الموجود حاليا في الصفحة.\nوالتغييرات التي قمت أنت بها موجودة في الصندوق في أسفل الصفحة.\nيجب أن تقوم بدمج تغييراتك في النص الموجود حاليا.\n'''فقط''' ما هو موجود في الصندوق العلوي هو ما سيتم حفظه عند الضغط على زر \"حفظ الصفحة\".",
+       "yourtext": "نصك",
+       "storedversion": "النسخة المخزنة",
+       "nonunicodebrowser": "'''تحذير: متصفحك لا يتوافق مع الترميز الموحد.\nتمت معالجة هذا لكي تتمكن من تحرير الصفحات بأمان: الحروف التي ليست ASCII سوف تظهر في صندوق التحرير كأكواد سداسي عشرية.'''",
+       "editingold": "''' تحذير: أنت تقوم الآن بتحرير نسخة قديمة من هذه الصفحة.\nإذا قمت بحفظها، ستفقد كافة التغييرات التي حدثت بعد هذه النسخة. '''",
+       "yourdiff": "الفروق",
+       "copyrightwarning": "من فضلك لاحظ أن جميع المساهمات ل {{SITENAME}} خاضعة وصادرة تحت ترخيص $2 (انظر في $1 للمزيد من التفاصيل)\nإذا لم ترد أن تخضع كتابتك للتعديل والتوزيع الحر، لا تضعها هنا<br />.\nكما أنك تتعهد بأنك قمت بكتابة ما هو موجود بنفسك، أو قمت بنسخها من مصدر يخضع ضمن الملكية العامة، أو مصدر حر آخر.\n'''لا ترسل أي عمل ذي حقوق محفوظة بدون الإذن من صاحب الحق'''.",
+       "copyrightwarning2": "من فضلك لاحظ أن جميع المساهمات في {{SITENAME}} يمكن أن تعدل أو تتغير أو تزال من قبل المساهمين الآخرين.\nإذا لم تكن ترغب أن تعدل مشاركاتك بهذا الشكل، لا تضعها هنا.<br />\nأنت تقر أيضا أنك كتبت هذا بنفسك، أو نسخته من مصدر يخضع للملكية العامة، أو مصدر حر آخر (انظر $1 للتفاصيل).\n'''لا تضف أي عمل ذي حقوق محفوظة بدون تصريح!'''",
+       "longpageerror": "'''خطأ: النص الذي قمت بإدخاله {{PLURAL:$1|واحد كيلوبايت|$1 كيلوبيات}} أطول, وهو أطول من الحد الأقصى {{PLURAL:$2|واحد كيلوبايت|$2 كيلوبايت}}.'''\nو يتعذر حفظه.",
+       "readonlywarning": "'''تحذير: لقد أغلقت قاعدة البيانات للصيانة، لذلك لن تتمكن من حفظ التعديلات التي قمت بها حاليا.\nإذا رغبت بإمكانك أن تنسخ النص الذي تعمل عليه وتحفظه في ملف نصي إلى وقت لاحق.'''\n\nالإداري الذي أغلقها أعطى هذا التفسير: $1",
+       "protectedpagewarning": "'''تحذير: تمت حماية هذه الصفحة حتى يمكن للمستخدمين ذوي الصلاحيات الإدارية فقط تعديلها.'''\nآخر مدخلة سجل موفرة بالأسفل كمرجع:",
+       "semiprotectedpagewarning": "'''ملاحظة:''' تمت حماية هذه الصفحة بحيث يمكن للمستخدمين المسجلين فقط تعديلها.\nآخر مدخلة سجل موفرة بالأسفل كمرجع:",
+       "cascadeprotectedwarning": "'''تحذير:''' تمت حماية هذه الصفحة بحيث يستطيع المستخدمون ذوو الصلاحيات الإدارية فقط تعديلها، وذلك لأنها مدمجة في {{PLURAL:$1||الصفحة التالية والتي تمت حمايتها|الصفحتين التاليتين واللتين تمت حمايتها|الصفحات التالية والتي تمت حمايتها}} بخاصية \"حماية الصفحات المدمجة\":",
+       "titleprotectedwarning": "'''تحذير:  هذه الصفحة تمت حمايتها بحيث أن [[Special:ListGroupRights|صلاحيات معينة]] مطلوبة لإنشائها.'''\nآخر مدخلة سجل موفرة بالأسفل كمرجع:",
+       "templatesused": "{{PLURAL:$1||القالب المستخدم|القالبان المستخدمان|القوالب المستخدمة}} في هذه الصفحة:",
+       "templatesusedpreview": "{{PLURAL:$1||القالب المستخدم|القالبان المستخدمان|القوالب المستخدمة}} في هذه المعاينة:",
+       "templatesusedsection": "{{PLURAL:$1||القالب المستخدم|القالبان المستخدمان|القوالب المستخدمة}} في هذا القسم:",
+       "template-semiprotected": "(حماية جزئية)",
+       "hiddencategories": "{{PLURAL:$1|هذه الصفحة غير موجودة في أي تصنايف مخفية|هذه الصفحة موجودة في تصنيف مخفي واحد|هذه الصفحة موجودة في تصنيفين مخفيين|هذه الصفحة موجودة في $1 تصانيف مخفية|هذه الصفحة موجودة في $1 تصنيفا مخفيا|هذه الصفحة موجودة في $1 تصنيف مخفي}}:",
+       "nocreatetext": "قام {{SITENAME}} بتحديد القدرة على إنشاء صفحات جديدة.\nيمكنك العودة وتحرير صفحة موجودة بالفعل، أو [[Special:UserLogin|الدخول أو تسجيل حساب]].",
+       "nocreate-loggedin": "أنت لا تمتلك الصلاحية لإنشاء صفحات جديدة.",
+       "sectioneditnotsupported-title": "تعديل الأقسام غير مدعوم",
+       "sectioneditnotsupported-text": "تعديل الأقسام غير مدعوم في هذه الصفحة",
+       "permissionserrors": "أخطاء السماحات",
+       "permissionserrorstext": "لا تمتلك الصلاحية لفعل هذا، {{PLURAL:$1||للسبب التالي|للسببين التاليين|للأسباب التالية}}:",
+       "permissionserrorstext-withaction": "لا تملك الصلاحيات ل$2، لل{{PLURAL:$1||سبب التالي|سببين التاليين|أسباب التالية}}:",
+       "recreate-moveddeleted-warn": "'''تحذير: أنت تقوم بإعادة إنشاء صفحة سبق حذفها.'''\n\nيجب عليك التيقن من أن الاستمرار بتحرير هذه الصفحة ملائم.\nسجلا الحذف والنقل لهذه الصفحة معروضان هنا للتيسير:",
+       "moveddeleted-notice": "هذه الصفحة تم حذفها.\nسجلا الحذف والنقل للصفحة معروضان بالأسفل كمرجع.",
+       "log-fulllog": "أظهر السجل الكامل",
+       "edit-hook-aborted": "التعديل تم تركه بواسطة الخطاف.\nلم يعط تفسيرا.",
+       "edit-gone-missing": "لم يمكن تحديث الصفحة.\nيبدو أنه تم حذفها.",
+       "edit-conflict": "تضارب تحريري.",
+       "edit-no-change": "تعديلك تم تجاهله، لأنه لم يحدث أي تعديل للنص.",
+       "edit-already-exists": "لم يمكن إنشاء صفحة جديدة.\nهي موجودة بالفعل.",
+       "defaultmessagetext": "نص الرسالة الافتراضي",
+       "expensive-parserfunction-warning": "'''تحذير:''' هذه الصفحة تحتوي على استدعاءات دالة محلل كثيرة مكلفة.\n\nينبغي أن تكون أقل من {{PLURAL:$2||استدعاء واحد|استدعاءين|$2 استدعاءات|$2 استدعاء}}، يوجد الآن {{PLURAL:$1|استدعاء واحد|استدعاءان|$2 استدعاءات|$2 استدعاء}}.",
+       "expensive-parserfunction-category": "صفحات يوجد بها استدعاءات دوال محلل كثيرة ومكلفة",
+       "post-expand-template-inclusion-warning": "'''تحذير:''' حجم تضمين القالب كبير جدا.\nبعض القوالب لن تضمن.",
+       "post-expand-template-inclusion-category": "الصفحات حيث تم تجاوز حجم تضمين القالب",
+       "post-expand-template-argument-warning": "'''تحذير:''' هذه الصفحة تحتوي على عامل قالب واحد على الأقل له حجم تمدد كبير جدا.\nهذه العوامل تم حذفها.",
+       "post-expand-template-argument-category": "صفحات تحتوي مدخلات القالب المحذوفة",
+       "parser-template-loop-warning": "تم كشف حلقة قالب: [[$1]]",
+       "parser-template-recursion-depth-warning": "تم تجاوز حد عمق فرد القوالب ($1)",
+       "language-converter-depth-warning": "تم تخطي حد عمق محول اللغة ($1)",
+       "node-count-exceeded-category": "الصفحات التي حدث فيها تجاوز تعداد العقد",
+       "node-count-exceeded-warning": "تجاوزت هذه الصفحة تعداد العقد",
+       "expansion-depth-exceeded-category": "الصفحات التي حدث فيها تجاوز عمق التوسيع",
+       "expansion-depth-exceeded-warning": "الصفحة تجاوزت عمق التوسيع",
+       "parser-unstrip-loop-warning": "حلقة معراة تم الكشف عنها",
+       "parser-unstrip-recursion-limit": "تعدى حد العودية Unstrip  ($1)",
+       "undo-success": "يمكن استرجاع التعديل.\nمن فضلك تحقق من المقارنة بالأسفل للتأكد من أن هذا هو ما تريد أن تفعله، وبعد ذلك احفظ التغييرات بالأسفل للانتهاء من استرجاع التعديل.",
+       "undo-failure": "لم يمكن استرجاع التعديل بسبب تعديلات متعارضة تمت على الصفحة.",
+       "undo-norev": "فشل في الرجوع عن التعديل حيث أنه غير موجود أو تم حذفه.",
+       "undo-summary": "الرجوع عن التعديل $1 بواسطة [[Special:Contributions/$2|$2]] ([[User talk:$2|نقاش]])",
+       "cantcreateaccounttitle": "لا يمكن إنشاء حساب",
+       "cantcreateaccount-text": "إنشاء الحسابات من عنوان الأيبي هذا ('''$1''') تم منعه بواسطة [[User:$3|$3]].\n\nالسبب المعطى بواسطة $3 هو ''$2''",
+       "viewpagelogs": "اعرض سجلات هذه الصفحة",
+       "nohistory": "لا يوجد تاريخ للتعديلات لهذه الصفحة.",
+       "currentrev": "المراجعة الحالية",
+       "currentrev-asof": "المراجعة الحالية بتاريخ $1",
+       "revision-info": "مراجعة $1 بواسطة $2",
+       "previousrevision": "→ مراجعة أقدم",
+       "nextrevision": "مراجعة أحدث ←",
+       "currentrevisionlink": "المراجعة الحالية",
+       "cur": "الحالي",
+       "next": "التالي",
+       "last": "السابق",
+       "page_first": "الأولى",
+       "page_last": "الأخيرة",
+       "histlegend": "اختيار الفرق: علم على صناديق النسخ للمقارنة واضغط قارن بين النسخ المختارة أو الزر بالأسفل.<br />\nمفتاح: (الحالي) = الفرق مع النسخة الحالية\n(السابق) = الفرق مع النسخة السابقة، ط = تغيير طفيف",
+       "history-fieldset-title": "تصفح التاريخ",
+       "history-show-deleted": "المحذوفة فقط",
+       "histfirst": "أول",
+       "histlast": "آخر",
+       "historysize": "({{PLURAL:$1|1 بايت|$1 بايت}})",
+       "historyempty": "(فارغ)",
+       "history-feed-title": "تاريخ المراجعة",
+       "history-feed-description": "تاريخ التعديل لهذه الصفحة في الويكي",
+       "history-feed-item-nocomment": "$1 في $2",
+       "history-feed-empty": "الصفحة المطلوبة غير موجودة.\nمن المحتمل أن تكون هذه الصفحة قد حذفت من الويكي، أو نقلت.\nحاول [[Special:Search|البحث في الويكي]] عن صفحات جديدة ذات صلة.",
+       "rev-deleted-comment": "(أزيل ملخص التعديل)",
+       "rev-deleted-user": "(اسم المستخدم تمت إزالته)",
+       "rev-deleted-event": "(فعل السجل تمت إزالته)",
+       "rev-deleted-user-contribs": "[اسم المستخدم أو عنوان الأيبي تمت إزالته - التعديل مخفي من المساهمات]",
+       "rev-deleted-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}}/suppress|page={{FULLPAGENAMEE}}}} سجل الإخفاء].\nبإمكانك [$1 رؤية هذه المراجعة] إذا أردت المتابعة.",
+       "rev-deleted-text-view": "'''حُذِفت''' مراجعة هذه الصفحة.\nيمكنك رؤيتها؛ ويمكنك العثور على التفاصيل في [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سجل الحذف].",
+       "rev-suppressed-text-view": "'''أُخفيت''' مراجعة الصفحة هذه.\nيمكنك رؤيتها؛ ويمكنك العثور على التفاصيل في  [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} سجل الإخفاء].",
+       "rev-deleted-no-diff": "لا يمكنك رؤية هذا الفرق لأن إحدى المراجعات '''حُذِفت'''.\nيمكنك العثور على التفاصيل في [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سجل الحذف].",
+       "rev-suppressed-no-diff": "ليس بإمكانك مشاهدة هذا الفرق لأن إحدى المراجعات '''حذفت'''.",
+       "rev-deleted-unhide-diff": "'''حُذِفت''' إحدى مراجعتي هذا الفرق.\nيمكن العثور على التفاصيل في [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سجل الحذف].\nبإمكانك [$1 رؤية هذا الفرق] إذا أردت المتابعة.",
+       "rev-suppressed-unhide-diff": "'''أُخفيت''' إحدى مراجعتي هذا الفرق.\nيمكنك العثور على التفاصيل في [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} سجل الإخفاء].\nبإمكانك [$1 رؤية هذا الفرق] إذا أردت المتابعة.",
+       "rev-deleted-diff-view": "'''حُذِفت''' إحدى مراجعتي هذا الفرق.\nيمكنك رؤية الفرق؛ ويمكنك العثور على التفاصيل في [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سجل الحذف].",
+       "rev-suppressed-diff-view": "'''أُخفيت''' إحدى مراجعتي هذا الفرق.\nيمكنك رؤية هذا الفرق؛ ويمكنك العثور على التفاصيل في [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} سجل الإخفاء].",
+       "rev-delundel": "أظهر/أخف",
+       "rev-showdeleted": "أظهر",
+       "revisiondelete": "حذف/استرجاع المراجعات",
+       "revdelete-nooldid-title": "مراجعة هدف غير صحيحة",
+       "revdelete-nooldid-text": "إما أنك لم تحدد مراجعة (أو مراجعات) معينة هدفا لهذه الوظيفة، أو أن المراجعة المحددة غير موجودة، أو أنك تحاول إخفاء المراجعة الحالية.",
+       "revdelete-no-file": "الملف المحدد غير موجود.",
+       "revdelete-show-file-confirm": "هل أنت متأكد أنك تريد رؤية مراجعة محذوفة للملف \"<nowiki>$1</nowiki>\" بتاريخ $2 الساعة $3؟",
+       "revdelete-show-file-submit": "نعم",
+       "logdelete-selected": "{{PLURAL:$1|حدث السجل المختار|أحداث السجل المختارة}}:",
+       "revdelete-confirm": "الإداريون الآخرون في {{SITENAME}} سيظل بإمكانهم رؤية المحتوى المخفي ويمكنهم استرجاعه مجددا من خلال هذه الواجهة نفسها، مالم يتم وضع قيود إضافية.\nمن فضلك أكد أنك تنوي فعل هذا، وأنك تفهم العواقب، وأنك تفعل هذا بالتوافق مع [[{{MediaWiki:Policy-url}}|السياسة]].",
+       "revdelete-suppress-text": "الإخفاء ينبغي أن يتم استخدامه '''فقط''' في الحالات التالية:\n* معلومات شخصية غير ملائمة\n*: ''عناوين المنازل وأرقام التليفونات، أرقام الضمان الاجتماعي، إلى آخره.''",
+       "revdelete-legend": "وضع ضوابط رؤية",
+       "revdelete-hide-text": "أخف نص المراجعة",
+       "revdelete-hide-image": "أخف محتوى الملف",
+       "revdelete-hide-name": "أخف الفعل والهدف",
+       "revdelete-hide-comment": "أخف تعليق التعديل",
+       "revdelete-hide-user": "أخف اسم/آيبي المستخدم",
+       "revdelete-hide-restricted": "أخف البيانات عن الإداريين إضافة إلى الآخرين",
+       "revdelete-radio-same": "(لا تغير)",
+       "revdelete-radio-set": "نعم",
+       "revdelete-radio-unset": "لا",
+       "revdelete-suppress": "أخف البيانات عن مديري النظام والبقية",
+       "revdelete-unsuppress": "إزالة الضوابط من المراجعات المسترجعة",
+       "revdelete-log": "السبب:",
+       "revdelete-submit": "طبق على {{PLURAL:$1||المراجعة المختارة|المراجعتين المختارتين|المراجعات المختارة}}",
+       "revdelete-success": "'''تم تحديث رؤية المراجعات بنجاح.'''",
+       "revdelete-failure": "'''تعذر تحديث رؤية المراجعة:'''\n$1",
+       "logdelete-success": "'''تم ضبط رؤية السجلات بنجاح.'''",
+       "logdelete-failure": "'''تعذر ضبط رؤية السجل:'''\n$1",
+       "revdel-restore": "تغيير الرؤية",
+       "pagehist": "تاريخ صفحة",
+       "deletedhist": "التاريخ المحذوف",
+       "revdelete-hide-current": "خطأ عند إحفاء العنصر المؤرخ في $2 $1: هذه هي المراجعة الحالية.\nلا يمكن إخفاؤها.",
+       "revdelete-show-no-access": "خطأ في إظهار العنصر ذا التاريخ $2 $1: هذا العنصر معلم ك\"مقيد\".\nليس لك صلاحية الوصول إليه.",
+       "revdelete-modify-no-access": "خطأ في تعديل العنصر ذا التاريخ $2 $1: هذا العنصر معلم ك\"مقيد\".\nليس لك صلاحية الوصول إليه.",
+       "revdelete-modify-missing": "خطأ في تعديل العنصر ذا الهوية $1: العنصر مفقود من قاعدة البيانات!",
+       "revdelete-no-change": "'''تحذير:''' العنصر ذو التاريخ $2 $1 لديه أصلا إعدادات الظهور المطلوبة.",
+       "revdelete-concurrent-change": "خطأ في تعديل العنصر ذي التاريخ $2 $1: تظهر حالته أن شخصا آخر عدله أثناء محاولتك تعديله.\nمن فضلك راجع السجلات.",
+       "revdelete-only-restricted": "خطأ إخفاء العنصر المؤرخ $2, $1: لا تستطيع تنحية العناصر من عرض الإداريين بدون أن تحدد أيضا إحدى خيارات التنحية الأخرى.",
+       "revdelete-reason-dropdown": "* أسباب حذف عامة\n** خرق لحقوق النشر\n** معلومات شخصية غير ملائمة\n**معلومات تشهيرية محتملة",
+       "revdelete-otherreason": "سبب آخر/إضافي:",
+       "revdelete-reasonotherlist": "سبب آخر",
+       "revdelete-edit-reasonlist": "عدل أسباب الحذف",
+       "revdelete-offender": "مؤلف المراجعة:",
+       "suppressionlog": "سجل الإخفاء",
+       "suppressionlogtext": "بالأسفل قائمة بعمليات الحذف والمنع التي تتضمن محتوى مخفيا عن الإداريين.\nانظر [[Special:BlockList|قائمة منع الآيبي]] لترى عمليات المنع القائمة الآن.",
+       "mergehistory": "دمج تواريخ الصفحة",
+       "mergehistory-header": "هذه الصفحة تسمح لك بدمج نسخ تاريخ صفحة ما إلى صفحة أخرى.\nتأكد من أن هذا التغيير سيحافظ على استمرار تاريخ الصفحة.",
+       "mergehistory-box": "دمج مراجعات صفحتين:",
+       "mergehistory-from": "الصفحة المصدر:",
+       "mergehistory-into": "الصفحة الهدف:",
+       "mergehistory-list": "تاريخ التعديل القابل للدمج",
+       "mergehistory-merge": "المراجعات التالية من [[:$1]] يمكن دمجها إلى [[:$2]].\nاستخدم عامود الصناديق لدمج المراجعات التي تم إنشاؤها في وقبل الوقت المحدد.\nلاحظ أن استخدام وصلات التصفح سيعيد ضبط هذا العامود.",
+       "mergehistory-go": "عرض التعديلات القابلة للدمج",
+       "mergehistory-submit": "دمج المراجعات",
+       "mergehistory-empty": "لا مراجعات يمكن دمجها.",
+       "mergehistory-success": "$3 {{PLURAL:$3|مراجعة|مراجعة}} من [[:$1]] تم دمجها بنجاح في [[:$2]].",
+       "mergehistory-fail": "غير قادر على عمل دمج التاريخ، من فضلك أعد التحقق من محددات الصفحة والزمن.",
+       "mergehistory-no-source": "الصفحة المصدر $1 غير موجودة.",
+       "mergehistory-no-destination": "الصفحة الهدف $1 غير موجودة.",
+       "mergehistory-invalid-source": "الصفحة المصدر يجب أن تكون عنوانا صحيحا.",
+       "mergehistory-invalid-destination": "الصفحة الهدف يجب أن تكون عنوانا صحيحا.",
+       "mergehistory-autocomment": "دمج [[:$1]] في [[:$2]]",
+       "mergehistory-comment": "دمج [[:$1]] في [[:$2]]: $3",
+       "mergehistory-same-destination": "صفحتا المصدر والهدف لا يمكن أن تكونا نفس الشيء",
+       "mergehistory-reason": "السبب:",
+       "mergelog": "سجل الدمج",
+       "revertmerge": "إلغاء الدمج",
+       "mergelogpagetext": "بالأسفل قائمة بأحدث عمليات الدمج لتاريخ صفحة ما إلى أخرى.",
+       "history-title": " «$1»: تاريخ المراجعة",
+       "difference-title": "«$1»: الفرق بين المراجعتين",
+       "difference-title-multipage": "«$1» و«$2»: الفرق بين الصفحتين",
+       "difference-multipage": "(الفرق بين الصفحتين)",
+       "lineno": "Sţar $1:",
+       "compareselectedversions": "قارن بين النسختين المختارتين",
+       "showhideselectedversions": "أظهر/أخف المراجعات المختارة",
+       "diff-multi-manyusers": "({{PLURAL:$1||مراجعة واحدة متوسطة غير معروضة أجراها|مراجعتان متوسطتان غير معروضتان أجراهما|$1 مراجعات متوسطة غير معروضة أجراها|$1 مراجعة متوسطة غير معروضة أجراها}} أكثر من {{PLURAL:$2||مستخدم واحد|مستخدمين|$2 مستخدمين|$2 مستخدمًا|$2 مستخدم}}.)",
+       "prevn": "{{PLURAL:$1|$1}} السابقة",
+       "nextn": "{{PLURAL:$1|$1}} التالية",
+       "prevn-title": "$1 {{PLURAL:$1|نتيجة|نتيجة}} سابقة",
+       "nextn-title": "$1 {{PLURAL:$1|نتيجة|نتيجة}} سابقة",
+       "searchmenu-new": "'''أنشئ الصفحة \"[[:$1]]\" في هذا الويكي!'''",
+       "search-result-category-size": "{{PLURAL:$1|لا أعضاء|عضو واحد|عضوان|$1 أعضاء|$1 عضوًا|$1 عضو}} ({{PLURAL:$2|لا تصانيف فرعية|تصنيف فرعي واحد|تصنيفان فرعيان|$2 تصنيفات فرعية|$2 تصنيفًا فرعيًا|$2 تصنيف فرعي}} و{{PLURAL:$3|لا ملفات|ملف واحد|ملفان|$3 ملفات|$3 ملفًا|$3 ملف}})",
+       "search-redirect": "(تحويلة $1)",
+       "search-suggest": "هل كنت تقصد: $1",
+       "searchrelated": "مرتبطة",
+       "search-nonefound": "لا توجد نتائج تطابق الاستعلام.",
+       "mypreferences": "تفضيلاتي",
+       "youremail": "البريد:",
+       "yourrealname": "الاسم الحقيقي:",
+       "prefs-help-email": "عنوان البريد الإلكتروني هو أمر اختياري، ولكن ستحتاج لإعادة تعيين كلمة المرور، إن نسيت كلمة المرور الخاصة بك.",
+       "prefs-help-email-others": "يمكنك أيضا اختيار للسماح للآخرين الاتصال بك عن طريق صفحة المستخدم أو نقاش المستخدم الخاص بك دون الحاجة إلى الكشف عن الهوية الخاصة بك.",
+       "newuserlogpage": "سجل إنشاء المستخدمين",
+       "nchanges": "{{PLURAL:$1|لا تغييرات|تغيير واحد|تغييران|$1 تغييرات|$1 تغييرا|$1 تغيير}}",
+       "recentchanges-legend": "خيارات أحدث التغييرات",
+       "recentchanges-summary": "تابع أحدث التغييرات للويكي عبر هذه التلقيمة.",
+       "recentchanges-feed-description": "تابع أحدث التغييرات للويكي عبر هذه التلقيمة.",
+       "recentchanges-label-newpage": "أنشأ هذا التعديل صفحة جديدة",
+       "recentchanges-label-minor": "هذا تعديل طفيف",
+       "recentchanges-label-bot": "أجرى هذا التعديل بوت",
+       "recentchanges-label-unpatrolled": "لم يراجع هذا التعديل إلى الآن",
+       "rcnotefrom": "بالأسفل التغييرات منذ '''$2''' (إلى '''$1''' معروضة).",
+       "rclistfrom": "أظهر التغييرات بدءا من $3 $2",
+       "rcshowhideminor": "$1 التعديلات الطفيفة",
+       "rcshowhidebots": "$1 البوتات",
+       "rcshowhideliu": "$1 المستخدمين المسجلين",
+       "rcshowhideanons": "$1 المستخدمين المجهولين",
+       "rcshowhidepatr": "$1 التعديلات المراجعة",
+       "rcshowhidemine": "$1 تعديلاتي",
+       "rclinks": "أظهر آخر $1 تعديل في آخر $2 يوم<br />$3",
+       "hide": "أخف",
+       "show": "اعرض",
+       "rc-enhanced-expand": "عرض التفاصيل (يتطلب جافاسكريبت)",
+       "rc-enhanced-hide": "أخفِ التفاصيل",
+       "recentchangeslinked": "تغييرات ذات علاقة",
+       "recentchangeslinked-title": "التغييرات المرتبطة ب \"$1\"",
+       "recentchangeslinked-summary": "هذه قائمة بالتغييرات التي تمت حديثا للصفحات الموصولة من صفحة معينة (أو إلى الأعضاء ضمن تصنيف معين).\nالصفحات في [[Special:Watchlist|قائمة مراقبتك]] '''عريضة'''",
+       "recentchangeslinked-page": "اسم الصفحة:",
+       "recentchangeslinked-to": "أظهر التغييرات للصفحات الموصولة للصفحة المعطاة عوضا عن ذلك",
+       "uploadlogpage": "سجل الرفع",
+       "filedesc": "ملخص:",
+       "license": "ترخيص:",
+       "filehist-help": "اضغط على وقت/زمن لرؤية الملف كما بدا في هذا الزمن.",
+       "filehist-revert": "استرجع",
+       "filehist-current": "حالي",
+       "filehist-datetime": "وقت/زمن",
+       "filehist-thumb": "صورة مصغرة",
+       "filehist-thumbtext": "تصغير للنسخة بتاريخ $1",
+       "filehist-user": "مستخدم",
+       "filehist-dimensions": "الأبعاد",
+       "imagelinks": "استخدام الملف",
+       "linkstoimage": "{{PLURAL:$1||الصفحة التالية تصل|الصفحتان التاليتان تصلان|ال$1 صفحات التالية تصل|ال$1 صفحة التالية تصل}} إلى هذا الملف:",
+       "nolinkstoimage": "لا توجد صفحات تصل لهذا الملف.",
+       "sharedupload-desc-here": "هذا الملف من $1 ويمكن استخدامه بواسطة المشاريع الأخرى.\nالوصف على [$2 صفحة وصف الملف] هناك معروض بالأسفل.",
+       "statistics": "إحصاءات",
+       "nmembers": "{{PLURAL:$1|لا أعضاء|عضو واحد|عضوان|$1 أعضاء|$1 عضوا|$1 عضو}}",
+       "prefixindex": "كل الصفحات بالبادئة",
+       "usercreated": "{{GENDER:$3|أنشأه|أنشأته}} في $1 الساعة $2",
+       "move": "انقل",
+       "pager-newer-n": "{{PLURAL:$1|أقدم 1|أقدم $1}}",
+       "pager-older-n": "{{PLURAL:$1|أقدم 1|أقدم $1}}",
+       "booksources": "مصادر كتاب",
+       "booksources-search-legend": "البحث عن مصادر الكتب",
+       "log": "سجلات",
+       "allpagessubmit": "اذهب",
+       "categories": "تصنيفات",
+       "linksearch-line": "$1 موصولة من $2",
+       "listgrouprights-members": "(قائمة الأعضاء)",
+       "emailuser": "إرسال رسالة لهذا المستخدم",
+       "watchlist": "قائمة مراقبتي",
+       "mywatchlist": "قائمة مراقبتي",
+       "watchlistfor2": "ل$1 $2",
+       "watch": "راقب",
+       "unwatch": "أوقف المراقبة",
+       "watchlist-details": "{{PLURAL:$1||صفحة واحدة|صفحتان|$1 صفحات|$1 صفحة}} في قائمة مراقبتك، بدون عد صفحات النقاش.",
+       "wlshowlast": "عرض آخر $1 ساعات $2 أيام",
+       "watchlist-options": "خيارات قائمة المراقبة",
+       "actioncomplete": "انتهاء العملية",
+       "actionfailed": "الفعل فشل",
+       "dellogpage": "سجل الحذف",
+       "protectlogpage": "سجل الحماية",
+       "protectedarticle": "حمى \"[[$1]]\"",
+       "undeletelink": "اعرض/استعد",
+       "undeleteviewlink": "اعرض",
+       "namespace": "النطاق",
+       "invert": "اعكس الاختيار",
+       "contributions": "مساهماتي",
+       "contributions-title": "مساهمات المستخدم $1",
+       "mycontris": "مساهماتي",
+       "contribsub2": "ل$1 ($2)",
+       "month": "من سنة (وأقدم):",
+       "year": "من سنة (وأقدم):",
+       "sp-contributions-newbies": "اعرض مساهمات الحسابات الجديدة فقط",
+       "sp-contributions-blocklog": "سجل المنع",
+       "sp-contributions-uploads": "مرفوعات",
+       "sp-contributions-logs": "سجلات",
+       "sp-contributions-talk": "نقاش",
+       "sp-contributions-search": "بحث عن مساهمات",
+       "sp-contributions-username": "عنوان أيبي أو اسم مستخدم:",
+       "sp-contributions-toponly": "أظهر أعلى المراجعات فقط",
+       "whatlinkshere-title": "الصفحات التي تصل إلى \"$1\"",
+       "linkshere": "الصفحات التالية تصل إلى '''[[:$1]]''':",
+       "nolinkshere": "لا توجد صفحات تصل إلى '''[[:$1]]'''.",
+       "isredirect": "صفحة تحويل",
+       "istemplate": "مضمن",
+       "isimage": "وصلة ملف",
+       "whatlinkshere-next": "{{PLURAL:$1|القادمة|ال$1 القادمة}}",
+       "whatlinkshere-links": "← وصلات",
+       "whatlinkshere-hideredirs": "$1 التحويلات",
+       "whatlinkshere-hidetrans": "$1 التضمينات",
+       "whatlinkshere-hidelinks": "$1 الوصلات",
+       "whatlinkshere-hideimages": "$1 وصلة صورة",
+       "whatlinkshere-filters": "مرشحات",
+       "ipboptions": "ساعتين:2 hours,يوم واحد:1 day,3 أيام:3 days,أسبوع واحد:1 week,أسبوعين:2 weeks,شهر واحد:1 month,3 أشهر:3 months,6 أشهر:6 months,سنة واحدة:1 year,دائم:infinite",
+       "ipblocklist": "المستخدمون الممنوعون",
+       "unblocklink": "ارفع المنع",
+       "change-blocklink": "تغيير المنع",
+       "blocklogpage": "سجل المنع",
+       "blocklogentry": "منع \"[[$1]]\" لفترة زمنية مدتها $2 $3",
+       "block-log-flags-nocreate": "إنشاء الحسابات ممنوع",
+       "movelogpage": "سجل النقل",
+       "revertmove": "استرجع",
+       "export": "تصدير صفحات",
+       "allmessagesname": "الاسم",
+       "allmessagesdefault": "النص الافتراضي",
+       "thumbnail_error": "خطأ في إنشاء صورة مصغرة: $1",
+       "tooltip-pt-userpage": "صفحة المستخدم الخاصة بك",
+       "tooltip-pt-mytalk": "صفحة نقاشك",
+       "tooltip-pt-preferences": "تفضيلاتي",
+       "tooltip-pt-watchlist": "قائمة الصفحات التي تراقب التغييرات التي تحدث بها",
+       "tooltip-pt-mycontris": "قائمة مساهماتك",
+       "tooltip-pt-logout": "خروج",
+       "tooltip-ca-addsection": "ابدأ قسما جديدا",
+       "tooltip-ca-protect": "احم هذه الصفحة",
+       "tooltip-ca-delete": "احذف هذه الصفحة",
+       "tooltip-ca-move": "علم هذه الصفحة",
+       "tooltip-ca-watch": "أضف هذه الصفحة إلى قائمة مراقبتك",
+       "tooltip-ca-unwatch": "أزل هذه الصفحة من قائمة مراقبتك",
+       "tooltip-feed-atom": "تلقيم أتوم لهذه الصفحة",
+       "tooltip-t-contributions": "رؤية قائمة مساهمات هذا المستخدم",
+       "tooltip-t-emailuser": "أرسل رسالة لهذا المستخدم",
+       "tooltip-ca-nstab-user": "اعرض صفحة المستخدم",
+       "tooltip-ca-nstab-special": "هذه صفحة خاصة، لا تستطيع أن تعدل الصفحة نفسها",
+       "tooltip-ca-nstab-project": "رؤية صفحة المحتوى",
+       "tooltip-ca-nstab-image": "رؤية صفحة الملف",
+       "tooltip-ca-nstab-template": "رؤية القالب",
+       "tooltip-ca-nstab-category": "رؤية صفحة التصنيف",
+       "tooltip-minoredit": "علم على هذا كتعديل طفيف",
+       "tooltip-save": "احفظ تغييراتك",
+       "tooltip-preview": "اعرض تغييراتك، من فضلك استخدم هذا قبل الحفظ!",
+       "tooltip-diff": "اعرض التغييرات التي قمت بها للنص.",
+       "tooltip-compareselectedversions": "شاهد الفروق بين النسختين المختارتين من هذه الصفحة.",
+       "tooltip-watch": "أضف هذه الصفحة إلى قائمة مراقبتك",
+       "tooltip-undo": "\"رجوع\" تسترجع هذا التعديل وتفتح نافذة التعديل في نمط العرض المسبق. تسمح بإضافة سبب في الملخص.\n\"Annuler\" trajjeε eltabdila lekhra w tħel fenêtre mtaε  el tabdil mtaε elvue el msabqa. Tnajjem tqoul εlech f'ettalkhis.",
+       "tooltip-summary": "أدخل ملخصا قصيرا",
+       "previousdiff": "→ التعديل السابق",
+       "nextdiff": "التعديل اللاحق ←",
+       "file-info-size": "$1 × $2 بكسل حجم الملف: $3، نوع MIME: $4",
+       "file-nohires": "لا توجد دقة أعلى متوفرة.",
+       "svg-long-desc": "ملف SVG، أبعاده $1 × $2 بكسل، حجم الملف: $3",
+       "metadata": "بيانات ميتا",
+       "metadata-help": "هذا الملف يحتوي على معلومات إضافية، غالبا ما تكون أضيفت من قبل الكاميرا الرقمية أو الماسح الضوئي المستخدم في إنشاء الملف.\nإذا كان الملف قد عدل عن حالته الأصلية، فبعض التفاصيل قد لا تعبر عن الملف المعدل.",
+       "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",
+       "namespacesall": "الكل",
+       "monthsall": "الكل",
+       "watchlisttools-view": "اعرض التغييرات المرتبطة",
+       "watchlisttools-edit": "اعرض قائمة المراقبة وعدلها",
+       "watchlisttools-raw": "عدل قائمة المراقبة الخام",
+       "duplicate-defaultsort": "'''تحذير:''' مفتاح الترتيب الافتراضي \"$2\" يتجاوز مفتاح الترتيب الافتراضي السابق \"$1\".",
+       "external_image_whitelist": " #<pre>اترك هذا السطر تماما كما هو\n#ضع منثورات التعبيرات المنتظمة (فقط الجزء الذي يذهب بين //) بالأسفل\n#هذه ستتم مطابقتها مع مسارات الصور الخرجية (الموصولة بشكل مباشر)\n#هذه التي تطابق سيتم عرضها كصور، غير ذلك فقط وصلة إلى الصورة سيتم عرضها\n#السطور التي تبدأ ب# تتم معاملتها كتعليقات\n#هذا لا يتأثر بحالة الحروف\n\n#ضع كل منثورات التعبيرات المنتظمة فوق هذا السطر. اترك هذا السطر تماما كما هو</pre>",
+       "tag-filter": "مرشح [[Special:Tags|الوسوم]]:"
+}
diff --git a/languages/i18n/aeb-latn.json b/languages/i18n/aeb-latn.json
new file mode 100644 (file)
index 0000000..23e30d5
--- /dev/null
@@ -0,0 +1,285 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Abanima",
+                       "Csisc",
+                       "Kuwaity26",
+                       "Malekbr",
+                       "아라",
+                       "Aħmedbaɛl",
+                       "GeekEmad"
+               ]
+       },
+       "tog-underline": "Ħotʾ stʾar taħt errabtʾa:",
+       "tog-hideminor": "Khabbi ettabdilàt essʾgħàr m ettabdilàt lekhrànìn",
+       "tog-hidepatrolled": "Khabbi ettabdilàt elmagħsous għlihom m ettabdilàt lekhrànìn",
+       "tog-newpageshidepatrolled": "Khabbi elpàjàt elmagħsous għlihom m ellista mtagħ elpàjàt ejjdida",
+       "tog-extendwatchlist": "Wassegħ ellista mtagħ elgħassa bech twarri ettabdilàt elkoll, w mouch lekhrànìn kahaw",
+       "tog-numberheadings": "Nwàmer otomatik l ettitrouàt mtagħ esseksyon",
+       "tog-watchcreations": "Zid elpàjàt elli għmalt'hom w elfichyéàt elli tʾallagħt'hom l ellista mtagħ elgħassa mtagħi",
+       "tog-watchdefault": "Zid elpàjàt w elfichyéàt elli nbaddelhom l ellista mtagħ elgħassa mtagħi",
+       "tog-watchmoves": "Zid elpàjàt w elfichyéàt elli nhezzhom, l ellista mtagħ elgħassa mtagħi",
+       "tog-watchdeletion": "Zid elpàjàt w elfichyéàt elli nnaħħihom l ellista mtagħ elgħassa mtagħi",
+       "tog-minordefault": "Marki ettabdilàt essʾghàr elkoll par défo",
+       "tog-previewontop": "Warri tʾalla għla chsʾàr qbal ħokket ettabdil",
+       "tog-previewonfirst": "Warri tʾalla għla chsʾàr f ettabdila lawlàniya",
+       "tog-enotifwatchlistpages": "Abgħethli mail waqtelli pàj wella fichyé m ellista mtagħ elgħassa mtagħi tbaddel",
+       "tog-enotifusertalkpages": "Abgħethli mail watelli elpàj mtagħ leħdith mtagħi tetbaddel",
+       "tog-enotifminoredits": "Abgħethli mail zàda għattabdilàt essʾghàr mtagħ elpàjàt w elfichyéàt",
+       "tog-enotifrevealaddr": "Warri ladrisa mail mtagħi f elmailàt mtagħ ennotifikasyon",
+       "tog-shownumberswatching": "Warri għdad lutilizateuràt elgħassàsa",
+       "tog-oldsig": "Ettosʾħàħa elmawjouda:",
+       "underline-always": "Dima",
+       "underline-never": "Jemla",
+       "sunday": "Il-Eḩed",
+       "monday": "Il-Iŧnîn",
+       "tuesday": "Iŧ-Ŧlêŧ",
+       "wednesday": "Il-Irbģe",
+       "thursday": "Il-Xmîs",
+       "friday": "Ij-Jimģe",
+       "saturday": "Is-Sibt",
+       "sun": "Il-Eḩed",
+       "mon": "el ithnaine",
+       "tue": "ethlath",
+       "wed": "elirb3a",
+       "thu": "el5mis",
+       "fri": "ejjom3a",
+       "sat": "essibt",
+       "january": "Jânfi",
+       "february": "Fîvrî",
+       "march": "Mâris",
+       "april": "Avrîl",
+       "may_long": "Mêy",
+       "june": "Jweñ",
+       "july": "Jwîlye",
+       "august": "Ût",
+       "september": "Siptombir",
+       "october": "Uktobir",
+       "november": "Nuvombir",
+       "december": "Disombir",
+       "january-gen": "Janvi",
+       "february-gen": "Fîvrî",
+       "march-gen": "Mars",
+       "april-gen": "Avril",
+       "may-gen": "Mai",
+       "june-gen": "Juin",
+       "july-gen": "Juilia",
+       "august-gen": "Août",
+       "september-gen": "Septembre",
+       "october-gen": "Octobre",
+       "november-gen": "Novembre",
+       "december-gen": "Décembre",
+       "jan": "Jan.",
+       "feb": ".Fiv",
+       "mar": "Mâris",
+       "apr": "Avr.",
+       "may": "Mêy",
+       "jun": "Jweñ",
+       "jul": "Jwi.",
+       "aug": "Ût",
+       "sep": "Sep.",
+       "oct": "Okt.",
+       "nov": ".Nov",
+       "dec": "Des.",
+       "pagecategories": "{{PLURAL:Catégorie weħed|Zouz catégories|$1 catégories|$1 en catégorie}}",
+       "hidden-categories": "{{PLURAL:Catégorie mkhabia waħda|Zouz catégories mkhabbin|$1 catégories mkhabbin|$1 en catégorie mkhabia}}",
+       "cancel": "ifsa5",
+       "moredotdotdot": "Akther...",
+       "anontalk": "Tħaddeth mgħa ladrisa IP hadhi",
+       "navigation": "Ḩawwis",
+       "and": "&#32;w",
+       "qbfind": "Lawwej",
+       "qbbrowse": "Navigi",
+       "qbedit": "Baddel",
+       "qbpageoptions": "Elpàj hadhi",
+       "qbmyoptions": "Pàjàti",
+       "faq": "FAQ",
+       "faqpage": "Project:FAQ",
+       "actions": "Aksyonàt",
+       "namespaces": "Blâyiş il-asêmî",
+       "variants": "Tanwîģât",
+       "navigation-heading": "il-mënü mtêģ in-navigâsyioñ",
+       "errorpagetitle": "Għaltʾa",
+       "returnto": "Arjagħ l $1.",
+       "tagline": "Min {{SITENAME}}",
+       "help": "Mģâwne",
+       "search": "Lawwij",
+       "searchbutton": "Lawwij",
+       "go": "Emchi",
+       "searcharticle": "Imcî",
+       "history": "Listorik mtagħ elpàj",
+       "history_short": "Il-istorîk",
+       "updatedmarker": "tbaddlet melli jit àkher marra",
+       "printableversion": "Kopî bêc tiţbaģhê",
+       "permalink": "lieñ yoqģod dîme dîme",
+       "print": "Atʾbagħ",
+       "view": "Aqra",
+       "edit": "Baddil",
+       "create": "Agħmel",
+       "editthispage": "Baddel f elpàj hadhi",
+       "create-this-page": "Agħmel elpàj hadhi",
+       "delete": "Afsakh",
+       "deletethispage": "Afsakh elpàj hadhi",
+       "undelete_short": "Rajjagħ{{PLURAL:$1|tabdila waħda|$1 tabdila}}",
+       "viewdeleted_short": "Warri {{PLURAL:$1|tabdila waħda mafsoukha|$1 tabdila mafsoukha}}",
+       "protect": "Ħàmi",
+       "protect_change": "baddel",
+       "protectthispage": "Ħàmi għal pàj hadhi",
+       "unprotect": "Baddel elħimàya",
+       "unprotectthispage": "Baddel elħimàya mtagħ elpàj hadhi",
+       "newpage": "Pàj jdida",
+       "talkpage": "Tħaddeth għal pàj hadhi",
+       "talkpagelinktext": "Ḩdîŧ",
+       "specialpage": "Sʾafħa spesyàl",
+       "personaltools": "Mêģûnik",
+       "articlepage": "Warri elpàj mtagħ elkontenu",
+       "talk": "Ḩdiŧ",
+       "views": "Manḑer",
+       "toolbox": "Mêģûn",
+       "userpage": "Chour elpàj mtagħ lutilizateur",
+       "projectpage": "Chouf elpàj mtagħ leprojé",
+       "imagepage": "Chouf elpàj mtagħ elfichyé",
+       "mediawikipage": "Chouf elpàj mtagħ elmessàj",
+       "templatepage": "Chouf elpàj mtagħ elmodàl",
+       "viewhelppage": "Chouf elpàj mtagħ lemgħàwna",
+       "categorypage": "Chouf elpàj mtagħ elkatégori",
+       "viewtalkpage": "Chouf leħdith",
+       "otherlanguages": "B-lûğât okhrîne",
+       "redirectedfrom": "(Tħawwelt men $1)",
+       "redirectpagesub": "Pàj mtagħ taħwil",
+       "lastmodifiedat": "Il-pâj hêđî tbadlit êxir merre nhâr $1, mģa $2.",
+       "viewcount": "Elpàj hadhi dakhloulha {{PLURAL:$1|marra waħda|$1 marra}}.",
+       "protectedpage": "Pàj protéjé",
+       "jumpto": "Imcî l-:",
+       "jumptonavigation": "Ḩawwis",
+       "jumptosearch": "Lawwij",
+       "view-pool-error": "Pardon, esserveuràt tàgħba tawwa.\nBarcha għbàd yħebbou ychoufou nafs elpàj.\nYgħaychek estanna chway qbal ma tjarreb bech todkhel l elpàj hadhi marra okhra.\n\n\n$1",
+       "pool-timeout": "Waqt esstennya wfa",
+       "pool-queuefull": "Essʾaf mgħabbi",
+       "pool-errorunknown": "Ghaltʾa ma nagħrfouhàch",
+       "aboutsite": "Fîme yxoş {{SITENAME}}",
+       "aboutpage": "Project:Fîme yxoş",
+       "copyrightpage": "{{ns:project}}:Copyrights",
+       "currentevents": "Elli sʾàyer tawwa",
+       "currentevents-url": "Project:Elli sʾàyer tawwa",
+       "disclaimers": "Tambîhêt",
+       "disclaimerpage": "Project:Tambîhêt ģâmme",
+       "edithelp": "Mgħàwna f elktiba",
+       "mainpage": "Il-pâj il-ewelêniye",
+       "mainpage-description": "Il-Pâj il-ewelêniye",
+       "policy-url": "Project:Elpolitik",
+       "portal": "Daxlit il-mujtamaģ",
+       "portal-url": "Project:Mujtamaģ",
+       "privacy": "Is-siyêse mteģ il-konfîdonsyalîtê",
+       "privacypage": "Project:Il-polîtîk mtêģ il-konfîdoñsyalîtê",
+       "ok": "ok",
+       "retrievedfrom": "Tixđêt min- \"$1\"",
+       "editsection": "Baddil iş-şafḩa",
+       "editold": "Baddil",
+       "viewsourceold": "Warri essours",
+       "editlink": "baddil",
+       "viewsourcelink": "Warri is-sûrs",
+       "editsectionhint": "Baddil is-sêksyioñ: $1",
+       "toc": "Contenu",
+       "showtoc": "Warri",
+       "hidetoc": "Khabbi",
+       "collapsible-collapse": "Tʾabbes",
+       "collapsible-expand": "Wassegħ",
+       "thisisdeleted": "Warri wella rajjagħ $1؟",
+       "viewdeleted": "Warri $1؟",
+       "site-atom-feed": "Flü Atom mtêģ $1",
+       "red-link-title": "$1 (Iş-Şafḩa mûc mawjûde)",
+       "nstab-main": "Şafḩa",
+       "nstab-special": "Safḩa spêsyâl",
+       "nstab-image": "Fichier",
+       "nstab-mediawiki": "Messàj",
+       "error": "ghalath",
+       "missing-article": "Elbase de données malqatech ettexte mtaε essafħa elli supposée talqaha, welli esmha \"$1\" $2.\n\nHedha elli ysir elεada waqtelli tħel farq qdim walla lien mtaε l'historique mtaε safħa tnaħħat.\n\nIdha ken mouch hedheka li sar, rak momken lqit mochkla fel programme.\nAman qoul elweħeb mel les [[Special:ListUsers/sysop|administrateurs]], waεtih ellien elli ħabit temchilou.",
+       "delete-hook-aborted": "faskhan wa9fou flash.\nmahouwech mobarrar",
+       "exception-nologin-text": "hedhi ess'af7a wa 2ella el action te7tej mennek bech etloginni il hedha el wiki",
+       "nav-login-createaccount": "Connecti / aεmel compte",
+       "pt-login": "Odkul",
+       "pt-createaccount": "Aģmil koñt",
+       "resetpass-submit-cancel": "ifsa5",
+       "template-protected": "(protégé)",
+       "revisionasof": "Version mtaε $1",
+       "lineno": "Sţar $1:",
+       "editundo": "Rajjaģ",
+       "searchresults": "Ir-rêzultâ mtêģ it-talwîj",
+       "searchresults-title": "Ir-rêzultâ mtêģ it-talwîj ģlâ \"$1\"",
+       "shown-title": " Warri{{PLURAL:Résultat weħed|Zouz résultats|$1  résultats|$1 en résultat}} men kol safħa",
+       "viewprevnext": "Chouf ($1 {{int:pipe-separator}} $2) ($3)",
+       "searchmenu-exists": "'''famma ss'af7a ismha \"[[:$1]]\" fi hedha el wiki.'''",
+       "searchprofile-articles": "Safħat mtaε contenu",
+       "searchprofile-images": "Multimédia",
+       "searchprofile-everything": "Kol chay",
+       "searchprofile-advanced": "Avancé",
+       "searchprofile-articles-tooltip": "Farkes fi $1",
+       "searchprofile-images-tooltip": "Farkes f'elfichiers",
+       "searchprofile-everything-tooltip": "Farkes kol chay (ħatta safħat leħdith)",
+       "searchprofile-advanced-tooltip": "Ekhtar les espaces de noms elli bech tfarkes εlihom",
+       "search-result-size": "$1 ({{PLURAL:Ħatta kelma|Kelma waħda|Kelmtin|$2 kelmat|$2 en kelma}})",
+       "search-section": "(section $1)",
+       "action-edit": "modifi hal page",
+       "recentchanges": "Ajadd tabdîlêt",
+       "diff": "Farq",
+       "hist": "Hîst",
+       "minoreditletter": "thafif",
+       "newpageletter": "jadid",
+       "boteditletter": "bot",
+       "rc-change-size-new": "$1 {{PLURAL:$1|oktê}} baģd it-tabdîl",
+       "recentchangeslinked-toolbox": "Tabdilet them",
+       "upload": "Abεeth des fichiers l'esserveur",
+       "license-header": "licence",
+       "file-anchor-link": "milaf (Fichier)",
+       "filehist": "Têrîx il-mîlaf",
+       "filehist-comment": "ta3li9at",
+       "randompage": "Şafħa kîmê tjî",
+       "nbytes": "{{PLURAL:Octet weħed|Zouz octets|$1 octets|$1 en octet}}",
+       "newpages": "Safħat jdod",
+       "allpages": "kol ess'afa7at",
+       "allarticles": "kol ess'afa7at",
+       "rollbacklink": "rajjaε",
+       "blanknamespace": "(Ra'îsî)",
+       "uctop": "(top)",
+       "sp-contributions-submit": "lawwej",
+       "whatlinkshere": "Cnûwwe illi ywassil l-hûnî",
+       "whatlinkshere-page": "ss'af7a:",
+       "whatlinkshere-prev": "{{PLURAL:$1|previous|previous $1}}",
+       "blocklink": "Bloqui",
+       "contribslink": "Mûsêhmêt",
+       "thumbnail-more": "Kabbir",
+       "tooltip-pt-login": "Međebîne kên itkoññektî, eme mûc bis-sîf",
+       "tooltip-pt-createaccount": "Međebîne law kên taģmil koñt w todxul, Lêkin mêkc maţlûb bêc taģmil hêđê.",
+       "tooltip-ca-talk": "Disküsyioñ ģal-koñtënü mtêģ il-pâj",
+       "tooltip-ca-edit": "Tnejjem tbaddil iş-şafḩa hêđi. Amân inzil ģal-bûtoñ mtêģ il-vû il-msebqa qbal mê tsijjil.",
+       "tooltip-ca-viewsource": "Essʾafħa protéjé.\nTnajjem tchouf essours mtaħħa.",
+       "tooltip-ca-history": "Copiet qdom mtaε essafħa hedhi",
+       "tooltip-search": "Lawwij fî- {{SITENAME}}",
+       "tooltip-search-go": "Imcî l-pâj b-nafs il-ism îđê lqîthê",
+       "tooltip-search-fulltext": "Farkis fiş-şafḩât ģat-têkst hêđa",
+       "tooltip-p-logo": "Emchi lil-pâj il-ewelêniye",
+       "tooltip-n-mainpage": "Imchi lil-pâj il-ewelêniye",
+       "tooltip-n-mainpage-description": "Imchi lil-pâj il-ewelêniye",
+       "tooltip-n-portal": "Ģal-macrûģ, cnûwwe tnijjim taģmil, wîn tilqâ illi ḩajtik bîh",
+       "tooltip-n-currentevents": " Alqa information εla aham laħdeth mtaε tawa",
+       "tooltip-n-recentchanges": "Lîste mtêģ ajadd it-tabdîlêt fil-wiki",
+       "tooltip-n-randompage": "Ḩil iş-şafḩe illî tjî",
+       "tooltip-n-help": "Il-blâşa bêc tilqâ fîhe",
+       "tooltip-t-whatlinkshere": "Lîste mtêģ iş-şafḩât il-wiki il-kul illi twassil l-hûni",
+       "tooltip-t-recentchangeslinked": "Aham ettabldilet f'essafħat elli ywaslou l'essafħa hedhi",
+       "tooltip-t-upload": "Abεeth des fichiers l'esserveur",
+       "tooltip-t-specialpages": "Lîste mtêģ iş-şafħât is-spêsyal il-kul",
+       "tooltip-t-print": "Vêrsyoñ titiţbaģ min hal-pâj..",
+       "tooltip-t-permalink": "Lien dayem l'elversion hedhi mtaε essafħa",
+       "tooltip-ca-nstab-main": "Chouf elcontenu mtaε essafħa",
+       "tooltip-rollback": "\"Rajjaģ\" yrajjiģ it-tabdîlêt f'hassafħa el'ekher weħed baddel fi nazla waħda.",
+       "pageinfo-toolboxlink": "Maģlûmêt ģalâ hal-pâj",
+       "show-big-image": "il-fîcyê il-aşlî",
+       "bad_image_list": "Elformat kima hakka:\nLes élements mtaε lista (lostra elli yabdew b' *) yetħesbou.\nEllien lowel fi star yelzmou ykoun lien el fichier khayeb.\nAy lien ekher fi nafs estar yetħseb exception, maħneha des pages win elfichier ynajem ykoun fi star.",
+       "watchlistedit-clear-explain": "Elɛanawin lkol bech yetnaħaw mel'lista mteɛek",
+       "watchlistedit-clear-titles": "Elɛanawin",
+       "watchlistedit-too-many": "Famma barcha pajet w'manajmouch nħotouhom lkol lahné",
+       "specialpages": "Safḩât spêsyâl",
+       "searchsuggest-search": "Lawwij"
+}
diff --git a/languages/i18n/aeb.json b/languages/i18n/aeb.json
deleted file mode 100644 (file)
index 2603d59..0000000
+++ /dev/null
@@ -1,924 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "Abanima",
-                       "Csisc",
-                       "Kuwaity26",
-                       "Malekbr",
-                       "아라",
-                       "Aħmedbaɛl",
-                       "GeekEmad"
-               ]
-       },
-       "tog-underline": "Ħotʾ stʾar taħt errabtʾa:",
-       "tog-hideminor": "Khabbi ettabdilàt essʾgħàr m ettabdilàt lekhrànìn",
-       "tog-hidepatrolled": "Khabbi ettabdilàt elmagħsous għlihom m ettabdilàt lekhrànìn",
-       "tog-newpageshidepatrolled": "Khabbi elpàjàt elmagħsous għlihom m ellista mtagħ elpàjàt ejjdida",
-       "tog-extendwatchlist": "Wassegħ ellista mtagħ elgħassa bech twarri ettabdilàt elkoll, w mouch lekhrànìn kahaw",
-       "tog-usenewrc": ")جمّع التعديلات حسب الصفحة في أحدث التغييرات وقائمة المراقبة (يتطلب جافاسكربت",
-       "tog-numberheadings": "Nwàmer otomatik l ettitrouàt mtagħ esseksyon",
-       "tog-showtoolbar": "أظهر شريط التحرير (يتطلب جافاسكربت)",
-       "tog-editondblclick": "عدل الصفحات عند الضغط المزدوج (جافاسكربت)",
-       "tog-editsectiononrightclick": "فعل تعديل الأقسام بواسطة كبسة الفأرة اليمين على عناوين الأقسام (جافاسكريبت)",
-       "tog-watchcreations": "Zid elpàjàt elli għmalt'hom w elfichyéàt elli tʾallagħt'hom l ellista mtagħ elgħassa mtagħi",
-       "tog-watchdefault": "Zid elpàjàt w elfichyéàt elli nbaddelhom l ellista mtagħ elgħassa mtagħi",
-       "tog-watchmoves": "Zid elpàjàt w elfichyéàt elli nhezzhom, l ellista mtagħ elgħassa mtagħi",
-       "tog-watchdeletion": "Zid elpàjàt w elfichyéàt elli nnaħħihom l ellista mtagħ elgħassa mtagħi",
-       "tog-minordefault": "Marki ettabdilàt essʾghàr elkoll par défo",
-       "tog-previewontop": "Warri tʾalla għla chsʾàr qbal ħokket ettabdil",
-       "tog-previewonfirst": "Warri tʾalla għla chsʾàr f ettabdila lawlàniya",
-       "tog-enotifwatchlistpages": "Abgħethli mail waqtelli pàj wella fichyé m ellista mtagħ elgħassa mtagħi tbaddel",
-       "tog-enotifusertalkpages": "Abgħethli mail watelli elpàj mtagħ leħdith mtagħi tetbaddel",
-       "tog-enotifminoredits": "Abgħethli mail zàda għattabdilàt essʾghàr mtagħ elpàjàt w elfichyéàt",
-       "tog-enotifrevealaddr": "Warri ladrisa mail mtagħi f elmailàt mtagħ ennotifikasyon",
-       "tog-shownumberswatching": "Warri għdad lutilizateuràt elgħassàsa",
-       "tog-oldsig": "Ettosʾħàħa elmawjouda:",
-       "tog-fancysig": "عامل التوقيع كنص ويكي (بدون وصلة أوتوماتيكية)",
-       "tog-uselivepreview": "استخدم الاستعراض السريع (جافاسكريبت) (تجريبي)",
-       "tog-forceeditsummary": "نبهني عند إدخال ملخص تعديل فارغ",
-       "tog-watchlisthideown": "أخف تعديلاتي من قائمة المراقبة",
-       "tog-watchlisthidebots": "أخف تعديلات البوت من قائمة المراقبة",
-       "tog-watchlisthideminor": "أخف التعديلات الطفيفة من قائمة المراقبة",
-       "tog-watchlisthideliu": "أخف تعديلات المستخدمين المسجلين من قائمة المراقبة",
-       "tog-watchlisthideanons": "أخف تعديلات المستخدمين المجهولين من قائمة المراقبة",
-       "tog-watchlisthidepatrolled": "أخف التعديلات المراجعة من قائمة المراقبة",
-       "tog-ccmeonemails": "أرسل لي نسخا من رسائل البريد الإلكتروني التي أرسلها للمستخدمين الآخرين",
-       "tog-diffonly": "لا تعرض محتوى الصفحة أسفل الفروقات",
-       "tog-showhiddencats": "أظهر التصنيفات المخفية",
-       "tog-norollbackdiff": "أزل الفرق بعد القيام باسترجاع",
-       "underline-always": "Dima",
-       "underline-never": "Jemla",
-       "underline-default": "تبعا لإعدادات المتصفح",
-       "editfont-style": "نمط خط منطقة التحرير:",
-       "editfont-default": "تبعا لإعدادات المتصفح",
-       "editfont-monospace": "خط ثابت العرض",
-       "editfont-sansserif": "خط بلا زوائد",
-       "editfont-serif": "خط بزوائد",
-       "sunday": "Il-Eḩed",
-       "monday": "Il-Iŧnîn",
-       "tuesday": "Iŧ-Ŧlêŧ",
-       "wednesday": "Il-Irbģe",
-       "thursday": "Il-Xmîs",
-       "friday": "Ij-Jimģe",
-       "saturday": "Is-Sibt",
-       "sun": "Il-Eḩed",
-       "mon": "el ithnaine",
-       "tue": "ethlath",
-       "wed": "elirb3a",
-       "thu": "el5mis",
-       "fri": "ejjom3a",
-       "sat": "essibt",
-       "january": "Jânfi",
-       "february": "Fîvrî",
-       "march": "Mâris",
-       "april": "Avrîl",
-       "may_long": "Mêy",
-       "june": "Jweñ",
-       "july": "Jwîlye",
-       "august": "Ût",
-       "september": "Siptombir",
-       "october": "Uktobir",
-       "november": "Nuvombir",
-       "december": "Disombir",
-       "january-gen": "Janvi",
-       "february-gen": "Fîvrî",
-       "march-gen": "Mars",
-       "april-gen": "Avril",
-       "may-gen": "Mai",
-       "june-gen": "Juin",
-       "july-gen": "Juilia",
-       "august-gen": "Août",
-       "september-gen": "Septembre",
-       "october-gen": "Octobre",
-       "november-gen": "Novembre",
-       "december-gen": "Décembre",
-       "jan": "Jan.",
-       "feb": ".Fiv",
-       "mar": "Mâris",
-       "apr": "Avr.",
-       "may": "Mêy",
-       "jun": "Jweñ",
-       "jul": "Jwi.",
-       "aug": "Ût",
-       "sep": "Sep.",
-       "oct": "Okt.",
-       "nov": ".Nov",
-       "dec": "Des.",
-       "pagecategories": "{{PLURAL:Catégorie weħed|Zouz catégories|$1 catégories|$1 en catégorie}}",
-       "category_header": "صفحات تصنيف \"$1\"",
-       "subcategories": "التصنيفات الفرعية",
-       "category-media-header": "الوسائط في التصنيف \"$1\"",
-       "category-empty": "''هذا التصنيف لا يحتوي حاليا على صفحات أو وسائط.''",
-       "hidden-categories": "{{PLURAL:Catégorie mkhabia waħda|Zouz catégories mkhabbin|$1 catégories mkhabbin|$1 en catégorie mkhabia}}",
-       "hidden-category-category": "تصنيفات مخفية",
-       "category-subcat-count": "{{PLURAL:$2|لا تصانيف فرعية في هذا التصنيف|هذا التصنيف فيه التصنيف الفرعي التالي فقط.|هذا التصنيف فيه {{PLURAL:$1||هذا التصنيف الفرعي|هذين التصنيفين الفرعيين|هذه ال$1 تصانيف الفرعية|هذه ال$1 تصنيفا فرعيا|هذه ال$1 تصنيف فرعي}}، من إجمالي $2.}}",
-       "category-subcat-count-limited": "هذا التصنيف فيه {{PLURAL:$1||التصنيف الفرعي التالي|التصنيفين الفرعيين التاليين|$1 تصانيف فرعية تالية|$1 تصنيفا فرعيا تاليا|$1 تصنيف فرعي تالي}}.",
-       "category-article-count": "{{PLURAL:$2|لا يحتوي هذا التصنيف أي صفحات.|هذا التصنيف يحتوي على الصفحة التالية فقط.|{{PLURAL:$1||الصفحة التالية|الصفحتان التاليتان|ال$1 صفحات التالية|ال$1 صفحة التالية|ال$1 صفحة التالية}} في هذا التصنيف، من إجمالي $2.}}",
-       "category-article-count-limited": "{{PLURAL:$1||الصفحة التالية|الصفحتان التاليتان|ال$1 صفحات التالية|ال$1 صفحة التالية|ال$1 صفحة التالية}} في التصنيف الحالي.",
-       "category-file-count": "{{PLURAL:$2|لا يحتوي هذا التصنيف أي صفحات.|هذا التصنيف يحتوي على الصفحة التالية فقط.|{{PLURAL:$1||الصفحة التالية|الصفحتان التاليتان|ال$1 صفحات التالية|ال$1 صفحة التالية|ال$1 صفحة التالية}} في هذا التصنيف، من إجمالي $2.}}",
-       "category-file-count-limited": "{{PLURAL:$1|الملف التالي|الملفان التاليان|ال$1 ملفات التالية|ال$1 ملفًا تاليًا|ال$1 ملف تالٍ}} في التصنيف الحالي.",
-       "listingcontinuesabbrev": "متابعة",
-       "index-category": "صفحات مفهرسة",
-       "noindex-category": "صفحات غير مفهرسة",
-       "broken-file-category": "صفحات تحتوي وصلات ملفات معطوبة",
-       "about": "عن",
-       "article": "صفحة محتوى",
-       "newwindow": "(تفتح في نافذة جديدة)",
-       "cancel": "ifsa5",
-       "moredotdotdot": "Akther...",
-       "mypage": "صفحتي",
-       "mytalk": "نقاشي",
-       "anontalk": "Tħaddeth mgħa ladrisa IP hadhi",
-       "navigation": "Ḩawwis",
-       "and": "&#32;w",
-       "qbfind": "Lawwej",
-       "qbbrowse": "Navigi",
-       "qbedit": "Baddel",
-       "qbpageoptions": "Elpàj hadhi",
-       "qbmyoptions": "Pàjàti",
-       "faq": "FAQ",
-       "faqpage": "Project:FAQ",
-       "actions": "Aksyonàt",
-       "namespaces": "Blâyiş il-asêmî",
-       "variants": "Tanwîģât",
-       "navigation-heading": "il-mënü mtêģ in-navigâsyioñ",
-       "errorpagetitle": "Għaltʾa",
-       "returnto": "Arjagħ l $1.",
-       "tagline": "Min {{SITENAME}}",
-       "help": "Mģâwne",
-       "search": "Lawwij",
-       "searchbutton": "Lawwij",
-       "go": "Emchi",
-       "searcharticle": "Imcî",
-       "history": "Listorik mtagħ elpàj",
-       "history_short": "Il-istorîk",
-       "updatedmarker": "tbaddlet melli jit àkher marra",
-       "printableversion": "Kopî bêc tiţbaģhê",
-       "permalink": "lieñ yoqģod dîme dîme",
-       "print": "Atʾbagħ",
-       "view": "Aqra",
-       "edit": "Baddil",
-       "create": "Agħmel",
-       "editthispage": "Baddel f elpàj hadhi",
-       "create-this-page": "Agħmel elpàj hadhi",
-       "delete": "Afsakh",
-       "deletethispage": "Afsakh elpàj hadhi",
-       "undelete_short": "Rajjagħ{{PLURAL:$1|tabdila waħda|$1 tabdila}}",
-       "viewdeleted_short": "Warri {{PLURAL:$1|tabdila waħda mafsoukha|$1 tabdila mafsoukha}}",
-       "protect": "Ħàmi",
-       "protect_change": "baddel",
-       "protectthispage": "Ħàmi għal pàj hadhi",
-       "unprotect": "Baddel elħimàya",
-       "unprotectthispage": "Baddel elħimàya mtagħ elpàj hadhi",
-       "newpage": "Pàj jdida",
-       "talkpage": "Tħaddeth għal pàj hadhi",
-       "talkpagelinktext": "Ḩdîŧ",
-       "specialpage": "Sʾafħa spesyàl",
-       "personaltools": "Mêģûnik",
-       "articlepage": "Warri elpàj mtagħ elkontenu",
-       "talk": "Ḩdiŧ",
-       "views": "Manḑer",
-       "toolbox": "Mêģûn",
-       "userpage": "Chour elpàj mtagħ lutilizateur",
-       "projectpage": "Chouf elpàj mtagħ leprojé",
-       "imagepage": "Chouf elpàj mtagħ elfichyé",
-       "mediawikipage": "Chouf elpàj mtagħ elmessàj",
-       "templatepage": "Chouf elpàj mtagħ elmodàl",
-       "viewhelppage": "Chouf elpàj mtagħ lemgħàwna",
-       "categorypage": "Chouf elpàj mtagħ elkatégori",
-       "viewtalkpage": "Chouf leħdith",
-       "otherlanguages": "B-lûğât okhrîne",
-       "redirectedfrom": "(Tħawwelt men $1)",
-       "redirectpagesub": "Pàj mtagħ taħwil",
-       "lastmodifiedat": "Il-pâj hêđî tbadlit êxir merre nhâr $1, mģa $2.",
-       "viewcount": "Elpàj hadhi dakhloulha {{PLURAL:$1|marra waħda|$1 marra}}.",
-       "protectedpage": "Pàj protéjé",
-       "jumpto": "Imcî l-:",
-       "jumptonavigation": "Ḩawwis",
-       "jumptosearch": "Lawwij",
-       "view-pool-error": "Pardon, esserveuràt tàgħba tawwa.\nBarcha għbàd yħebbou ychoufou nafs elpàj.\nYgħaychek estanna chway qbal ma tjarreb bech todkhel l elpàj hadhi marra okhra.\n\n\n$1",
-       "pool-timeout": "Waqt esstennya wfa",
-       "pool-queuefull": "Essʾaf mgħabbi",
-       "pool-errorunknown": "Ghaltʾa ma nagħrfouhàch",
-       "aboutsite": "Fîme yxoş {{SITENAME}}",
-       "aboutpage": "Project:Fîme yxoş",
-       "copyright": "المحتوى متوفر تحت $1.",
-       "copyrightpage": "{{ns:project}}:Copyrights",
-       "currentevents": "Elli sʾàyer tawwa",
-       "currentevents-url": "Project:Elli sʾàyer tawwa",
-       "disclaimers": "Tambîhêt",
-       "disclaimerpage": "Project:Tambîhêt ģâmme",
-       "edithelp": "Mgħàwna f elktiba",
-       "mainpage": "Il-pâj il-ewelêniye",
-       "mainpage-description": "Il-Pâj il-ewelêniye",
-       "policy-url": "Project:Elpolitik",
-       "portal": "Daxlit il-mujtamaģ",
-       "portal-url": "Project:Mujtamaģ",
-       "privacy": "Is-siyêse mteģ il-konfîdonsyalîtê",
-       "privacypage": "Project:Il-polîtîk mtêģ il-konfîdoñsyalîtê",
-       "badaccess": "خطأ في السماح",
-       "badaccess-group0": "ليس من المسموح لك تنفيذ الفعل الذي طلبته.",
-       "badaccess-groups": "الفعل الذي طلبته مقصور على المستخدمين في {{PLURAL:$2||مجموعة|واحدة من مجموعتي|واحدة من مجموعات}}: $1.",
-       "versionrequired": "تلزم نسخة $1 من ميدياويكي",
-       "versionrequiredtext": "تلزم النسخة $1 من ميدياويكي لاستعمال هذه الصفحة. انظر [[Special:Version|صفحة النسخة]]",
-       "ok": "ok",
-       "retrievedfrom": "Tixđêt min- \"$1\"",
-       "youhavenewmessages": "توجد لديك $1 ($2).",
-       "youhavenewmessagesmulti": "لديك رسائل جديدة على $1",
-       "editsection": "Baddil iş-şafḩa",
-       "editold": "Baddil",
-       "viewsourceold": "Warri essours",
-       "editlink": "baddil",
-       "viewsourcelink": "Warri is-sûrs",
-       "editsectionhint": "Baddil is-sêksyioñ: $1",
-       "toc": "Contenu",
-       "showtoc": "Warri",
-       "hidetoc": "Khabbi",
-       "collapsible-collapse": "Tʾabbes",
-       "collapsible-expand": "Wassegħ",
-       "thisisdeleted": "Warri wella rajjagħ $1؟",
-       "viewdeleted": "Warri $1؟",
-       "restorelink": "{{PLURAL:$1|$1 تعديل محذوف|تعديلا واحدا محذوفا|تعديلين محذوفين|$1 تعديلات محذوفة|$1 تعديلا محذوفا|$1 تعديلا محذوفا}}",
-       "feedlinks": "التغذية:",
-       "feed-invalid": "نوع اشتراك التلقيم غير صحيح.",
-       "feed-unavailable": "التلقيمات غير متوفرة",
-       "site-rss-feed": "$1 تلقيم أر إس إس",
-       "site-atom-feed": "Flü Atom mtêģ $1",
-       "page-rss-feed": "\"$1\" تلقيم أر إس إس",
-       "page-atom-feed": "$1 تلقيم أتوم",
-       "red-link-title": "$1 (Iş-Şafḩa mûc mawjûde)",
-       "sort-descending": "ترتيب تنازلي",
-       "sort-ascending": "ترتيب تصاعدي",
-       "nstab-main": "Şafḩa",
-       "nstab-user": "صفحة مستخدم",
-       "nstab-media": "صفحة وسيط",
-       "nstab-special": "Safḩa spêsyâl",
-       "nstab-project": "صفحة مشروع",
-       "nstab-image": "Fichier",
-       "nstab-mediawiki": "Messàj",
-       "nstab-template": "قالب",
-       "nstab-help": "صفحة مساعدة",
-       "nstab-category": "تصنيف",
-       "nosuchaction": "لا يوجد فعل كهذا",
-       "nosuchactiontext": "الفعل المحدد بواسطة المسار غير صحيح.\nربما تكون قد كتبت المسار بطريقة غير صحيحة، أو اتبعت وصلة غير صحيحة.\nهذا ربما يشير أيضا إلى علة في {{SITENAME}}.",
-       "nosuchspecialpage": "لا توجد صفحة خاصة بهذا الاسم",
-       "nospecialpagetext": "<strong>لقد طلبت صفحة خاصة غير صحيحة.</strong>\n\nقائمة بالصفحات الخاصة الصحيحة يمكن إيجادها في [[Special:SpecialPages|{{int:specialpages}}]].",
-       "error": "ghalath",
-       "databaseerror": "خطأ في قاعدة البيانات",
-       "laggedslavemode": "'''تحذير:''' الصفحة قد لا تحتوي على أحدث التحديثات.",
-       "readonly": "قاعدة البيانات مغلقة",
-       "enterlockreason": "أدخل سببا للغلق، متضمنا تقديرا لوقت رفع الغلق",
-       "readonlytext": "قاعدة البيانات مغلقة حاليا أمام المدخلات الجديدة والتعديلات الأخرى، السبب غالبا ما يكون الصيانة، وستعود قاعدة البيانات للوضع الطبيعي قريبا.\n\nالإداري الذي أغلق قاعدة البيانات أعطى التفسير التالي: $1",
-       "missing-article": "Elbase de données malqatech ettexte mtaε essafħa elli supposée talqaha, welli esmha \"$1\" $2.\n\nHedha elli ysir elεada waqtelli tħel farq qdim walla lien mtaε l'historique mtaε safħa tnaħħat.\n\nIdha ken mouch hedheka li sar, rak momken lqit mochkla fel programme.\nAman qoul elweħeb mel les [[Special:ListUsers/sysop|administrateurs]], waεtih ellien elli ħabit temchilou.",
-       "missingarticle-rev": "(رقم المراجعة: $1)",
-       "missingarticle-diff": "(فرق: $1، $2)",
-       "readonly_lag": "تم إغلاق قاعدة البيانات تلقائيا حتى تستطيع الخواديم التابعة ملاحقة الخادوم الرئيسي",
-       "internalerror": "خطأ داخلي",
-       "internalerror_info": "خطأ داخلي: $1",
-       "filecopyerror": "لم يمكن نسخ الملف \"$1\" إلى \"$2\".",
-       "filerenameerror": "لم يمكن إعادة تسمية الملف \"$1\" إلى \"$2\".",
-       "filedeleteerror": "لم يمكن حذف الملف \"$1\".",
-       "directorycreateerror": "لم يمكن إنشاء المجلد \"$1\".",
-       "filenotfound": "لم يمكن إيجاد الملف \"$1\".",
-       "unexpected": "قيمة غير متوقعة: \"$1\"=\"$2\".",
-       "formerror": "خطأ: لم يمكن تنفيذ الاستمارة",
-       "badarticleerror": "لا يمكن إجراء هذا الفعل على هذه الصفحة.",
-       "cannotdelete": "تعذر حذف الصفحة أو الملف \"$1\".\nربما حذفها شحص آخر.",
-       "cannotdelete-title": "لا يمكن حذف الصفحة \"$1\"",
-       "delete-hook-aborted": "faskhan wa9fou flash.\nmahouwech mobarrar",
-       "badtitle": "عنوان سيء",
-       "badtitletext": "عنوان الصفحة المطلوب إما غير صحيح أو فارغ، وربما الوصلة بين اللغات أو بين المشاريع خاطئة.\nومن الممكن وجود رموز لا تصلح للاستخدام في العناوين.",
-       "perfcached": "البيانات التالية مختزنة وقد لا تكون محدثة. {{PLURAL:$1||نتيجة واحدة|نتيجتان|$1 نتائج|$1 نتيجة}} على الأكثر {{PLURAL:$1||مختزنة|مختزنتان|مختزنة}}.",
-       "perfcachedts": "البيانات التالية مختزنة وكان آخر تحديث لها في $1. {{PLURAL:$4||نتيجة واحدة|نتيجتان|$4 نتائج|$4 نتيجة}} على الأكثر {{PLURAL:$4||مختزنة|مختزنتان|مختزنة}}.",
-       "querypage-no-updates": "التحديثات لهذه الصفحة معطلة حاليا.\nالبيانات هنا لن يتم تحديثها حاليا.",
-       "viewsource": "اعرض المصدر",
-       "viewsource-title": "إظهار مصدر $1",
-       "actionthrottled": "لا يمكن عمل المزيد من هذا الفعل",
-       "actionthrottledtext": "كإجراء ضد السبام، أنت ممنوع من إجراء هذا الفعل عدد كبير من المرات في فترة زمنية قصيرة، ولقد تجاوزت هذا الحد.\nمن فضلك حاول مرة ثانية خلال عدة دقائق.",
-       "protectedpagetext": "هذه الصفحة تمت حمايتها لمنع التعديل.",
-       "viewsourcetext": "يمكنك رؤية ونسخ مصدر هذه الصفحة:",
-       "viewyourtext": "يمكنك رؤية ونسخ مصدر ''' تعديلاتك ''' في هذه الصفحة:",
-       "protectedinterface": "هذه الصفحة توفر نص الواجهة للبرنامج، وهي مقفلة لمنع التخريب.",
-       "editinginterface": "'''تحذير:''' أنت تقوم بتحرير صفحة تستخدم في الواجهة النصية للبرنامج.\nسوف تؤثر التغييرات على هذه الصفحة على مظهر واجهة المستخدم للمستخدمين الآخرين.\nللترجمات، من فضلك استخدم مشروع ترجمة ميدياويكي [//translatewiki.net/wiki/Main_Page?setlang=ar translatewiki.net].",
-       "cascadeprotected": "تمت حماية هذه الصفحة من التعديل لأنها مدمجة في {{PLURAL:$1||الصفحة التالية، والتي|الصفحتين التاليتين، واللتين|الصفحات التالية، والتي}} تم استعمال خاصية \"حماية الصفحات المدمجة\" {{PLURAL:$1||بها|بهما|بها}}:\n$2",
-       "namespaceprotected": "لا تمتلك الصلاحية لتعديل الصفحات في نطاق '''$1'''.",
-       "customcssprotected": "أنت لا تمتلك السماح لتعديل صفحة الCSS هذه، لأنها تحتوي على الإعدادات الشخصية لمستخدم آخر.",
-       "customjsprotected": "أنت لا تمتلك السماح لتعديل صفحة الجافاسكريبت هذه، لأنها تحتوي على الإعدادات الشخصية لمستخدم آخر.",
-       "ns-specialprotected": "الصفحات الخاصة لا يمكن تعديلها.",
-       "titleprotected": "{{GENDER:$1|حمى|حمت}} [[User:$1|$1]] هذا العنوان من الإنشاء.\nالسبب المعطى هو ''$2''.",
-       "filereadonlyerror": "تعذر تعديل الملف \"$1\" لأن مستودع الملف \"$2\" في وضع القراءة فقط. \n\nالمدير الذي قام بغلقه قدم التفسير التالي: \"$3\".",
-       "invalidtitle-knownnamespace": "عنوان غير صالح في النطاق «$2» مع نص «$3»",
-       "invalidtitle-unknownnamespace": "عنوان غير صالح ذو نطاق غير معروف رقم $1 ونص «$2»",
-       "exception-nologin": "غير مسجل الدخول",
-       "exception-nologin-text": "hedhi ess'af7a wa 2ella el action te7tej mennek bech etloginni il hedha el wiki",
-       "virus-badscanner": "ضبط سيء: ماسح فيروسات غير معروف: ''$1''",
-       "virus-scanfailed": "فشل المسح (كود $1)",
-       "virus-unknownscanner": "مضاد فيروسات غير معروف:",
-       "logouttext": "'''أنت الآن غير مسجل الدخول.'''\n\nتستطيع المتابعة باستعمال {{SITENAME}} كمجهول، أو <span class='plainlinks'>[$1 الدخول مرة أخرى]</span> بنفس الاسم أو باسم آخر.\nمن الممكن أن ترى بعض الصفحات كما لو أنك مسجل الدخول، وذلك حتى تقوم بإفراغ الصفحات المختزنة في المتصفح لديك.",
-       "yourname": "اسم المستخدم:",
-       "yourpassword": "كلمة السر:",
-       "yourpasswordagain": "أعد كتابة كلمة السر:",
-       "remembermypassword": "تذكر دخولي على هذا الحاسوب (إلى {{PLURAL:$1||يوم واحد|يومين|$1 أيام|$1 يومًا|$1 يوم}} كحد أقصى)",
-       "yourdomainname": "نطاقك:",
-       "externaldberror": "هناك إما خطأ في دخول قاعدة البيانات الخارجية أو أنه غير مسموح لك بتحديث حسابك الخارجي.",
-       "login": "ادخل",
-       "nav-login-createaccount": "Connecti / aεmel compte",
-       "userlogin": "ادخل / أنشئ حسابا",
-       "userloginnocreate": "دخول",
-       "logout": "اخرج",
-       "userlogout": "خروج",
-       "notloggedin": "غير مسجل الدخول",
-       "nologin": "ألا تمتلك حسابا؟ '''$1'''.",
-       "nologinlink": "أنشئ حسابا",
-       "createaccount": "أنشئ حسابا",
-       "gotaccount": "تمتلك حسابا بالفعل؟ '''$1'''.",
-       "gotaccountlink": "ادخل",
-       "userlogin-resetlink": "أنسيت بيانات الولوج؟",
-       "createaccountmail": "بواسطة البريد الإلكتروني",
-       "createaccountreason": "السبب:",
-       "badretype": "كلمات السر التي أدخلتها لا تتطابق.",
-       "userexists": "اسم المستخدم الذي تم إدخاله مستعمل بالفعل.\nالرجاء اختيار اسم مختلف.",
-       "loginerror": "خطأ في الدخول",
-       "createaccounterror": "تعذر إنشاء حساب المستخدم: $1",
-       "nocookiesnew": "تم إنشاء حساب المستخدم، ولكنك لست مسجل الدخول بعد.\nيستخدم {{SITENAME}} كوكيز لتسجيل الدخول.\nلديك الكوكيز معطلة.\nمن فضلك فعلها، ثم سجل الدخول باسم المستخدم وكلمة السر الجديدين.",
-       "nocookieslogin": "يستخدم {{SITENAME}} الكوكيز لتسجيل الدخول.\nالكوكيز معطلة لديك.\nمن فضلك فعلها ثم حاول مرة أخرى.",
-       "nocookiesfornew": "لم يتم إنشاء حساب المستخدم، لأننا لم نستطع تأكيد مصدره. \nتأكد من أن ملفات تعريف الارتباط (الكوكيز) مفعلة عندك، ثم أعد تحميل الصفحة وحاول مرة أخرى.",
-       "noname": "لم تحدد اسم مستخدم صحيح.",
-       "loginsuccesstitle": "تم الدخول بشكل صحيح",
-       "loginsuccess": "'''لقد قمت بتسجيل الدخول ل{{SITENAME}} باسم \"$1\".'''",
-       "nosuchuser": "لا يوجد مستخدم بالاسم \"$1\".\nأسماء المستخدمين حساسة لحالة الحروف.\nتأكد من إملاء الاسم، أو [[Special:UserLogin/signup|قم بإنشاء حساب جديد]].",
-       "nosuchusershort": "لا يوجد مستخدم باسم $1\".\nتأكد من إملاء الاسم.",
-       "nouserspecified": "يجب عليك تحديد اسم مستخدم.",
-       "login-userblocked": "هذا المستخدم ممنوع. لا يسمح بالولوج.",
-       "wrongpassword": "كلمة السر التي أدخلتها غير صحيحة.\nمن فضلك حاول مرة أخرى.",
-       "wrongpasswordempty": "كلمة السر المدخلة كانت فارغة.\nمن فضلك حاول مرة أخرى.",
-       "passwordtooshort": "يجب أن تتكون كلمة السر على الأقل من {{PLURAL:$1|حرف واحد|حرفين|$1 حروف|$1 حرفا|$1 حرف}}.",
-       "password-name-match": "يجب أن تكون كلمة المرور مختلفة عن اسم المستخدم.",
-       "password-login-forbidden": "تم منع استخدام اسم المستخدم هذا وكلمة السر.",
-       "mailmypassword": "أرسل لي كلمة سر جديدة",
-       "passwordremindertitle": "كلمة سر مؤقتة جديدة ل{{SITENAME}}",
-       "passwordremindertext": "لقد طلب شخص ما (غالبا أنت، من عنوان الآيبي $1) كلمة سر جديدة ل{{SITENAME}} ($4).\nأنشئت كلمة سر مؤقتة للمستخدم \"$2\" وجعلت \"$3\".\nلو أن هذا ما تريده، فعليك أن تقوم بتسجيل الدخول واختيار كلمة سر جديدة الآن.\nسوف تنتهي مدة صلاحية كلمة سرك المؤقتة في غضون {{PLURAL:$5|أقل من يوم واحد|يوم واحد|يومين|$5 أيام|$5 يوما|$5 يوم}}.\n\nإذا كان الذي قام بهذا الطلب شخص آخر أو إذا تذكرت كلمة سرك ولا ترغب  في تغييرها، فبإمكانك أن تتجاهل هذه الرسالة وأن تستمر في استخدام كلمة سرك القديمة.",
-       "noemail": "لا يوجد عنوان بريد إلكتروني مسجل للمستخدم \"$1\".",
-       "noemailcreate": "عليك تقديم عنوان بريد إلكتروني صالح",
-       "passwordsent": "تم إرسال كلمة سر جديدة إلى عنوان البريد الإلكتروني المسجل للمستخدم \"$1\".\nمن فضلك حاول تسجيل الدخول مرة ثانية بعد استلامها.",
-       "blocked-mailpassword": "تم منع عنوان الأيبي الخاص بك من التحرير، ولمنع التخريب لا يمكنك أن تستخدم خاصية استرجاع كلمة السر.",
-       "eauthentsent": "تم إرسال رسالة تأكيد إلكترونية إلى العنوان المسمى.\nحتى ترسل أي رسالة أخرى لذلك الحساب عليك أن تتبع التعليمات الواردة في الرسالة لتأكيد أن هذا الحساب هو لك بالفعل.",
-       "throttled-mailpassword": "تم بالفعل إرسال تذكير بكلمة السر، في ال{{PLURAL:$1||ساعة الماضية|ساعتين الماضيتين|$1 ساعات الماضية|$1 ساعة الماضية}}.\nلمنع التخريب، سيتم إرسال تذكير واحد كل {{PLURAL:$1||ساعة|ساعتين|$1 ساعات|$1 ساعة}}.",
-       "mailerror": "خطأ أثناء إرسال البريد: $1",
-       "acct_creation_throttle_hit": "أنشأ زوار هذه الويكي باستخدام عنوان آيبيك {{PLURAL:$1||حسابا واحدا|حسابين|$1 حسابات|$1 حسابا|$1 حساب}} في اليوم الماضي، وهو الحد الأقصى المسموح به في هذه الفترة الزمنية.\nوكنتيجة لذلك، لن يتمكن الزوار الذين يستخدمون عنوان الأيبي هذا من إنشاء أي حسابات أخرى حاليا.",
-       "emailauthenticated": "تم تأكيد بريدك الإلكتروني في $2 الساعة $3.",
-       "emailnotauthenticated": "لم يتم التحقق من بريدك الإلكتروني.\nلن يتم إرسال رسائل لأي من الميزات التالية.",
-       "noemailprefs": "حدد عنوان بريد إلكتروني في تفضيلاتك لهذه الخصائص لتعمل.",
-       "emailconfirmlink": "أكد عنوان بريدك الإلكتروني",
-       "invalidemailaddress": "لا يمكن قبول عنوان البريد الإلكتروني حيث تبدو صيغته خاطئة.\nضع عنوانا مضبوطا أو أفرغ هذا الحقل.",
-       "cannotchangeemail": "تغيير عنوان البريد الإلكتروني لهذا الحساب غير ممكن على هذا الويكي",
-       "emaildisabled": "لا يمكن إرسال رسائل البريد الإلكتروني من هذا الموقع.",
-       "accountcreated": "تم إنشاء الحساب",
-       "accountcreatedtext": "تم إنشاء الحساب الخاص ب$1.",
-       "createaccount-title": "إنشاء حساب في {{SITENAME}}",
-       "createaccount-text": "شخص ما أنشأ حسابا لعنوان بريدك الإلكتروني في {{SITENAME}} ($4) بالاسم \"$2\"، كلمة السر \"$3\".\nينبغي عليك تسجيل الدخول وتغيير كلمة السر الخاصة بك الآن.\n\nيمكنك تجاهل هذه الرسالة، لو تم إنشاء هذا الحساب بالخطأ.",
-       "login-throttled": "لقد قمت بمحاولات دخول كثيرة جدا مؤخرا.\nمن فضلك انتظر قبل المحاولة مرة أخرى.",
-       "login-abort-generic": "لم ينجح ولوجك - إجهاض",
-       "loginlanguagelabel": "اللغة: $1",
-       "suspicious-userlogout": "رفض طلب خروجك لأنه يبدو كأنه أرسل عن طريق متصفح معطوب أو وسيط تخزين.",
-       "pt-login": "Odkul",
-       "pt-createaccount": "Aģmil koñt",
-       "php-mail-error-unknown": "خطأ غير معروف في وظيفة البريد PHP's mail()",
-       "user-mail-no-addy": "لقد حاولت إرسال بريد إلكتروني دون عنوان بريد إلكتروني.",
-       "resetpass_announce": "تم تسجيل دخولك بكلمة سر مؤقتة.\nللدخول بشكل نهائي، يجب عليك ضبط كلمة سر جديدة هنا:",
-       "resetpass_header": "غير كلمة سر الحساب",
-       "oldpassword": "كلمة السر القديمة:",
-       "newpassword": "كلمة السر الجديدة:",
-       "retypenew": "أعد كتابة كلمة السر الجديدة:",
-       "resetpass_submit": "ضبط كلمة السر والدخول",
-       "changepassword-success": "تم تغيير كلمة السر الخاصة بك بنجاح! يتم تسجيل دخولك الآن...",
-       "resetpass_forbidden": "كلمات السر لا يمكن تغييرها",
-       "resetpass-no-info": "يجب أن تكون مسجل الدخول للوصول إلى هذه الصفحة مباشرة.",
-       "resetpass-submit-loggedin": "تغيير كلمة السر",
-       "resetpass-submit-cancel": "ifsa5",
-       "resetpass-wrong-oldpass": "كلمة سر حالية أو مؤقتة غير صحيحة.\nربما تكون غيرت كلمة السر الخاصة بك بنجاح أو طلبت كلمة سر مؤقتة جديدة.",
-       "resetpass-temp-password": "كلمة سر مؤقتة:",
-       "passwordreset": "إعادة ضبط كلمة السر",
-       "passwordreset-legend": "إعادة تعيين كلمة السر",
-       "passwordreset-disabled": "عُطّلت إعادة تعيين كلمة السر على هذه الويكي.",
-       "passwordreset-username": "اسم المستخدم:",
-       "passwordreset-domain": "النطاق:",
-       "passwordreset-capture": "أأعرض البريد الإلكتروني الناتج؟",
-       "passwordreset-capture-help": "إذا علّمت هذا الصندوق فسيعرض لك البريد الإلكتروني (الذي يحتوي كلمة سر مؤقتة) وسيرسل أيضا للمستخدم.",
-       "passwordreset-email": "عنوان البريد الإلكتروني:",
-       "passwordreset-emailtitle": "تفاصيل حساب {{SITENAME}}",
-       "passwordreset-emailtext-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": "اسم المستخدم: $1\nكلمة السر المؤقتة: $2",
-       "passwordreset-emailsent": "أرسل بريد إلكتروني تذكيري",
-       "passwordreset-emailsent-capture": "أرسل بريد إلكتروني تذكيري وهو معروض بالأسفل.",
-       "passwordreset-emailerror-capture": "ولّد بريد إلكتروني تذكيري وهو معروض بالأسفل لكن فشل إرساله للمستخدم: $1",
-       "changeemail": "تغيير عنوان البريد الإلكتروني",
-       "changeemail-text": "أكمل هذا النموذج لتغيير عنوان البريد الإلكتروني. سوف تحتاج إلى إدخال كلمة السر الخاصة بك لتأكيد هذا التغيير.",
-       "changeemail-no-info": "يجب تسجيل الدخول للوصول إلى هذه الصفحة مباشرة.",
-       "changeemail-oldemail": "عنوان البريد الإلكتروني الحالي:",
-       "changeemail-newemail": "عنوان البريد الإلكتروني الجديد:",
-       "changeemail-none": "(لا شيء)",
-       "changeemail-submit": "غيّر البريد الإلكتروني",
-       "bold_sample": "نص غليظ",
-       "bold_tip": "نص غليظ",
-       "italic_sample": "نص مائل",
-       "italic_tip": "نص مائل",
-       "link_sample": "عنوان وصلة",
-       "link_tip": "وصلة داخلية",
-       "extlink_sample": "http://www.example.com عنوان الوصلة",
-       "extlink_tip": "وصلة خارجية (تذكر بادئة http://)",
-       "headline_sample": "نص عنوان رئيسي",
-       "headline_tip": "عنوان من المستوى الثاني",
-       "nowiki_sample": "أدخل النص غير المنسق هنا",
-       "nowiki_tip": "أهمل تهيئة الويكي",
-       "image_tip": "ملف مدرج",
-       "media_tip": "وصلة ملف",
-       "sig_tip": "توقيعك مع الساعة والتاريخ",
-       "hr_tip": "خط أفقي (تجنب الاستخدام بكثرة)",
-       "summary": "ملخص:",
-       "subject": "موضوع/عنوان:",
-       "minoredit": "هذا تعديل طفيف",
-       "watchthis": "راقب هذه الصفحة",
-       "savearticle": "احفظ الصفحة",
-       "preview": "معاينة",
-       "showpreview": "أظهر معاينة",
-       "showdiff": "أظهر التغييرات",
-       "anoneditwarning": "'''تحذير:''' لم تقم بالدخول.\nسيسجل عنوان الآيبي خاصتك في تاريخ هذه الصفحة.",
-       "anonpreviewwarning": "''أنت غير مسجل الدخول. الحفظ سيسجل عنوان الأيبي الخاص بك في تاريخ هذه الصفحة.''",
-       "missingsummary": "'''تنبيه:''' لم تقم بكتابة ملخص للتعديل.\nإذا قمت بضغط حفظ الصفحة مرة أخرى، فيتم حفظ تعديلك بدون ملخص.",
-       "missingcommenttext": "من فضلك أدخل تعليقا في الأسفل.",
-       "missingcommentheader": "'''تنبيه:''' لم تقم بوضع موضوع/عنوان لهذا التعليق.\nإذا قمت بالضغط على \"{{int:savearticle}}\" مجددا، سيتم حفظ تعليقك بدون عنوان.",
-       "summary-preview": "معاينة الملخص:",
-       "subject-preview": "معاينة للموضوع/العنوان:",
-       "blockedtitle": "المستخدم ممنوع",
-       "blockedtext": "'''اسم المستخدم أو عنوان الأيبي الخاص بك تم منعه.'''\n\nقام بالمنع $1.\nسبب المنع هو: ''$2''.\n\n* بداية المنع: $8\n* انتهاء المنع: $6\n* الممنوع المقصود: $7\n\nيمكنك الاتصال ب$1 أو مع أحد [[{{MediaWiki:Grouppage-sysop}}|الإداريين]] للنقاش حول المنع.\nلا يمكنك استخدام خاصية 'مراسلة هذا المستخدم' إلا إذا كنت قد وضعت عنوان بريدي صحيح في [[Special:Preferences|تفضيلات حسابك]] ولم يتم منعك من استخدامها.\nعنوان الأيبي الخاص بك حاليا هو $3، ورقم المنع هو #$5.\nمن فضلك اذكر كل التفاصيل بالأعلى في أي استعلامات تقوم بها.",
-       "autoblockedtext": "تم منع عنوان آيبيك تلقائيا لأن مستخدما آخرا ممنوعا بواسطة $1 استخدمه.\nالسبب الممنوح هو التالي:\n\n:''$2''\n\n* بداية المنع: $8\n* انتهاء المنع: $6\n* الممنوع المقصود: $7\n\nيمكنك أن تتصل ب $1 أو أحد [[{{MediaWiki:Grouppage-sysop}}|الإداريين]] الآخرين لمناقشة المنع.\n\nلاحظ أنه لا يمكنك استخدام خاصية \"إرسال رسالة لهذا المستخدم\" إلا لو كان لديك عنوان بريد إلكتروني صحيح مسجل في [[Special:Preferences|تفضيلاتك]] ولم يتم منعك من استخدامه.\n\nعنوان آيبيك الحالي $3، ورقم المنع #$5.\nمن فضلك اذكر كل التفاصيل بالأعلى في أي استعلامات تقوم بها.",
-       "blockednoreason": "لا سبب معطى",
-       "whitelistedittext": "يجب عليك $1 لتتمكن من تعديل الصفحات.",
-       "confirmedittext": "يجب عليك تأكيد بريدك الإلكتروني قبل تعديل الصفحات.\nمن فضلك اكتب وأكد بريدك الإلكتروني من خلال [[Special:Preferences|تفضيلاتك]].",
-       "nosuchsectiontitle": "تعذر إيجاد القسم",
-       "nosuchsectiontext": "لقد حاولت تحرير قسم غير موجود.\nربما يكون قد تم نقله أو حذفه أثناء مشاهدتك للصفحة.",
-       "loginreqtitle": "تسجيل الدخول مطلوب",
-       "loginreqlink": "الولوج",
-       "loginreqpagetext": "يجب عليك $1 لتشاهد صفحات أخرى.",
-       "accmailtitle": "تم إرسال كلمة السر.",
-       "accmailtext": "كلمة سر مولدة عشوائيا ل [[User talk:$1|$1]] تم إرسالها إلى $2.\n\nكلمة السر لهذا الحساب الجديد يمكن تغييرها في صفحة ''[[Special:ChangePassword|تغيير كلمة السر]]'' عند تسجيل الدخول.",
-       "newarticle": "(جديد)",
-       "newarticletext": "لقد تبعت وصلة لصفحة لم يتم إنشائها بعد.\nلإنشاء هذه الصفحة ابدأ الكتابة في الصندوق بالأسفل (انظر في [$1 صفحة المساعدة] للمزيد من المعلومات).\nإذا كانت زيارتك لهذه الصفحة بالخطأ، اضغط على زر ''رجوع'' في متصفح الإنترنت لديك.",
-       "anontalkpagetext": "----''هذه صفحة نقاش لمستخدم مجهول لم يقم بإنشاء حساب بعد أو لا يستعمل ذلك الحساب.\nلذا فيجب علينا استعمال رقم الأيبي للتعرف عليه/عليها.\nمثل هذا العنوان يمكن أن يشترك فيه عدة مستخدمين.\nلو كنت مستخدما مجهولا وتشعر بأن تعليقات لا تخصك تم توجيهها إليك، من فضلك [[Special:UserLogin/signup|أنشئ حسابا]] أو [[Special:UserLogin|سجل الدخول]] لتجنب الارتباك المستقبلي مع مستخدمين مجهولين آخرين.''",
-       "noarticletext": "Mefamme ḩatte têkst tawwe fiş-şafḩa hêđi.\nTnijjim [[Special:Search/{{PAGENAME}}|tfarkis ģal-tîtr mtêģ iş-şafħa]] fi safḩat okhrîne, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} tfarkis fil-istorîk illi ģandhom ģalêqa], \nwallê [{{fullurl:{{FULLPAGENAME}}|action=edit}} tbaddil iş-şafħa hêđi]</span>",
-       "noarticletext-nopermission": "لا يوجد حاليا أي نص في هذه الصفحة.يمكنك [[Special:Search/{{PAGENAME}}|البحث عن عنوان هذه الصفحة]] في الصفحات الأخرى,أو <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} بحث السجلات المتصلة]</span>.",
-       "userpage-userdoesnotexist": "حساب المستخدم \"<nowiki>$1</nowiki>\" غير مسجل.\nمن فضلك تأكد أنك تريد إنشاء/تعديل هذه الصفحة.",
-       "userpage-userdoesnotexist-view": "حساب المستخدم \"$1\" غير مسجل.",
-       "blocked-notice-logextract": "هذا المستخدم ممنوع حاليا.\nآخر مدخلة في سجل المنع موفرة بالأسفل كمرجع:",
-       "clearyourcache": "'''ملاحظة:''' بعد الحفظ, أنت ربما تحتاج إلى إفراغ كاش متصفحك لرؤية التغييرات.\n* '''فيرفكس / سفاري:''' اضغط ''Shift'' أثناء ضغط ''Reload'', أو اضغط أيا من ''Ctrl-F5'' أو ''Ctrl-R'' (''⌘-R'' على ماك)\n* '''جوجل كروم:''' اضغط ''Ctrl-Shift-R'' (''⌘-Shift-R'' على ماك)\n* '''إنترنت إكسبلورر:''' اضغط ''Ctrl'' أثناء ضغط ''Refresh''، أو اضغط ''Ctrl-F5''\n* '''كنكرر:''' اضغط ''Reload'' أو اضغط ''F5''\n* '''أوبرا:''' أفرغ الكاش في ''Tools → Preferences''",
-       "usercssyoucanpreview": "'''ملاحظة:''' استعمل زر \"{{int:showpreview}}\" لتجربة CSS الجديد قبل حفظ الصفحة.",
-       "userjsyoucanpreview": "'''ملاحظة:''' استعمل زر \"{{int:showpreview}}\" لتجربة جافاسكربت الجديدة قبل حفظ الصفحة.",
-       "usercsspreview": "'''تذكر أنك تقوم بعرض الأنماط المتراصة (CSS) الخاصة بك فقط\nلم يتم حفظها بعد!'''",
-       "userjspreview": "'''تذكر أنك فقط تجرب/تعاين جافاسكربت.'''\n'''لم يتم الحفظ بعد!'''",
-       "sitecsspreview": "''' تذكر أنك فقط في وضع المعاينة لهذا CSS ''' \n''' ولم يتم حفظ الصفحة بعد! '''",
-       "sitejspreview": "''' تذكر أنك فقط في وضع المعاينة لكود JavaScript هذا''' \n''' ولم يتم حفظه بعد! '''",
-       "userinvalidcssjstitle": "'''تحذير:''' لا توجد واجهة  \"$1\".\nتذكر أن ملفات ال.css و ال.js تستخدم حروف صغيرة في العنوان ، كمثال {{ns:user}}:Foo/vector.css و ليس {{ns:user}}:Foo/Vector.css.",
-       "updated": "(محدثة)",
-       "note": "'''ملاحظة:'''",
-       "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|تسجيل الخروج]] ثم تسجيل الدخول مجددا.'''",
-       "token_suffix_mismatch": "'''تعديلك تم رفضه لأن عميلك أخطأ في علامات الترقيم\nفي نص التعديل. تم رفض التعديل لمنع فساد نص المقالة.\nهذا يحدث أحيانا عندما تستخدم خدمة بروكسي مجهول معيبة مبنية على الوب.'''",
-       "edit_form_incomplete": "'''بعض أجزاء من نموذج التعديل لم تصل إلى الخادم؛ تأكد من أن تعديلاتك لم تمس وحاول مجددا.'''",
-       "editing": "تحرير $1",
-       "creating": "إنشاء «$1»",
-       "editingsection": "تحرير $1 (قسم)",
-       "editingcomment": "تعديل $1 (قسم جديد)",
-       "editconflict": "تضارب في التحرير: $1",
-       "explainconflict": "لقد عدل شخص آخر هذه الصفحة بعد أن بدأت أنت بتحريرها.\nصندوق النصوص العلوي يحتوي على النص الموجود حاليا في الصفحة.\nوالتغييرات التي قمت أنت بها موجودة في الصندوق في أسفل الصفحة.\nيجب أن تقوم بدمج تغييراتك في النص الموجود حاليا.\n'''فقط''' ما هو موجود في الصندوق العلوي هو ما سيتم حفظه عند الضغط على زر \"حفظ الصفحة\".",
-       "yourtext": "نصك",
-       "storedversion": "النسخة المخزنة",
-       "nonunicodebrowser": "'''تحذير: متصفحك لا يتوافق مع الترميز الموحد.\nتمت معالجة هذا لكي تتمكن من تحرير الصفحات بأمان: الحروف التي ليست ASCII سوف تظهر في صندوق التحرير كأكواد سداسي عشرية.'''",
-       "editingold": "''' تحذير: أنت تقوم الآن بتحرير نسخة قديمة من هذه الصفحة.\nإذا قمت بحفظها، ستفقد كافة التغييرات التي حدثت بعد هذه النسخة. '''",
-       "yourdiff": "الفروق",
-       "copyrightwarning": "من فضلك لاحظ أن جميع المساهمات ل {{SITENAME}} خاضعة وصادرة تحت ترخيص $2 (انظر في $1 للمزيد من التفاصيل)\nإذا لم ترد أن تخضع كتابتك للتعديل والتوزيع الحر، لا تضعها هنا<br />.\nكما أنك تتعهد بأنك قمت بكتابة ما هو موجود بنفسك، أو قمت بنسخها من مصدر يخضع ضمن الملكية العامة، أو مصدر حر آخر.\n'''لا ترسل أي عمل ذي حقوق محفوظة بدون الإذن من صاحب الحق'''.",
-       "copyrightwarning2": "من فضلك لاحظ أن جميع المساهمات في {{SITENAME}} يمكن أن تعدل أو تتغير أو تزال من قبل المساهمين الآخرين.\nإذا لم تكن ترغب أن تعدل مشاركاتك بهذا الشكل، لا تضعها هنا.<br />\nأنت تقر أيضا أنك كتبت هذا بنفسك، أو نسخته من مصدر يخضع للملكية العامة، أو مصدر حر آخر (انظر $1 للتفاصيل).\n'''لا تضف أي عمل ذي حقوق محفوظة بدون تصريح!'''",
-       "longpageerror": "'''خطأ: النص الذي قمت بإدخاله {{PLURAL:$1|واحد كيلوبايت|$1 كيلوبيات}} أطول, وهو أطول من الحد الأقصى {{PLURAL:$2|واحد كيلوبايت|$2 كيلوبايت}}.'''\nو يتعذر حفظه.",
-       "readonlywarning": "'''تحذير: لقد أغلقت قاعدة البيانات للصيانة، لذلك لن تتمكن من حفظ التعديلات التي قمت بها حاليا.\nإذا رغبت بإمكانك أن تنسخ النص الذي تعمل عليه وتحفظه في ملف نصي إلى وقت لاحق.'''\n\nالإداري الذي أغلقها أعطى هذا التفسير: $1",
-       "protectedpagewarning": "'''تحذير: تمت حماية هذه الصفحة حتى يمكن للمستخدمين ذوي الصلاحيات الإدارية فقط تعديلها.'''\nآخر مدخلة سجل موفرة بالأسفل كمرجع:",
-       "semiprotectedpagewarning": "'''ملاحظة:''' تمت حماية هذه الصفحة بحيث يمكن للمستخدمين المسجلين فقط تعديلها.\nآخر مدخلة سجل موفرة بالأسفل كمرجع:",
-       "cascadeprotectedwarning": "'''تحذير:''' تمت حماية هذه الصفحة بحيث يستطيع المستخدمون ذوو الصلاحيات الإدارية فقط تعديلها، وذلك لأنها مدمجة في {{PLURAL:$1||الصفحة التالية والتي تمت حمايتها|الصفحتين التاليتين واللتين تمت حمايتها|الصفحات التالية والتي تمت حمايتها}} بخاصية \"حماية الصفحات المدمجة\":",
-       "titleprotectedwarning": "'''تحذير:  هذه الصفحة تمت حمايتها بحيث أن [[Special:ListGroupRights|صلاحيات معينة]] مطلوبة لإنشائها.'''\nآخر مدخلة سجل موفرة بالأسفل كمرجع:",
-       "templatesused": "{{PLURAL:$1||القالب المستخدم|القالبان المستخدمان|القوالب المستخدمة}} في هذه الصفحة:",
-       "templatesusedpreview": "{{PLURAL:$1||القالب المستخدم|القالبان المستخدمان|القوالب المستخدمة}} في هذه المعاينة:",
-       "templatesusedsection": "{{PLURAL:$1||القالب المستخدم|القالبان المستخدمان|القوالب المستخدمة}} في هذا القسم:",
-       "template-protected": "(protégé)",
-       "template-semiprotected": "(حماية جزئية)",
-       "hiddencategories": "{{PLURAL:$1|هذه الصفحة غير موجودة في أي تصنايف مخفية|هذه الصفحة موجودة في تصنيف مخفي واحد|هذه الصفحة موجودة في تصنيفين مخفيين|هذه الصفحة موجودة في $1 تصانيف مخفية|هذه الصفحة موجودة في $1 تصنيفا مخفيا|هذه الصفحة موجودة في $1 تصنيف مخفي}}:",
-       "nocreatetext": "قام {{SITENAME}} بتحديد القدرة على إنشاء صفحات جديدة.\nيمكنك العودة وتحرير صفحة موجودة بالفعل، أو [[Special:UserLogin|الدخول أو تسجيل حساب]].",
-       "nocreate-loggedin": "أنت لا تمتلك الصلاحية لإنشاء صفحات جديدة.",
-       "sectioneditnotsupported-title": "تعديل الأقسام غير مدعوم",
-       "sectioneditnotsupported-text": "تعديل الأقسام غير مدعوم في هذه الصفحة",
-       "permissionserrors": "أخطاء السماحات",
-       "permissionserrorstext": "لا تمتلك الصلاحية لفعل هذا، {{PLURAL:$1||للسبب التالي|للسببين التاليين|للأسباب التالية}}:",
-       "permissionserrorstext-withaction": "لا تملك الصلاحيات ل$2، لل{{PLURAL:$1||سبب التالي|سببين التاليين|أسباب التالية}}:",
-       "recreate-moveddeleted-warn": "'''تحذير: أنت تقوم بإعادة إنشاء صفحة سبق حذفها.'''\n\nيجب عليك التيقن من أن الاستمرار بتحرير هذه الصفحة ملائم.\nسجلا الحذف والنقل لهذه الصفحة معروضان هنا للتيسير:",
-       "moveddeleted-notice": "هذه الصفحة تم حذفها.\nسجلا الحذف والنقل للصفحة معروضان بالأسفل كمرجع.",
-       "log-fulllog": "أظهر السجل الكامل",
-       "edit-hook-aborted": "التعديل تم تركه بواسطة الخطاف.\nلم يعط تفسيرا.",
-       "edit-gone-missing": "لم يمكن تحديث الصفحة.\nيبدو أنه تم حذفها.",
-       "edit-conflict": "تضارب تحريري.",
-       "edit-no-change": "تعديلك تم تجاهله، لأنه لم يحدث أي تعديل للنص.",
-       "edit-already-exists": "لم يمكن إنشاء صفحة جديدة.\nهي موجودة بالفعل.",
-       "defaultmessagetext": "نص الرسالة الافتراضي",
-       "expensive-parserfunction-warning": "'''تحذير:''' هذه الصفحة تحتوي على استدعاءات دالة محلل كثيرة مكلفة.\n\nينبغي أن تكون أقل من {{PLURAL:$2||استدعاء واحد|استدعاءين|$2 استدعاءات|$2 استدعاء}}، يوجد الآن {{PLURAL:$1|استدعاء واحد|استدعاءان|$2 استدعاءات|$2 استدعاء}}.",
-       "expensive-parserfunction-category": "صفحات يوجد بها استدعاءات دوال محلل كثيرة ومكلفة",
-       "post-expand-template-inclusion-warning": "'''تحذير:''' حجم تضمين القالب كبير جدا.\nبعض القوالب لن تضمن.",
-       "post-expand-template-inclusion-category": "الصفحات حيث تم تجاوز حجم تضمين القالب",
-       "post-expand-template-argument-warning": "'''تحذير:''' هذه الصفحة تحتوي على عامل قالب واحد على الأقل له حجم تمدد كبير جدا.\nهذه العوامل تم حذفها.",
-       "post-expand-template-argument-category": "صفحات تحتوي مدخلات القالب المحذوفة",
-       "parser-template-loop-warning": "تم كشف حلقة قالب: [[$1]]",
-       "parser-template-recursion-depth-warning": "تم تجاوز حد عمق فرد القوالب ($1)",
-       "language-converter-depth-warning": "تم تخطي حد عمق محول اللغة ($1)",
-       "node-count-exceeded-category": "الصفحات التي حدث فيها تجاوز تعداد العقد",
-       "node-count-exceeded-warning": "تجاوزت هذه الصفحة تعداد العقد",
-       "expansion-depth-exceeded-category": "الصفحات التي حدث فيها تجاوز عمق التوسيع",
-       "expansion-depth-exceeded-warning": "الصفحة تجاوزت عمق التوسيع",
-       "parser-unstrip-loop-warning": "حلقة معراة تم الكشف عنها",
-       "parser-unstrip-recursion-limit": "تعدى حد العودية Unstrip  ($1)",
-       "undo-success": "يمكن استرجاع التعديل.\nمن فضلك تحقق من المقارنة بالأسفل للتأكد من أن هذا هو ما تريد أن تفعله، وبعد ذلك احفظ التغييرات بالأسفل للانتهاء من استرجاع التعديل.",
-       "undo-failure": "لم يمكن استرجاع التعديل بسبب تعديلات متعارضة تمت على الصفحة.",
-       "undo-norev": "فشل في الرجوع عن التعديل حيث أنه غير موجود أو تم حذفه.",
-       "undo-summary": "الرجوع عن التعديل $1 بواسطة [[Special:Contributions/$2|$2]] ([[User talk:$2|نقاش]])",
-       "cantcreateaccounttitle": "لا يمكن إنشاء حساب",
-       "cantcreateaccount-text": "إنشاء الحسابات من عنوان الأيبي هذا ('''$1''') تم منعه بواسطة [[User:$3|$3]].\n\nالسبب المعطى بواسطة $3 هو ''$2''",
-       "viewpagelogs": "اعرض سجلات هذه الصفحة",
-       "nohistory": "لا يوجد تاريخ للتعديلات لهذه الصفحة.",
-       "currentrev": "المراجعة الحالية",
-       "currentrev-asof": "المراجعة الحالية بتاريخ $1",
-       "revisionasof": "Version mtaε $1",
-       "revision-info": "مراجعة $1 بواسطة $2",
-       "previousrevision": "→ مراجعة أقدم",
-       "nextrevision": "مراجعة أحدث ←",
-       "currentrevisionlink": "المراجعة الحالية",
-       "cur": "الحالي",
-       "next": "التالي",
-       "last": "السابق",
-       "page_first": "الأولى",
-       "page_last": "الأخيرة",
-       "histlegend": "اختيار الفرق: علم على صناديق النسخ للمقارنة واضغط قارن بين النسخ المختارة أو الزر بالأسفل.<br />\nمفتاح: (الحالي) = الفرق مع النسخة الحالية\n(السابق) = الفرق مع النسخة السابقة، ط = تغيير طفيف",
-       "history-fieldset-title": "تصفح التاريخ",
-       "history-show-deleted": "المحذوفة فقط",
-       "histfirst": "أول",
-       "histlast": "آخر",
-       "historysize": "({{PLURAL:$1|1 بايت|$1 بايت}})",
-       "historyempty": "(فارغ)",
-       "history-feed-title": "تاريخ المراجعة",
-       "history-feed-description": "تاريخ التعديل لهذه الصفحة في الويكي",
-       "history-feed-item-nocomment": "$1 في $2",
-       "history-feed-empty": "الصفحة المطلوبة غير موجودة.\nمن المحتمل أن تكون هذه الصفحة قد حذفت من الويكي، أو نقلت.\nحاول [[Special:Search|البحث في الويكي]] عن صفحات جديدة ذات صلة.",
-       "rev-deleted-comment": "(أزيل ملخص التعديل)",
-       "rev-deleted-user": "(اسم المستخدم تمت إزالته)",
-       "rev-deleted-event": "(فعل السجل تمت إزالته)",
-       "rev-deleted-user-contribs": "[اسم المستخدم أو عنوان الأيبي تمت إزالته - التعديل مخفي من المساهمات]",
-       "rev-deleted-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}}/suppress|page={{FULLPAGENAMEE}}}} سجل الإخفاء].\nبإمكانك [$1 رؤية هذه المراجعة] إذا أردت المتابعة.",
-       "rev-deleted-text-view": "'''حُذِفت''' مراجعة هذه الصفحة.\nيمكنك رؤيتها؛ ويمكنك العثور على التفاصيل في [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سجل الحذف].",
-       "rev-suppressed-text-view": "'''أُخفيت''' مراجعة الصفحة هذه.\nيمكنك رؤيتها؛ ويمكنك العثور على التفاصيل في  [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} سجل الإخفاء].",
-       "rev-deleted-no-diff": "لا يمكنك رؤية هذا الفرق لأن إحدى المراجعات '''حُذِفت'''.\nيمكنك العثور على التفاصيل في [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سجل الحذف].",
-       "rev-suppressed-no-diff": "ليس بإمكانك مشاهدة هذا الفرق لأن إحدى المراجعات '''حذفت'''.",
-       "rev-deleted-unhide-diff": "'''حُذِفت''' إحدى مراجعتي هذا الفرق.\nيمكن العثور على التفاصيل في [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سجل الحذف].\nبإمكانك [$1 رؤية هذا الفرق] إذا أردت المتابعة.",
-       "rev-suppressed-unhide-diff": "'''أُخفيت''' إحدى مراجعتي هذا الفرق.\nيمكنك العثور على التفاصيل في [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} سجل الإخفاء].\nبإمكانك [$1 رؤية هذا الفرق] إذا أردت المتابعة.",
-       "rev-deleted-diff-view": "'''حُذِفت''' إحدى مراجعتي هذا الفرق.\nيمكنك رؤية الفرق؛ ويمكنك العثور على التفاصيل في [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سجل الحذف].",
-       "rev-suppressed-diff-view": "'''أُخفيت''' إحدى مراجعتي هذا الفرق.\nيمكنك رؤية هذا الفرق؛ ويمكنك العثور على التفاصيل في [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} سجل الإخفاء].",
-       "rev-delundel": "أظهر/أخف",
-       "rev-showdeleted": "أظهر",
-       "revisiondelete": "حذف/استرجاع المراجعات",
-       "revdelete-nooldid-title": "مراجعة هدف غير صحيحة",
-       "revdelete-nooldid-text": "إما أنك لم تحدد مراجعة (أو مراجعات) معينة هدفا لهذه الوظيفة، أو أن المراجعة المحددة غير موجودة، أو أنك تحاول إخفاء المراجعة الحالية.",
-       "revdelete-no-file": "الملف المحدد غير موجود.",
-       "revdelete-show-file-confirm": "هل أنت متأكد أنك تريد رؤية مراجعة محذوفة للملف \"<nowiki>$1</nowiki>\" بتاريخ $2 الساعة $3؟",
-       "revdelete-show-file-submit": "نعم",
-       "logdelete-selected": "{{PLURAL:$1|حدث السجل المختار|أحداث السجل المختارة}}:",
-       "revdelete-confirm": "الإداريون الآخرون في {{SITENAME}} سيظل بإمكانهم رؤية المحتوى المخفي ويمكنهم استرجاعه مجددا من خلال هذه الواجهة نفسها، مالم يتم وضع قيود إضافية.\nمن فضلك أكد أنك تنوي فعل هذا، وأنك تفهم العواقب، وأنك تفعل هذا بالتوافق مع [[{{MediaWiki:Policy-url}}|السياسة]].",
-       "revdelete-suppress-text": "الإخفاء ينبغي أن يتم استخدامه '''فقط''' في الحالات التالية:\n* معلومات شخصية غير ملائمة\n*: ''عناوين المنازل وأرقام التليفونات، أرقام الضمان الاجتماعي، إلى آخره.''",
-       "revdelete-legend": "وضع ضوابط رؤية",
-       "revdelete-hide-text": "أخف نص المراجعة",
-       "revdelete-hide-image": "أخف محتوى الملف",
-       "revdelete-hide-name": "أخف الفعل والهدف",
-       "revdelete-hide-comment": "أخف تعليق التعديل",
-       "revdelete-hide-user": "أخف اسم/آيبي المستخدم",
-       "revdelete-hide-restricted": "أخف البيانات عن الإداريين إضافة إلى الآخرين",
-       "revdelete-radio-same": "(لا تغير)",
-       "revdelete-radio-set": "نعم",
-       "revdelete-radio-unset": "لا",
-       "revdelete-suppress": "أخف البيانات عن مديري النظام والبقية",
-       "revdelete-unsuppress": "إزالة الضوابط من المراجعات المسترجعة",
-       "revdelete-log": "السبب:",
-       "revdelete-submit": "طبق على {{PLURAL:$1||المراجعة المختارة|المراجعتين المختارتين|المراجعات المختارة}}",
-       "revdelete-success": "'''تم تحديث رؤية المراجعات بنجاح.'''",
-       "revdelete-failure": "'''تعذر تحديث رؤية المراجعة:'''\n$1",
-       "logdelete-success": "'''تم ضبط رؤية السجلات بنجاح.'''",
-       "logdelete-failure": "'''تعذر ضبط رؤية السجل:'''\n$1",
-       "revdel-restore": "تغيير الرؤية",
-       "pagehist": "تاريخ صفحة",
-       "deletedhist": "التاريخ المحذوف",
-       "revdelete-hide-current": "خطأ عند إحفاء العنصر المؤرخ في $2 $1: هذه هي المراجعة الحالية.\nلا يمكن إخفاؤها.",
-       "revdelete-show-no-access": "خطأ في إظهار العنصر ذا التاريخ $2 $1: هذا العنصر معلم ك\"مقيد\".\nليس لك صلاحية الوصول إليه.",
-       "revdelete-modify-no-access": "خطأ في تعديل العنصر ذا التاريخ $2 $1: هذا العنصر معلم ك\"مقيد\".\nليس لك صلاحية الوصول إليه.",
-       "revdelete-modify-missing": "خطأ في تعديل العنصر ذا الهوية $1: العنصر مفقود من قاعدة البيانات!",
-       "revdelete-no-change": "'''تحذير:''' العنصر ذو التاريخ $2 $1 لديه أصلا إعدادات الظهور المطلوبة.",
-       "revdelete-concurrent-change": "خطأ في تعديل العنصر ذي التاريخ $2 $1: تظهر حالته أن شخصا آخر عدله أثناء محاولتك تعديله.\nمن فضلك راجع السجلات.",
-       "revdelete-only-restricted": "خطأ إخفاء العنصر المؤرخ $2, $1: لا تستطيع تنحية العناصر من عرض الإداريين بدون أن تحدد أيضا إحدى خيارات التنحية الأخرى.",
-       "revdelete-reason-dropdown": "* أسباب حذف عامة\n** خرق لحقوق النشر\n** معلومات شخصية غير ملائمة\n**معلومات تشهيرية محتملة",
-       "revdelete-otherreason": "سبب آخر/إضافي:",
-       "revdelete-reasonotherlist": "سبب آخر",
-       "revdelete-edit-reasonlist": "عدل أسباب الحذف",
-       "revdelete-offender": "مؤلف المراجعة:",
-       "suppressionlog": "سجل الإخفاء",
-       "suppressionlogtext": "بالأسفل قائمة بعمليات الحذف والمنع التي تتضمن محتوى مخفيا عن الإداريين.\nانظر [[Special:BlockList|قائمة منع الآيبي]] لترى عمليات المنع القائمة الآن.",
-       "mergehistory": "دمج تواريخ الصفحة",
-       "mergehistory-header": "هذه الصفحة تسمح لك بدمج نسخ تاريخ صفحة ما إلى صفحة أخرى.\nتأكد من أن هذا التغيير سيحافظ على استمرار تاريخ الصفحة.",
-       "mergehistory-box": "دمج مراجعات صفحتين:",
-       "mergehistory-from": "الصفحة المصدر:",
-       "mergehistory-into": "الصفحة الهدف:",
-       "mergehistory-list": "تاريخ التعديل القابل للدمج",
-       "mergehistory-merge": "المراجعات التالية من [[:$1]] يمكن دمجها إلى [[:$2]].\nاستخدم عامود الصناديق لدمج المراجعات التي تم إنشاؤها في وقبل الوقت المحدد.\nلاحظ أن استخدام وصلات التصفح سيعيد ضبط هذا العامود.",
-       "mergehistory-go": "عرض التعديلات القابلة للدمج",
-       "mergehistory-submit": "دمج المراجعات",
-       "mergehistory-empty": "لا مراجعات يمكن دمجها.",
-       "mergehistory-success": "$3 {{PLURAL:$3|مراجعة|مراجعة}} من [[:$1]] تم دمجها بنجاح في [[:$2]].",
-       "mergehistory-fail": "غير قادر على عمل دمج التاريخ، من فضلك أعد التحقق من محددات الصفحة والزمن.",
-       "mergehistory-no-source": "الصفحة المصدر $1 غير موجودة.",
-       "mergehistory-no-destination": "الصفحة الهدف $1 غير موجودة.",
-       "mergehistory-invalid-source": "الصفحة المصدر يجب أن تكون عنوانا صحيحا.",
-       "mergehistory-invalid-destination": "الصفحة الهدف يجب أن تكون عنوانا صحيحا.",
-       "mergehistory-autocomment": "دمج [[:$1]] في [[:$2]]",
-       "mergehistory-comment": "دمج [[:$1]] في [[:$2]]: $3",
-       "mergehistory-same-destination": "صفحتا المصدر والهدف لا يمكن أن تكونا نفس الشيء",
-       "mergehistory-reason": "السبب:",
-       "mergelog": "سجل الدمج",
-       "revertmerge": "إلغاء الدمج",
-       "mergelogpagetext": "بالأسفل قائمة بأحدث عمليات الدمج لتاريخ صفحة ما إلى أخرى.",
-       "history-title": " «$1»: تاريخ المراجعة",
-       "difference-title": "«$1»: الفرق بين المراجعتين",
-       "difference-title-multipage": "«$1» و«$2»: الفرق بين الصفحتين",
-       "difference-multipage": "(الفرق بين الصفحتين)",
-       "lineno": "Sţar $1:",
-       "compareselectedversions": "قارن بين النسختين المختارتين",
-       "showhideselectedversions": "أظهر/أخف المراجعات المختارة",
-       "editundo": "Rajjaģ",
-       "diff-multi-manyusers": "({{PLURAL:$1||مراجعة واحدة متوسطة غير معروضة أجراها|مراجعتان متوسطتان غير معروضتان أجراهما|$1 مراجعات متوسطة غير معروضة أجراها|$1 مراجعة متوسطة غير معروضة أجراها}} أكثر من {{PLURAL:$2||مستخدم واحد|مستخدمين|$2 مستخدمين|$2 مستخدمًا|$2 مستخدم}}.)",
-       "searchresults": "Ir-rêzultâ mtêģ it-talwîj",
-       "searchresults-title": "Ir-rêzultâ mtêģ it-talwîj ģlâ \"$1\"",
-       "prevn": "{{PLURAL:$1|$1}} السابقة",
-       "nextn": "{{PLURAL:$1|$1}} التالية",
-       "prevn-title": "$1 {{PLURAL:$1|نتيجة|نتيجة}} سابقة",
-       "nextn-title": "$1 {{PLURAL:$1|نتيجة|نتيجة}} سابقة",
-       "shown-title": " Warri{{PLURAL:Résultat weħed|Zouz résultats|$1  résultats|$1 en résultat}} men kol safħa",
-       "viewprevnext": "Chouf ($1 {{int:pipe-separator}} $2) ($3)",
-       "searchmenu-exists": "'''famma ss'af7a ismha \"[[:$1]]\" fi hedha el wiki.'''",
-       "searchmenu-new": "'''أنشئ الصفحة \"[[:$1]]\" في هذا الويكي!'''",
-       "searchprofile-articles": "Safħat mtaε contenu",
-       "searchprofile-images": "Multimédia",
-       "searchprofile-everything": "Kol chay",
-       "searchprofile-advanced": "Avancé",
-       "searchprofile-articles-tooltip": "Farkes fi $1",
-       "searchprofile-images-tooltip": "Farkes f'elfichiers",
-       "searchprofile-everything-tooltip": "Farkes kol chay (ħatta safħat leħdith)",
-       "searchprofile-advanced-tooltip": "Ekhtar les espaces de noms elli bech tfarkes εlihom",
-       "search-result-size": "$1 ({{PLURAL:Ħatta kelma|Kelma waħda|Kelmtin|$2 kelmat|$2 en kelma}})",
-       "search-result-category-size": "{{PLURAL:$1|لا أعضاء|عضو واحد|عضوان|$1 أعضاء|$1 عضوًا|$1 عضو}} ({{PLURAL:$2|لا تصانيف فرعية|تصنيف فرعي واحد|تصنيفان فرعيان|$2 تصنيفات فرعية|$2 تصنيفًا فرعيًا|$2 تصنيف فرعي}} و{{PLURAL:$3|لا ملفات|ملف واحد|ملفان|$3 ملفات|$3 ملفًا|$3 ملف}})",
-       "search-redirect": "(تحويلة $1)",
-       "search-section": "(section $1)",
-       "search-suggest": "هل كنت تقصد: $1",
-       "searchrelated": "مرتبطة",
-       "searchall": "Elkol",
-       "search-nonefound": "لا توجد نتائج تطابق الاستعلام.",
-       "mypreferences": "تفضيلاتي",
-       "youremail": "البريد:",
-       "yourrealname": "الاسم الحقيقي:",
-       "prefs-help-email": "عنوان البريد الإلكتروني هو أمر اختياري، ولكن ستحتاج لإعادة تعيين كلمة المرور، إن نسيت كلمة المرور الخاصة بك.",
-       "prefs-help-email-others": "يمكنك أيضا اختيار للسماح للآخرين الاتصال بك عن طريق صفحة المستخدم أو نقاش المستخدم الخاص بك دون الحاجة إلى الكشف عن الهوية الخاصة بك.",
-       "newuserlogpage": "سجل إنشاء المستخدمين",
-       "action-edit": "modifi hal page",
-       "nchanges": "{{PLURAL:$1|لا تغييرات|تغيير واحد|تغييران|$1 تغييرات|$1 تغييرا|$1 تغيير}}",
-       "recentchanges": "Ajadd tabdîlêt",
-       "recentchanges-legend": "خيارات أحدث التغييرات",
-       "recentchanges-summary": "تابع أحدث التغييرات للويكي عبر هذه التلقيمة.",
-       "recentchanges-feed-description": "تابع أحدث التغييرات للويكي عبر هذه التلقيمة.",
-       "recentchanges-label-newpage": "أنشأ هذا التعديل صفحة جديدة",
-       "recentchanges-label-minor": "هذا تعديل طفيف",
-       "recentchanges-label-bot": "أجرى هذا التعديل بوت",
-       "recentchanges-label-unpatrolled": "لم يراجع هذا التعديل إلى الآن",
-       "rcnotefrom": "بالأسفل التغييرات منذ '''$2''' (إلى '''$1''' معروضة).",
-       "rclistfrom": "أظهر التغييرات بدءا من $3 $2",
-       "rcshowhideminor": "$1 التعديلات الطفيفة",
-       "rcshowhidebots": "$1 البوتات",
-       "rcshowhideliu": "$1 المستخدمين المسجلين",
-       "rcshowhideanons": "$1 المستخدمين المجهولين",
-       "rcshowhidepatr": "$1 التعديلات المراجعة",
-       "rcshowhidemine": "$1 تعديلاتي",
-       "rclinks": "أظهر آخر $1 تعديل في آخر $2 يوم<br />$3",
-       "diff": "Farq",
-       "hist": "Hîst",
-       "hide": "أخف",
-       "show": "اعرض",
-       "minoreditletter": "thafif",
-       "newpageletter": "jadid",
-       "boteditletter": "bot",
-       "rc-change-size-new": "$1 {{PLURAL:$1|oktê}} baģd it-tabdîl",
-       "rc-enhanced-expand": "عرض التفاصيل (يتطلب جافاسكريبت)",
-       "rc-enhanced-hide": "أخفِ التفاصيل",
-       "recentchangeslinked": "تغييرات ذات علاقة",
-       "recentchangeslinked-toolbox": "Tabdilet them",
-       "recentchangeslinked-title": "التغييرات المرتبطة ب \"$1\"",
-       "recentchangeslinked-summary": "هذه قائمة بالتغييرات التي تمت حديثا للصفحات الموصولة من صفحة معينة (أو إلى الأعضاء ضمن تصنيف معين).\nالصفحات في [[Special:Watchlist|قائمة مراقبتك]] '''عريضة'''",
-       "recentchangeslinked-page": "اسم الصفحة:",
-       "recentchangeslinked-to": "أظهر التغييرات للصفحات الموصولة للصفحة المعطاة عوضا عن ذلك",
-       "upload": "Abεeth des fichiers l'esserveur",
-       "uploadlogpage": "سجل الرفع",
-       "filedesc": "ملخص:",
-       "license": "ترخيص:",
-       "license-header": "licence",
-       "file-anchor-link": "milaf (Fichier)",
-       "filehist": "Têrîx il-mîlaf",
-       "filehist-help": "اضغط على وقت/زمن لرؤية الملف كما بدا في هذا الزمن.",
-       "filehist-revert": "استرجع",
-       "filehist-current": "حالي",
-       "filehist-datetime": "وقت/زمن",
-       "filehist-thumb": "صورة مصغرة",
-       "filehist-thumbtext": "تصغير للنسخة بتاريخ $1",
-       "filehist-user": "مستخدم",
-       "filehist-dimensions": "الأبعاد",
-       "filehist-comment": "ta3li9at",
-       "imagelinks": "استخدام الملف",
-       "linkstoimage": "{{PLURAL:$1||الصفحة التالية تصل|الصفحتان التاليتان تصلان|ال$1 صفحات التالية تصل|ال$1 صفحة التالية تصل}} إلى هذا الملف:",
-       "nolinkstoimage": "لا توجد صفحات تصل لهذا الملف.",
-       "sharedupload-desc-here": "هذا الملف من $1 ويمكن استخدامه بواسطة المشاريع الأخرى.\nالوصف على [$2 صفحة وصف الملف] هناك معروض بالأسفل.",
-       "randompage": "Şafħa kîmê tjî",
-       "statistics": "إحصاءات",
-       "nbytes": "{{PLURAL:Octet weħed|Zouz octets|$1 octets|$1 en octet}}",
-       "nmembers": "{{PLURAL:$1|لا أعضاء|عضو واحد|عضوان|$1 أعضاء|$1 عضوا|$1 عضو}}",
-       "prefixindex": "كل الصفحات بالبادئة",
-       "usercreated": "{{GENDER:$3|أنشأه|أنشأته}} في $1 الساعة $2",
-       "newpages": "Safħat jdod",
-       "move": "انقل",
-       "pager-newer-n": "{{PLURAL:$1|أقدم 1|أقدم $1}}",
-       "pager-older-n": "{{PLURAL:$1|أقدم 1|أقدم $1}}",
-       "booksources": "مصادر كتاب",
-       "booksources-search-legend": "البحث عن مصادر الكتب",
-       "log": "سجلات",
-       "allpages": "kol ess'afa7at",
-       "allarticles": "kol ess'afa7at",
-       "allpagessubmit": "اذهب",
-       "categories": "تصنيفات",
-       "linksearch-line": "$1 موصولة من $2",
-       "listgrouprights-members": "(قائمة الأعضاء)",
-       "emailuser": "إرسال رسالة لهذا المستخدم",
-       "watchlist": "قائمة مراقبتي",
-       "mywatchlist": "قائمة مراقبتي",
-       "watchlistfor2": "ل$1 $2",
-       "watch": "راقب",
-       "unwatch": "أوقف المراقبة",
-       "watchlist-details": "{{PLURAL:$1||صفحة واحدة|صفحتان|$1 صفحات|$1 صفحة}} في قائمة مراقبتك، بدون عد صفحات النقاش.",
-       "wlshowlast": "عرض آخر $1 ساعات $2 أيام",
-       "watchlist-options": "خيارات قائمة المراقبة",
-       "actioncomplete": "انتهاء العملية",
-       "actionfailed": "الفعل فشل",
-       "dellogpage": "سجل الحذف",
-       "rollbacklink": "rajjaε",
-       "protectlogpage": "سجل الحماية",
-       "protectedarticle": "حمى \"[[$1]]\"",
-       "undeletelink": "اعرض/استعد",
-       "undeleteviewlink": "اعرض",
-       "namespace": "النطاق",
-       "invert": "اعكس الاختيار",
-       "blanknamespace": "(Ra'îsî)",
-       "contributions": "مساهماتي",
-       "contributions-title": "مساهمات المستخدم $1",
-       "mycontris": "مساهماتي",
-       "contribsub2": "ل$1 ($2)",
-       "uctop": "(top)",
-       "month": "من سنة (وأقدم):",
-       "year": "من سنة (وأقدم):",
-       "sp-contributions-newbies": "اعرض مساهمات الحسابات الجديدة فقط",
-       "sp-contributions-blocklog": "سجل المنع",
-       "sp-contributions-uploads": "مرفوعات",
-       "sp-contributions-logs": "سجلات",
-       "sp-contributions-talk": "نقاش",
-       "sp-contributions-search": "بحث عن مساهمات",
-       "sp-contributions-username": "عنوان أيبي أو اسم مستخدم:",
-       "sp-contributions-toponly": "أظهر أعلى المراجعات فقط",
-       "sp-contributions-submit": "lawwej",
-       "whatlinkshere": "Cnûwwe illi ywassil l-hûnî",
-       "whatlinkshere-title": "الصفحات التي تصل إلى \"$1\"",
-       "whatlinkshere-page": "ss'af7a:",
-       "linkshere": "الصفحات التالية تصل إلى '''[[:$1]]''':",
-       "nolinkshere": "لا توجد صفحات تصل إلى '''[[:$1]]'''.",
-       "isredirect": "صفحة تحويل",
-       "istemplate": "مضمن",
-       "isimage": "وصلة ملف",
-       "whatlinkshere-prev": "{{PLURAL:$1|previous|previous $1}}",
-       "whatlinkshere-next": "{{PLURAL:$1|القادمة|ال$1 القادمة}}",
-       "whatlinkshere-links": "← وصلات",
-       "whatlinkshere-hideredirs": "$1 التحويلات",
-       "whatlinkshere-hidetrans": "$1 التضمينات",
-       "whatlinkshere-hidelinks": "$1 الوصلات",
-       "whatlinkshere-hideimages": "$1 وصلة صورة",
-       "whatlinkshere-filters": "مرشحات",
-       "ipboptions": "ساعتين:2 hours,يوم واحد:1 day,3 أيام:3 days,أسبوع واحد:1 week,أسبوعين:2 weeks,شهر واحد:1 month,3 أشهر:3 months,6 أشهر:6 months,سنة واحدة:1 year,دائم:infinite",
-       "ipblocklist": "المستخدمون الممنوعون",
-       "blocklink": "Bloqui",
-       "unblocklink": "ارفع المنع",
-       "change-blocklink": "تغيير المنع",
-       "contribslink": "Mûsêhmêt",
-       "blocklogpage": "سجل المنع",
-       "blocklogentry": "منع \"[[$1]]\" لفترة زمنية مدتها $2 $3",
-       "block-log-flags-nocreate": "إنشاء الحسابات ممنوع",
-       "movelogpage": "سجل النقل",
-       "revertmove": "استرجع",
-       "export": "تصدير صفحات",
-       "allmessagesname": "الاسم",
-       "allmessagesdefault": "النص الافتراضي",
-       "thumbnail-more": "Kabbir",
-       "thumbnail_error": "خطأ في إنشاء صورة مصغرة: $1",
-       "tooltip-pt-userpage": "صفحة المستخدم الخاصة بك",
-       "tooltip-pt-mytalk": "صفحة نقاشك",
-       "tooltip-pt-preferences": "تفضيلاتي",
-       "tooltip-pt-watchlist": "قائمة الصفحات التي تراقب التغييرات التي تحدث بها",
-       "tooltip-pt-mycontris": "قائمة مساهماتك",
-       "tooltip-pt-login": "Međebîne kên itkoññektî, eme mûc bis-sîf",
-       "tooltip-pt-logout": "خروج",
-       "tooltip-pt-createaccount": "Međebîne law kên taģmil koñt w todxul, Lêkin mêkc maţlûb bêc taģmil hêđê.",
-       "tooltip-ca-talk": "Disküsyioñ ģal-koñtënü mtêģ il-pâj",
-       "tooltip-ca-edit": "Tnejjem tbaddil iş-şafḩa hêđi. Amân inzil ģal-bûtoñ mtêģ il-vû il-msebqa qbal mê tsijjil.",
-       "tooltip-ca-addsection": "ابدأ قسما جديدا",
-       "tooltip-ca-viewsource": "Essʾafħa protéjé.\nTnajjem tchouf essours mtaħħa.",
-       "tooltip-ca-history": "Copiet qdom mtaε essafħa hedhi",
-       "tooltip-ca-protect": "احم هذه الصفحة",
-       "tooltip-ca-delete": "احذف هذه الصفحة",
-       "tooltip-ca-move": "علم هذه الصفحة",
-       "tooltip-ca-watch": "أضف هذه الصفحة إلى قائمة مراقبتك",
-       "tooltip-ca-unwatch": "أزل هذه الصفحة من قائمة مراقبتك",
-       "tooltip-search": "Lawwij fî- {{SITENAME}}",
-       "tooltip-search-go": "Imcî l-pâj b-nafs il-ism îđê lqîthê",
-       "tooltip-search-fulltext": "Farkis fiş-şafḩât ģat-têkst hêđa",
-       "tooltip-p-logo": "Emchi lil-pâj il-ewelêniye",
-       "tooltip-n-mainpage": "Imchi lil-pâj il-ewelêniye",
-       "tooltip-n-mainpage-description": "Imchi lil-pâj il-ewelêniye",
-       "tooltip-n-portal": "Ģal-macrûģ, cnûwwe tnijjim taģmil, wîn tilqâ illi ḩajtik bîh",
-       "tooltip-n-currentevents": " Alqa information εla aham laħdeth mtaε tawa",
-       "tooltip-n-recentchanges": "Lîste mtêģ ajadd it-tabdîlêt fil-wiki",
-       "tooltip-n-randompage": "Ḩil iş-şafḩe illî tjî",
-       "tooltip-n-help": "Il-blâşa bêc tilqâ fîhe",
-       "tooltip-t-whatlinkshere": "Lîste mtêģ iş-şafḩât il-wiki il-kul illi twassil l-hûni",
-       "tooltip-t-recentchangeslinked": "Aham ettabldilet f'essafħat elli ywaslou l'essafħa hedhi",
-       "tooltip-feed-atom": "تلقيم أتوم لهذه الصفحة",
-       "tooltip-t-contributions": "رؤية قائمة مساهمات هذا المستخدم",
-       "tooltip-t-emailuser": "أرسل رسالة لهذا المستخدم",
-       "tooltip-t-upload": "Abεeth des fichiers l'esserveur",
-       "tooltip-t-specialpages": "Lîste mtêģ iş-şafħât is-spêsyal il-kul",
-       "tooltip-t-print": "Vêrsyoñ titiţbaģ min hal-pâj..",
-       "tooltip-t-permalink": "Lien dayem l'elversion hedhi mtaε essafħa",
-       "tooltip-ca-nstab-main": "Chouf elcontenu mtaε essafħa",
-       "tooltip-ca-nstab-user": "اعرض صفحة المستخدم",
-       "tooltip-ca-nstab-special": "هذه صفحة خاصة، لا تستطيع أن تعدل الصفحة نفسها",
-       "tooltip-ca-nstab-project": "رؤية صفحة المحتوى",
-       "tooltip-ca-nstab-image": "رؤية صفحة الملف",
-       "tooltip-ca-nstab-template": "رؤية القالب",
-       "tooltip-ca-nstab-category": "رؤية صفحة التصنيف",
-       "tooltip-minoredit": "علم على هذا كتعديل طفيف",
-       "tooltip-save": "احفظ تغييراتك",
-       "tooltip-preview": "اعرض تغييراتك، من فضلك استخدم هذا قبل الحفظ!",
-       "tooltip-diff": "اعرض التغييرات التي قمت بها للنص.",
-       "tooltip-compareselectedversions": "شاهد الفروق بين النسختين المختارتين من هذه الصفحة.",
-       "tooltip-watch": "أضف هذه الصفحة إلى قائمة مراقبتك",
-       "tooltip-rollback": "\"Rajjaģ\" yrajjiģ it-tabdîlêt f'hassafħa el'ekher weħed baddel fi nazla waħda.",
-       "tooltip-undo": "\"رجوع\" تسترجع هذا التعديل وتفتح نافذة التعديل في نمط العرض المسبق. تسمح بإضافة سبب في الملخص.\n\"Annuler\" trajjeε eltabdila lekhra w tħel fenêtre mtaε  el tabdil mtaε elvue el msabqa. Tnajjem tqoul εlech f'ettalkhis.",
-       "tooltip-summary": "أدخل ملخصا قصيرا",
-       "pageinfo-toolboxlink": "Maģlûmêt ģalâ hal-pâj",
-       "previousdiff": "→ التعديل السابق",
-       "nextdiff": "التعديل اللاحق ←",
-       "file-info-size": "$1 × $2 بكسل حجم الملف: $3، نوع MIME: $4",
-       "file-nohires": "لا توجد دقة أعلى متوفرة.",
-       "svg-long-desc": "ملف SVG، أبعاده $1 × $2 بكسل، حجم الملف: $3",
-       "show-big-image": "il-fîcyê il-aşlî",
-       "bad_image_list": "Elformat kima hakka:\nLes élements mtaε lista (lostra elli yabdew b' *) yetħesbou.\nEllien lowel fi star yelzmou ykoun lien el fichier khayeb.\nAy lien ekher fi nafs estar yetħseb exception, maħneha des pages win elfichier ynajem ykoun fi star.",
-       "metadata": "بيانات ميتا",
-       "metadata-help": "هذا الملف يحتوي على معلومات إضافية، غالبا ما تكون أضيفت من قبل الكاميرا الرقمية أو الماسح الضوئي المستخدم في إنشاء الملف.\nإذا كان الملف قد عدل عن حالته الأصلية، فبعض التفاصيل قد لا تعبر عن الملف المعدل.",
-       "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",
-       "namespacesall": "الكل",
-       "monthsall": "الكل",
-       "watchlistedit-clear-explain": "Elɛanawin lkol bech yetnaħaw mel'lista mteɛek",
-       "watchlistedit-clear-titles": "Elɛanawin",
-       "watchlistedit-too-many": "Famma barcha pajet w'manajmouch nħotouhom lkol lahné",
-       "watchlisttools-view": "اعرض التغييرات المرتبطة",
-       "watchlisttools-edit": "اعرض قائمة المراقبة وعدلها",
-       "watchlisttools-raw": "عدل قائمة المراقبة الخام",
-       "duplicate-defaultsort": "'''تحذير:''' مفتاح الترتيب الافتراضي \"$2\" يتجاوز مفتاح الترتيب الافتراضي السابق \"$1\".",
-       "specialpages": "Safḩât spêsyâl",
-       "external_image_whitelist": " #<pre>اترك هذا السطر تماما كما هو\n#ضع منثورات التعبيرات المنتظمة (فقط الجزء الذي يذهب بين //) بالأسفل\n#هذه ستتم مطابقتها مع مسارات الصور الخرجية (الموصولة بشكل مباشر)\n#هذه التي تطابق سيتم عرضها كصور، غير ذلك فقط وصلة إلى الصورة سيتم عرضها\n#السطور التي تبدأ ب# تتم معاملتها كتعليقات\n#هذا لا يتأثر بحالة الحروف\n\n#ضع كل منثورات التعبيرات المنتظمة فوق هذا السطر. اترك هذا السطر تماما كما هو</pre>",
-       "tag-filter": "مرشح [[Special:Tags|الوسوم]]:",
-       "searchsuggest-search": "Lawwij"
-}
index 291c936..78b5e06 100644 (file)
        "pool-queuefull": "Die poel se wagtou is vol",
        "pool-errorunknown": "Onbekende fout",
        "pool-servererror": "Die \"pool counter\"-diens is nie beskikbaar nie ($1).",
+       "poolcounter-usage-error": "Gebruiksfout: $1",
        "aboutsite": "Inligting oor {{SITENAME}}",
        "aboutpage": "Project:Omtrent",
        "copyright": "Inhoud is onderhewig aan $1, tensy anders vermeld",
        "disclaimers": "Voorbehoud",
        "disclaimerpage": "Project:Voorwaardes",
        "edithelp": "Wysigingshulp",
+       "helppage-top-gethelp": "Hulp",
        "mainpage": "Tuisblad",
        "mainpage-description": "Tuisblad",
        "policy-url": "Project:Beleid",
        "readonly_lag": "Die databasis is outomaties gesluit terwyl die slaafdatabasisse met die meester gesinchroniseer word",
        "internalerror": "Interne fout",
        "internalerror_info": "Interne fout: $1",
+       "internalerror-fatal-exception": "Fatale fout van tipe \"$1\"",
        "filecopyerror": "Kon nie lêer van \"$1\" na \"$2\" kopieer nie.",
        "filerenameerror": "Kon nie lêernaam van \"$1\" na \"$2\" wysig nie.",
        "filedeleteerror": "Kon nie lêer \"$1\" skrap nie.",
        "directorycreateerror": "Kon nie gids \"$1\" skep nie.",
+       "directoryreadonlyerror": "Gids \"$1\" is lees-alleen.",
+       "directorynotreadableerror": "Gids \"$1\" is nie leesbaar nie.",
        "filenotfound": "Kon nie lêer \"$1\" vind nie.",
        "unexpected": "Onverwagte waarde: \"$1\"=\"$2\".",
        "formerror": "Fout: kon vorm nie stuur nie",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
        "content-json-empty-object": "Leë objek",
+       "content-json-empty-array": "Leë reeks",
        "duplicate-args-category": "Bladsye met dubbele sjabloonparameters",
        "expensive-parserfunction-warning": "Waarskuwing: Die bladsy gebruik te veel duur ontlederfunksies.\n\nDaar is {{PLURAL:$1|$1 funksie|$1 funksies}}, terwyl die bladsy minder as $2 moet hê.",
        "expensive-parserfunction-category": "Bladsye wat te veel duur ontlederfunkies gebruik",
        "notextmatches": "Geen artikelteks resultate nie",
        "prevn": "vorige {{PLURAL:$1|$1}}",
        "nextn": "volgende {{PLURAL:$1|$1}}",
+       "prev-page": "vorige bladsy",
+       "next-page": "volgende bladsy",
        "prevn-title": "Vorige {{PLURAL:$1|resultaat|$1 resultate}}",
        "nextn-title": "Volgende {{PLURAL:$1|resultaat|$1 resultate}}",
        "shown-title": "$1 {{PLURAL:$1|resultaat|resultate}} per bladsy",
        "prefs-personal": "Gebruikersdata",
        "prefs-rc": "Onlangse wysigings",
        "prefs-watchlist": "Dophoulys",
+       "prefs-editwatchlist": "Wysig dophoulys",
        "prefs-watchlist-days": "Aantal dae om in dophoulys te wys:",
        "prefs-watchlist-days-max": "Maksimum $1 {{PLURAL:$1|dag|dae}}",
        "prefs-watchlist-edits": "Aantal wysigings om in uitgebreide dophoulys te wys:",
        "import-interwiki-history": "Kopieer ook volledige geskiedenis van hierdie bladsy",
        "import-interwiki-templates": "Sluit alle sjablone in",
        "import-interwiki-submit": "Importeer",
-       "import-interwiki-namespace": "Doelnaamruimte:",
-       "import-interwiki-rootpage": "Basisblad van bestemming (opsioneel):",
        "import-upload-filename": "Lêernaam:",
        "import-comment": "Opmerking:",
        "importtext": "Gebruik die [[Special:Export|eksport-funksie]] van die wiki waar die inligting vandaan kom.\nStoor die afvoer op u eie rekenaar, en laai dit hier op.",
index 0a96eef..5716334 100644 (file)
        "importinterwiki": "ከሌላ ዊኪ ማስገባት",
        "import-interwiki-history": "ለዚህ ገጽ የታሪክ ዕትሞች ሁሉ ለመቅዳት",
        "import-interwiki-submit": "ለማስገባት",
-       "import-interwiki-namespace": "መድረሻ ክፍለ-ዊኪ:",
        "import-upload-filename": "የፋይሉ ስም፦",
        "import-comment": "ማጠቃለያ፦",
        "importstart": "ገጾችን በማስገባት ላይ ነው...",
index 5658641..e88507f 100644 (file)
@@ -11,7 +11,8 @@
                        "Willtron",
                        "לערי ריינהארט",
                        "아라",
-                       "Macofe"
+                       "Macofe",
+                       "Carlos Cristia"
                ]
        },
        "tog-underline": "Subrayar os vinclos:",
@@ -21,9 +22,9 @@
        "tog-extendwatchlist": "Expandir a lista de seguimiento t'amostrar totz os cambeos, no nomás os más recients.",
        "tog-usenewrc": "Zaguers cambeos con presentación amillorada (cal JavaScript)",
        "tog-numberheadings": "Numerar automaticament os encabezaus",
-       "tog-showtoolbar": "Amostrar a barra de ferramientas d'edición (cal JavaScript)",
-       "tog-editondblclick": "Activar edición de pachinas fendo-ie doble click (cal JavaScript)",
-       "tog-editsectiononrightclick": "Activar a edición de seccions punchando con o botón dreito d'o ratet <br /> en os títols de seccions (cal JavaScript)",
+       "tog-showtoolbar": "Amostrar a barra d'edición",
+       "tog-editondblclick": "Editar pachinas fendo-ie doble click",
+       "tog-editsectiononrightclick": "Activar a edición de seccions punchando con o botón dreito d'o ratet en os títols de seccions",
        "tog-watchcreations": "Cosirar as pachinas que creye",
        "tog-watchdefault": "Cosirar as pachinas que edite",
        "tog-watchmoves": "Cosirar as pachinas que treslade",
        "oct": "oct",
        "nov": "nov",
        "dec": "avi",
+       "january-date": "$1 de chinero",
+       "february-date": "$1 de febrero",
+       "march-date": "Marzo $1",
+       "april-date": "$1 de abril",
+       "may-date": "$1 de mayo",
+       "june-date": "$1 de chunio",
+       "july-date": "$1 de chulio",
+       "august-date": "$1 de agosto",
+       "september-date": "$1 de setiembre",
+       "october-date": "$1 de octubre",
+       "november-date": "$1 de noviembre",
+       "december-date": "$1 de aviento",
        "pagecategories": "{{PLURAL:$1|Categoría|Categorías}}",
        "category_header": "Articlos en a categoría \"$1\"",
        "subcategories": "Subcategorías",
        "newwindow": "(s'ubre en una nueva finestra)",
        "cancel": "Cancelar",
        "moredotdotdot": "Más...",
-       "mypage": "A mía pachina",
+       "mypage": "Pachina",
        "mytalk": "Pachina de discusión",
        "anontalk": "Pachina de descusión d'ista IP",
        "navigation": "Navego",
        "permalink": "Vinclo permanent",
        "print": "Imprentar",
        "view": "Veyer",
+       "view-foreign": "Veyer en $1",
        "edit": "Editar",
        "create": "Creyar",
        "editthispage": "Editar ista pachina",
        "disclaimers": "Alvertencias chenerals",
        "disclaimerpage": "Project:Alvertencias chenerals",
        "edithelp": "Aduya ta editar pachinas",
+       "helppage-top-gethelp": "Aduya",
        "mainpage": "Portalada",
        "mainpage-description": "Portalada",
        "policy-url": "Project:Politicas y normas",
        "hidetoc": "amagar",
        "collapsible-collapse": "Replegar",
        "collapsible-expand": "Ixamplar",
+       "confirmable-yes": "Si",
+       "confirmable-no": "No",
        "thisisdeleted": "Quiere amostrar u restaurar $1?",
        "viewdeleted": "Quiere amostrar $1?",
        "restorelink": "{{PLURAL:$1|una edición borrata|$1 edicions borratas}}",
        "nospecialpagetext": "<strong>A pachina especial que ha demandato no existe.</strong>\n\nPuede trobar una lista de pachinas especials en [[Special:SpecialPages|{{int:specialpages}}]].",
        "error": "Error",
        "databaseerror": "Error d'a base de datos",
+       "databaseerror-error": "Error: $1",
        "laggedslavemode": "Pare cuenta: podrían faltar as zagueras edicions d'ista pachina.",
        "readonly": "Base de datos bloqueyata",
        "enterlockreason": "Esplique a causa d'o bloqueyo, incluyendo una estimación de quán se producirá o desbloqueyo",
        "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}}",
        "badretype": "As claus que ha escrito no son iguals.",
        "userexists": "O nombre d'usuario que ha escrito ya ye en uso.\nPor favor, trigue-ne uno de diferent.",
        "login-abort-generic": "A dentrada a la cuenta d'usuario ha fallato - Cancelato",
        "loginlanguagelabel": "Idioma: $1",
        "suspicious-userlogout": "S'ha denegau a suya demanda de zarrar a sesión ya que pareix que la ninvió un navegador defectuoso u bell proxy amagau.",
+       "pt-login": "Dentrar-ie",
+       "pt-createaccount": "Creyar cuenta",
        "php-mail-error-unknown": "Error desconoixito en a función mail() de PHP",
        "user-mail-no-addy": "Ha mirau de ninviar un mensache de correu sin una adreza de correu electronico.",
        "changepassword": "Cambiar a clau",
        "rcnotefrom": "Contino s'amuestran os cambeos dende '''$2''' (dica '''$1''').",
        "rclistfrom": "Amostrar cambeos recients dende $3 $2",
        "rcshowhideminor": "$1 as edicions menors",
+       "rcshowhideminor-hide": "Amagar",
        "rcshowhidebots": "$1 bots",
+       "rcshowhidebots-show": "Amostrar",
        "rcshowhideliu": "$1 usuarios rechistraus",
+       "rcshowhideliu-hide": "Amagar",
        "rcshowhideanons": "$1 usuarios anonimos",
+       "rcshowhideanons-hide": "Amagar",
        "rcshowhidepatr": "$1 edicions controlatas",
        "rcshowhidemine": "$1 as mías edicions",
+       "rcshowhidemine-hide": "Amagar",
        "rclinks": "Amostrar os zaguers $1 cambeos en os zaguers $2 días.<br />$3",
        "diff": "dif",
        "hist": "hist",
        "querypage-disabled": "Ista pachina especial ye desactivata por motivos de rendimiento.",
        "booksources": "Fuents de libros",
        "booksources-search-legend": "Mirar fuents de libros",
+       "booksources-search": "Mirar",
        "booksources-text": "Contino ye una lista de vinclos ta atros puestos an que venden libros nuevos y usatos, talment bi haiga más información sobre os libros que ye mirando.",
        "booksources-invalid-isbn": "O numero d'ISBN dato pareix que no ye conforme; comprebe si no bi ha garra error en copiar d'a fuent orichinal.",
        "specialloguserlabel": "Fedor:",
        "import-interwiki-history": "Copiar todas as versions de l'historial d'ista pachina",
        "import-interwiki-templates": "Incluir-ie todas as las plantillas",
        "import-interwiki-submit": "Importar",
-       "import-interwiki-namespace": "Espacio de nombres de destín:",
        "import-upload-filename": "Nombre de fichero:",
        "import-comment": "Comentario:",
        "importtext": "Por favor, exporte o fichero dende o wiki d'orichen fendo servir a [[Special:Export|ferramienta d'exportación]].\nAlce-lo en o suyo ordenador y cargue-lo aquí.",
        "pageinfo-watchers": "Numero d'usuarios que la cosiran",
        "pageinfo-edits": "Numero d'edicions",
        "pageinfo-authors": "Numero d'autors diferents",
+       "pageinfo-toolboxlink": "Información d'a pachina",
        "markaspatrolleddiff": "Sinyalar como ya controlato",
        "markaspatrolledtext": "Sinyalar iste articlo como controlato",
        "markedaspatrolled": "Sinyalato como controlato",
        "logentry-patrol-patrol": "$1 marcó a edición $4 d'a pachina $3 como patrullada",
        "logentry-patrol-patrol-auto": "$1 marcó automaticament a edición $4 d'a pachina $3 como patrullada",
        "logentry-newusers-newusers": "$1 creyó una cuenta d'usuario",
-       "logentry-newusers-create": "$1 creyó una cuenta d'usuario",
+       "logentry-newusers-create": "A cuenta d'usuario $1 estió {{GENDER:$2|creyada}}",
        "logentry-newusers-create2": "$1 creyó una cuenta d'usuario $3",
        "logentry-newusers-autocreate": "S'ha creyau automaticament a cuenta $1",
        "rightsnone": "(garra)",
index 921072d..1bf03a3 100644 (file)
        "gotaccount": "Hafast þū reccinge ǣr? $1.",
        "gotaccountlink": "Inmeldian",
        "userlogin-resetpassword-link": "Forgēate þū þīn gelēafword?",
+       "userlogin-helplink2": "Inmeldunge help",
        "createacct-emailrequired": "Spearcǣrenda nama",
        "createacct-emailoptional": "Spearcǣrenda nama (ungenēdedlic)",
        "createacct-email-ph": "Besettan þīnne spearcǣrenda naman",
        "createacct-benefit-heading": "{{SITENAME}} is geworht fram hādum swilce þū.",
        "createacct-benefit-body1": "{{PLURAL:$1|adihtung|adihtunga}}",
        "createacct-benefit-body2": "{{PLURAL:$1|tramet|trameta}}",
+       "createacct-benefit-body3": "{{PLURAL:$1|nīwe fyrðrend|nīwe fyrðrendas}}",
        "badretype": "Þā þafungword þe write þū, bēoþ ungelīc.",
        "userexists": "Se brūcendnama is ǣr gebrocen. Cēos lā ōðerne naman.",
        "loginerror": "Inmeldunge wōh",
        "searchresults": "Sōcne wæstmas",
        "searchresults-title": "Sōcne wæstmas for \"$1\"",
        "notextmatches": "Nis þǣr nǣnig swilc traht on nǣngum trametum",
-       "prevn": "ǣror {{PLURAL:$1|$1}}",
+       "prevn": "ǣrre {{PLURAL:$1|$1}}",
        "nextn": "nīehst {{PLURAL:$1|$1}}",
+       "nextn-title": "Nīhst $1 {{PLURAL:$1|gefunden|gefundenra}}",
+       "shown-title": "Īwan $1 {{PLURAL:$1|gefunden|gefundenra}} on ǣlcum tramete",
        "viewprevnext": "Sēon ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-new": "<strong>Scieppan þone tramet \"[[:$1]]\" on þissum wiki!</strong> {{PLURAL:$2|0=|Seoh ēac þone tramet þe wæs gefunden mid þīnre sōcne.|Seoh ēac þā þing þā wǣron gefunden.}}",
        "searchprofile-articles": "Innunge trametas",
        "searchprofile-articles-tooltip": "Sēcan in $1",
        "searchprofile-images-tooltip": "Sēcan ymelan",
        "searchprofile-everything-tooltip": "Sēcan geond ealla innunga (ēac mōtungum)",
+       "searchprofile-advanced-tooltip": "Sēcan on mā namsteda",
        "search-result-size": "$1 ({{PLURAL:$2|1 word|$2 worda}})",
        "search-redirect": "(edlǣded fram \"$1\")",
        "search-section": "(dǣl $1)",
        "ancientpages": "Ieldestan trametas",
        "move": "Wegan",
        "movethispage": "Wegan þisne tramet",
-       "pager-newer-n": "{{PLURAL:$1|nīwre 1|nīwran $1}}",
-       "pager-older-n": "{{PLURAL:$1|ieldre 1|ieldran $1}}",
+       "pager-newer-n": "{{PLURAL:$1|nīwre 1|nīwre $1}}",
+       "pager-older-n": "{{PLURAL:$1|ieldre 1|ieldre $1}}",
        "booksources": "Bōcfruman",
        "booksources-search-legend": "Sēcan bōcfruman",
        "booksources-search": "Sēcan",
        "undelete-search-submit": "Sēcan",
        "namespace": "Namstede:",
        "invert": "Onhwirfan gecorennesse",
+       "namespace_association": "Gesibbe namstedas",
        "blanknamespace": "(Hēafod)",
        "contributions": "{{GENDER:$1|Brūcendes}} forðunga",
        "contributions-title": "Brūcendes forðunga for $1",
        "isredirect": "edlǣdunge tramet",
        "istemplate": "bysene nytt",
        "isimage": "ymelan hlenca",
+       "whatlinkshere-prev": "{{PLURAL:$1|ǣrre|ǣrre $1}}",
+       "whatlinkshere-next": "{{PLURAL:$1|nīhst|nīhst $1}}",
        "whatlinkshere-links": "← hlencan",
        "whatlinkshere-hideredirs": "$1 edlǣdunga",
        "whatlinkshere-hidetrans": "$1 bysene nytta",
        "watchlisttools-view": "Sēon andwendunga",
        "watchlisttools-edit": "Sēon and adihtan behealdungtæl",
        "watchlisttools-raw": "Adihtan hrēaw behealdungtæl",
+       "signature": "[[{{ns:user}}:$1|$2]]\n([[{{ns:user_talk}}:$1|mōtung]])",
        "version": "Fadung",
        "version-specialpages": "Syndrige trametas",
        "version-other": "Ōðer",
        "htmlform-reset": "Undōn andwendunga",
        "htmlform-selectorother-other": "Ōðer",
        "logentry-delete-delete": "$1 {{GENDER:$2|forlēas}} tramet $3",
+       "logentry-move-move": "$1 {{GENDER:$2|wæg}} þone tramet $3 tō $4",
        "logentry-newusers-create": "Brūcendes grīma $1 wæs {{GENDER:$2|geworht}}",
        "revdelete-summary": "ādihtscortnes",
        "searchsuggest-search": "Sēcan",
index f0b1caf..e956b31 100644 (file)
        "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": "(محيت تفاصيل السجل)",
        "import-interwiki-history": "انسخ كل نسخ التاريخ لهذه الصفحة",
        "import-interwiki-templates": "ضمن كل القوالب",
        "import-interwiki-submit": "استيراد",
-       "import-interwiki-namespace": "النطاق الهدف:",
-       "import-interwiki-rootpage": "صفحة الجذر الهدف (اختياري) :",
        "import-upload-filename": "اسم الملف:",
        "import-comment": "تعليق:",
        "importtext": "من فضلك صدر الملف من الويكي المصدر باستخدام [[Special:Export|أداة التصدير]].\nاحفظها على حاسوبك ثم ارفعها هنا.",
        "tags-delete-reason": "سبب:",
        "tags-activate-submit": "تفعيل",
        "tags-deactivate-reason": "سبب",
+       "tags-edit-title": "تعديل الوسوم",
        "comparepages": "قارن صفحات",
        "compare-page1": "صفحة 1",
        "compare-page2": "صفحة 2",
index befb4b2..85f2f53 100644 (file)
        "expandtemplates": "ܐܪܘܚ ܩܠܒ̈ܐ",
        "expand_templates_output": "ܦܠܛܐ",
        "expand_templates_ok": "ܛܒ",
-       "expand_templates_preview": "ܚܝܪܐ ܩܕܡܝܐ"
+       "expand_templates_preview": "ܚܝܪܐ ܩܕܡܝܐ",
+       "special-characters-group-latin": "ܠܐܛܝܢܐܝܬ",
+       "special-characters-group-latinextended": "ܠܐܛܝܢܐܝܬ ܡܬܝܚܐ",
+       "special-characters-group-ipa": "ܐܠܒܝܬ ܩܠܝܬܐ ܬܒܝܠܝܬܐ (IPA)",
+       "special-characters-group-symbols": "ܪ̈ܡܙܐ",
+       "special-characters-group-greek": "ܝܘܢܐܝܬ",
+       "special-characters-group-cyrillic": "ܩܝܪܝܠܐܝܬ",
+       "special-characters-group-arabic": "ܥܪܒܐܝܬ",
+       "special-characters-group-arabicextended": "ܥܪܒܐܝܬ ܡܬܝܚܐ",
+       "special-characters-group-persian": "ܦܪܣܐܝܬ",
+       "special-characters-group-hebrew": "ܥܒܪܐܝܬ",
+       "special-characters-group-bangla": "ܒܢܓܐܠܐܝܬ",
+       "special-characters-group-tamil": "ܛܡܝܠ",
+       "special-characters-group-telugu": "ܛܝܠܘܓܘܐܝܬ",
+       "special-characters-group-sinhala": "ܣܢܗܐܠܐܝܬ",
+       "special-characters-group-gujarati": "ܓܘܓܐܪܐܛܝܐܝܬ",
+       "special-characters-group-thai": "ܛܝܠܢܕܐܝܬ",
+       "special-characters-group-lao": "ܠܐܘܐܝܬ",
+       "special-characters-group-khmer": "ܟܡܝܪܐܝܬ"
 }
index 79e12cc..48225ef 100644 (file)
        "importbadinterwiki": "wṣla dl-interwiki ĥayba",
        "import-noarticle": "ḫṫṫa ṣfḫa baċ djab!",
        "importlogpage": "sijjil dyal l'import",
-       "import-logentry-interwiki": "importé blwiki $1",
        "tooltip-pt-userpage": "Ṣ-Ṣefḫa de l-mosṫeĥdim dyalṫek",
        "tooltip-pt-mytalk": "Ṣfeḫṫek dyal n-niqaċ",
        "tooltip-pt-preferences": "Li kaṫfeddel",
index adf0eed..709e4c6 100644 (file)
        "import-interwiki-history": "انسخ كل نسخ التاريخ للصفحة دي",
        "import-interwiki-templates": "اشمل كل القوالب",
        "import-interwiki-submit": "استيراد",
-       "import-interwiki-namespace": "النطاق الهدف:",
        "import-upload-filename": "اسم الملف:",
        "import-comment": "تعليق:",
        "importtext": "لو سمحت تصدّر الملف من الويكى المصدر عن طريق [[Special:Export|خاصية التصدير]].\nاحفظه على جهازك و بعدين حمله هنا.",
        "import-invalid-interwiki": "ماينفعش تستورد من الويكى المتحدد.",
        "importlogpage": "سجل الاستيراد",
        "importlogpagetext": "استيرادات إدارية لصفحات ليها تاريخ تعديل من مواقع ويكى تانية.",
-       "import-logentry-upload": "استورد [[$1]] بواسطة تحميل ملف",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|تعديل واحد|تعديل}}",
-       "import-logentry-interwiki": "استيراد ويكى $1",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|تعديل واحد|تعديل}} من $2",
        "tooltip-pt-userpage": "صفحة اليوزر بتاعتك",
        "tooltip-pt-anonuserpage": "صفحة اليوزر للأيبى اللى انت بتعمل منه تحرير",
        "expand_templates_ok": "موافق",
        "expand_templates_remove_comments": "امسح التعليقات",
        "expand_templates_generate_xml": "اعرض شجرة XML",
-       "expand_templates_preview": "بروفه"
+       "expand_templates_preview": "بروفه",
+       "special-characters-group-latin": "لاتينى",
+       "special-characters-group-latinextended": "Latin extended",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-greek": "يونانى",
+       "special-characters-group-cyrillic": "كيريلى",
+       "special-characters-group-arabic": "عربى",
+       "special-characters-group-hebrew": "عبرى",
+       "special-characters-group-bangla": "بانجلاديشى",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Sinhala",
+       "special-characters-group-gujarati": "Gujarati"
 }
index 6d86b3f..e61f4a8 100644 (file)
        "import-interwiki-history": "এই পৃষ্ঠাৰ সকলো সংশোধনৰ ইতিহাস প্ৰতিলিপি কৰক",
        "import-interwiki-templates": "সকলো সাঁচ অন্তৰ্ভুক্ত কৰক",
        "import-interwiki-submit": "আমদানি",
-       "import-interwiki-namespace": "গন্তব্য নামস্থান:",
-       "import-interwiki-rootpage": "গন্তব্য মূল পৃষ্ঠা (বৈকল্পিক):",
        "import-upload-filename": "নথিৰ নাম:",
        "import-comment": "মন্তব্য:",
        "importtext": "অনুগ্ৰহ কৰি [[Special:Export|ৰপ্তানি সুবিধা]] ব্যৱহাৰ কৰি উৎস ৱিকিৰ পৰা ফাইলটো ৰপ্তানি কৰক।\nআপোনাৰ কম্পিউটাৰত সাঁচি ৰাখক আৰু ইয়াত আপল'ড কৰক।",
index 865901d..2d591cb 100644 (file)
        "hidden-category-category": "Categoríes anubríes",
        "category-subcat-count": "{{PLURAL:$2|Esta categoría tien namái la subcategoría siguiente.|Esta categoría tien {{PLURAL:$1|la siguiente subcategoría|les siguientes $1 subcategoríes}}, d'un total de $2.}}",
        "category-subcat-count-limited": "Esta categoría tien {{PLURAL:$1|la subcategoría siguiente|les $1 subcategoríes siguientes}}.",
-       "category-article-count": "{{PLURAL:$2|Esta categoría contién namái la páxina siguiente.|{{PLURAL:$1|La páxina siguiente ta|Les $1 páxines siguientes tán}} nesta categoría, d'un total de $2.}}",
+       "category-article-count": "{{PLURAL:$2|Esta categoría contien namái la páxina siguiente.|{{PLURAL:$1|La páxina siguiente ta|Les $1 páxines siguientes tán}} nesta categoría, d'un total de $2.}}",
        "category-article-count-limited": "{{PLURAL:$1|La páxina siguiente ta|Les $1 páxines siguientes tán}} na categoría actual.",
-       "category-file-count": "{{PLURAL:$2|Esta categoría contién namái'l ficheru siguiente.|{{PLURAL:$1|El ficheru siguiente ta|Los $1 ficheros siguientes tán}} nesta categoría, d'un total de $2.}}",
+       "category-file-count": "{{PLURAL:$2|Esta categoría contien namái el ficheru siguiente.|{{PLURAL:$1|El ficheru siguiente ta|Los $1 ficheros siguientes tán}} nesta categoría, d'un total de $2.}}",
        "category-file-count-limited": "{{PLURAL:$1El ficheru siguiente ta|Los $1 ficheeros siguientes tán}} na categoría actual.",
        "listingcontinuesabbrev": "cont.",
        "index-category": "Páxines indexaes",
        "translateinterface": "P'amestar o camudar les traducciones pa toles wikis, usa [//translatewiki.net/ translatewiki.net], el proyeutu de traducción de MediaWiki.",
        "cascadeprotected": "Esta páxina ta protexida d'ediciones porque ta inxerta {{PLURAL:$1|na siguiente páxina, protexida|nes siguientes páxines, protexíes}} cola opción «en cascada» activada:\n$2",
        "namespaceprotected": "Nun tienes permisu pa editar páxines nel espaciu de nomes '''$1'''.",
-       "customcssprotected": "Nun tienes permisu pa editar esta páxina CSS porque contién preferencies personales d'otru usuariu.",
-       "customjsprotected": "Nun tienes permisu pa editar esta páxina de JavaScript porque contién preferencies personales d'otru usuariu.",
+       "customcssprotected": "Nun tienes permisu pa editar esta páxina CSS porque contien preferencies personales d'otru usuariu.",
+       "customjsprotected": "Nun tienes permisu pa editar esta páxina de JavaScript porque contien preferencies personales d'otru usuariu.",
        "mycustomcssprotected": "Nun tien permisu pa editar esta páxina CSS.",
        "mycustomjsprotected": "Nun tien permisu pa editar esta páxina JavaScript.",
        "myprivateinfoprotected": "Nun tien permisu pa editar la so información privada.",
        "editingsection": "Editando $1 (seición)",
        "editingcomment": "Editando $1 (seición nueva)",
        "editconflict": "Conflictu d'edición: $1",
-       "explainconflict": "Daquién más camudó esta páxina dende qu'empecipiasti a editala.\nL'área de testu d'arriba contién el testu de la páxina como ta nestos momentos.\nLos tos cambios s'amuesen nel área de testu d'abaxo.\nVas tener que fusionar los tos cambios dientro del testu esistente.\n'''Namái''' va guardase'l testu del área d'arriba cuando calques \"{{int:savearticle}}\".",
+       "explainconflict": "Daquién más camudó esta páxina dende qu'empecipiasti a editala.\nL'área de testu d'arriba contien el testu de la páxina como ta nestos momentos.\nLos tos cambios s'amuesen nel área de testu d'abaxo.\nVas tener que fusionar los tos cambios dientro del testu esistente.\n'''Namái''' va guardase'l testu del área d'arriba cuando calques \"{{int:savearticle}}\".",
        "yourtext": "El to testu",
        "storedversion": "Versión almacenada",
        "nonunicodebrowser": "'''Avisu: El to navegador nun cumple la norma Unicode.''' Hai un sistema alternativu que te permite editar páxines de forma segura: los caráuteres non-ASCII apaecerán nel cuadru d'edición como códigos hexadecimales.",
        "content-json-empty-object": "Oxetu baleru",
        "content-json-empty-array": "Matriz balera",
        "duplicate-args-category": "Páxines con argumentos duplicaos nes llamaes a plantíes",
-       "duplicate-args-category-desc": "La páxina contién llamaes a plantíes qu'usen argumentos duplicaos, como <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> o <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
-       "expensive-parserfunction-warning": "'''Avisu:''' Esta páxina contién demasiaes llamaes costoses a funciones d'análisis sintáuticu.\n\nHabría tener menos de $2 {{PLURAL:$2|llamada|llamaes}}, y agora tien $1 {{PLURAL:$1|llamada|llamaes}}.",
+       "duplicate-args-category-desc": "La páxina contien llamaes a plantíes qu'usen argumentos duplicaos, como <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> o <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
+       "expensive-parserfunction-warning": "'''Avisu:''' Esta páxina contien demasiaes llamaes costoses a funciones d'análisis sintácticu.\n\nHabría tener menos de $2 {{PLURAL:$2|llamada|llamaes}}, y agora tien $1 {{PLURAL:$1|llamada|llamaes}}.",
        "expensive-parserfunction-category": "Páxines con demasiaes llamaes costoses a funciones analítiques",
        "post-expand-template-inclusion-warning": "'''Avisu:''' El tamañu de les plantíes incluyíes ye demasiao grande.\nDelles plantíes nun se van incluir.",
        "post-expand-template-inclusion-category": "Páxines con escesu d'inclusiones de plantíes",
-       "post-expand-template-argument-warning": "'''Avisu:''' Esta páxina contién polo menos un parámetru de plantía que tien un tamañu d'espansión demasiao llargu.\nEstos parámetros s'omitieron.",
+       "post-expand-template-argument-warning": "<strong>Avisu:</strong> Esta páxina contien polo menos un parámetru de plantía que tien un tamañu d'espansión demasiao llargu.\nEstos parámetros s'omitieron.",
        "post-expand-template-argument-category": "Páxines con parámetros de plantía omitíos",
        "parser-template-loop-warning": "Deteutóse un bucle de plantíes: [[$1]]",
        "parser-template-recursion-depth-warning": "Se pasó la llende de fondura recursiva de les plantíes ($1)",
        "revdelete-no-change": "'''Avisu:''' l'elementu con data $2, $1 yá tien los axustes de visibilidá pidíos.",
        "revdelete-concurrent-change": "Error al camudar l'elementu con data $2, $1: paez que'l so estáu camudólu otra persona mientres tentabes camudalu tu.\nComprueba los rexistros, por favor.",
        "revdelete-only-restricted": "Fallu al anubrir l'elementu con data $1, $2: nun se puen quitar elementos de la vista de los alministradores ensin escoyer tamién una de les otres opciones de visibilidá.",
-       "revdelete-reason-dropdown": "*Razones comúnes de desaniciu \n** Violación del Copyright\n** Información personal o comentariu non apropiáu\n** Nome d'usuariu non apropiáu\n** Información potencialmente falsa",
+       "revdelete-reason-dropdown": "*Razones comunes de desaniciu \n** Violación del Copyright\n** Información personal o comentariu inapropiáu\n** Nome d'usuariu inapropiáu\n** Información potencialmente falsa",
        "revdelete-otherreason": "Motivu distintu/adicional:",
        "revdelete-reasonotherlist": "Otru motivu",
        "revdelete-edit-reasonlist": "Editar motivos del desaniciu",
        "ignorewarning": "Inorar l'avisu y grabar l'archivu de toes formes",
        "ignorewarnings": "Inorar tolos avisos",
        "minlength1": "Los nomes d'archivu han tener a lo menos una lletra.",
-       "illegalfilename": "El nome d'archivu \"$1\" contién carauteres non permitíos en títulos de páxina. Por favor renoma l'archivu y xúbilu otra vuelta.",
+       "illegalfilename": "El nome del ficheru \"$1\" contien caráuteres non permitíos en títulos de páxina. Por favor renoma l'archivu ya intenta xubilu otra vuelta.",
        "filename-toolong": "Los nomes de ficheru nun puen tener más de 240 bytes.",
        "badfilename": "Nome de la imaxe camudáu a \"$1\".",
        "filetype-mime-mismatch": "La estensión de ficheru \".$1\" nun casa cola triba MIME detectada del ficheru ($2).",
        "copyuploaddisabled": "Xubir por URL ta desactivao.",
        "uploaddisabledtext": "Les xubíes de ficheros tán desactivaes.",
        "php-uploaddisabledtext": "Les xubíes de ficheros tan desactivaes en PHP.\nPor favor, comprueba la configuración de file_uploads.",
-       "uploadscripted": "Esti ficheru contién códigu HTML o scripts que se puen interpretar equivocadamente por un navegador.",
-       "uploadscriptednamespace": "Esti ficheru SVG contién l'espaciu de nomes illegal «$1»",
+       "uploadscripted": "Esti ficheru contien códigu HTML o scripts que pueden interpretase de mou equivocáu por un navegador.",
+       "uploadscriptednamespace": "Esti ficheru SVG contien l'espaciu de nomes illegal «$1»",
        "uploadinvalidxml": "Nun pudo interpretase'l XML del ficheru cargáu.",
        "uploadvirus": "¡El ficheru tien un virus!\nDetalles: $1",
-       "uploadjava": "El ficheru ye un archivu ZIP que contién un ficheru .class de Java.\nXubir ficheros Java nun ta permitío, porque puen facer que se salten les torgues de seguridá.",
+       "uploadjava": "El ficheru ye un archivu ZIP que contien un ficheru .class de Java.\nXubir ficheros Java nun ta permitío, porque puede facer que se salten les torgues de seguridá.",
        "upload-source": "Ficheru orixe",
        "sourcefilename": "Nome d'orixe:",
        "sourceurl": "URL d'orixe:",
        "pageswithprop-prophidden-long": "valor de propiedá de testu llargu tapecíu ($1)",
        "pageswithprop-prophidden-binary": "valor de propiedá binaria tapecíu ($1)",
        "doubleredirects": "Redireiciones dobles",
-       "doubleredirectstext": "Esta páxina llista páxines que redireicionen a otres páxines de redireición.\nCada filera contién enllaces a la primer y segunda redireición, asina como al oxetivu de la segunda redireición, que de vezu ye la páxina oxetivu \"real\", onde tendría d'empobinar la primer redireición.\nLes entraes <del>tachaes</del> tan resueltes.",
+       "doubleredirectstext": "Esta páxina llista páxines que redireicionen a otres páxines de redireición.\nCada filera contien enllaces a la primera y segunda redireición, asina como al oxetivu de la segunda redireición, que de vezu ye la páxina oxetivu \"real\", onde tendría d'empobinar la primera redireición.\nLes entraes <del>tachaes</del> tan resueltes.",
        "double-redirect-fixed-move": "[[$1]] treslladóse.\nAnovóse automáticamente y agora redirixe haza [[$2]].",
        "double-redirect-fixed-maintenance": "Iguando automáticamente la doble redireición de [[$1]] a [[$2]] nuna xera de mantenimientu.",
        "double-redirect-fixer": "Iguador de redireiciones",
        "trackingcategories-msg": "Categoría de siguimientu",
        "trackingcategories-name": "Nome del mensaxe",
        "trackingcategories-desc": "Criterios d'inclusión de categoría",
-       "noindex-category-desc": "La páxina contién una pallabra máxica <code><nowiki>__NOINDEX__</nowiki></code> (y ta nun espaciu de nomes nel que se permite esta marca) y, poro, los robots nun la indexarán.",
-       "index-category-desc": "La páxina contién una pallabra máxica <code><nowiki>__INDEX__</nowiki></code> (y ta nun espaciu de nomes nel que se permite esta marca) y, poro, los robots la indexarán anque normalmente nun lo faigan.",
+       "noindex-category-desc": "La páxina contien una pallabra máxica <code><nowiki>__NOINDEX__</nowiki></code> (y ta nun espaciu de nomes nel que se permite esta marca) y, poro, los robós nun la indexarán.",
+       "index-category-desc": "La páxina contien una pallabra máxica <code><nowiki>__INDEX__</nowiki></code> (y ta nun espaciu de nomes nel que se permite esta marca) y, poro, los robós la indexarán anque normalmente nun lo faigan.",
        "post-expand-template-inclusion-category-desc": "El tamañu de la páxina ye mayor que <code>$wgMaxArticleSize</code> después de espander toles plantíes, de mou qu'algunes plantíes nun s'espandieron.",
        "post-expand-template-argument-category-desc": "La páxina ye mayor que <code>$wgMaxArticleSize</code> después d'espander l'argumentu d'una plantía (daqué ente llaves triples, como <code>{{{Daqué}}}</code>).",
        "expensive-parserfunction-category-desc": "La páxina usa demasiaes funciones analítiques costoses (como <code>#ifexist</code>). Llei [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
        "deletecomment": "Motivu:",
        "deleteotherreason": "Motivu distintu/adicional:",
        "deletereasonotherlist": "Otru motivu",
-       "deletereason-dropdown": "*Motivos comúnes d'esborráu\n** Puxarra\n** Vandalismu\n** Violación de drechos d'autor\n** A pidimientu del autor\n** Redireición frañada",
+       "deletereason-dropdown": "*Motivos comunes d'esborráu\n** Puxarra\n** Vandalismu\n** Violación de drechos d'autor\n** A pidimientu del autor\n** Redireición frañada",
        "delete-edit-reasonlist": "Editar los motivos d'esborráu",
        "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.",
        "move-watch": "Vixilar esta páxina",
        "movepagebtn": "Treslladar la páxina",
        "pagemovedsub": "Treslláu correctu",
-       "movepage-moved": "'''\"$1\" treslladóse a \"$2\"'''",
+       "movepage-moved": "<strong>«$1» treslladóse a «$2»</strong>",
        "movepage-moved-redirect": "Creóse una redireición.",
        "movepage-moved-noredirect": "Desaniciose la creación d'una redireición.",
        "articleexists": "Yá hai una páxina con esi nome, o'l nome qu'escoyisti nun ye válidu. Por favor, escueyi otru nome.",
        "import-interwiki-history": "Copiar toles versiones d'historial d'esta páxina",
        "import-interwiki-templates": "Incluyir toles plantíes",
        "import-interwiki-submit": "Importar",
-       "import-interwiki-namespace": "Espaciu de nomes de destín:",
-       "import-interwiki-rootpage": "Páxina raíz de destín (opcional):",
+       "import-mapping-default": "Importar a los llugares predeterminaos",
+       "import-mapping-namespace": "Importar a un espaciu de nomes:",
+       "import-mapping-subpage": "Importar como subpáxines de la páxina siguiente:",
        "import-upload-filename": "Nome del ficheru:",
        "import-comment": "Comentariu:",
        "importtext": "Por favor, esporta'l ficheru dende la wiki d'orixe usando la [[Special:Export|ferramienta d'esportación]].\nGuárdalu nel ordenador y xúbilu equí.",
        "spamprotectiontext": "La páxina que queríes guardar foi bloquiada pol filtru de spam.\nProbablemente tea causao por un enllaz a un sitiu esternu de la llista prieta.",
        "spamprotectionmatch": "El testu siguiente foi'l qu'activó'l nuesu filtru de spam: $1",
        "spambot_username": "Llimpieza de spam de MediaWiki",
-       "spam_reverting": "Revirtiendo a la cabera versión que nun contién enllaces a $1",
+       "spam_reverting": "Revirtiendo a la cabera versión que nun contien enllaces a $1",
        "spam_blanking": "Toles revisiones teníen enllaces a $1; dexando en blanco",
        "spam_deleting": "Toles revisiones teníen enllaces a $1, desaniciando",
        "simpleantispam-label": "Comprobación anti-spam.\n¡'''NUN''' rellenes esto!",
        "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": "<strong>Los cambios aplicáronse correutamente.</strong>",
-       "tags-edit-failure": "<strong>Nun pudieron aplicase los cambios:</strong>\n$1",
+       "tags-edit-success": "Los cambios aplicáronse correutamente.",
+       "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.",
        "tags-edit-none-selected": "Seleiciona polo menos una etiqueta p'amestar o desaniciar.",
        "log-name-managetags": "Rexistru de xestión d'etiquetes",
        "log-description-managetags": "Esta páxina tien la llista de les xeres de xestión rellacionaes coles [[Special:Tags|etiquetes]]. El rexistru contien namái les aiciones feches manuamente por un alministrador; les etiquetes pueden crease o desaniciase pol software wiki ensin que quede grabada una entrada nesti rexistru.",
        "logentry-managetags-create": "$1 {{GENDER:$2|creó}} la etiqueta «$4»",
+       "logentry-managetags-delete": "$1 {{GENDER:$2|desanició}} la etiqueta «$4» (quitada de $5 {{PLURAL:$5|revisión o entrada del rexistru|revisiones o entraes del rexistru}})",
+       "logentry-managetags-activate": "$1 {{GENDER:$2|activó}} la etiqueta «$4» pa que la usen los usuarios y bots",
+       "logentry-managetags-deactivate": "$1 {{GENDER:$2|desactivó}} la etiqueta «$4» pa torgar que la usen los usuarios y bots",
        "log-name-tag": "Rexistru d'etiquetes",
+       "log-description-tag": "Esta páxina amuesa cuándo los usuarios amestaron o desaniciaron [[Special:Tags|etiquetes]] de revisiones individuales o entraes del rexistru. El rexistru nun recueye les aiciones d'etiquetáu cuando asoceden como parte d'una edición, desaniciu o aición asemeyada.",
+       "logentry-tag-update-add-revision": "$1 {{GENDER:$2|amestó}} {{PLURAL:$7|la etiqueta|les etiquetes}} $6 a la revisión $4 de la páxina $3",
+       "logentry-tag-update-add-logentry": "$1 {{GENDER:$2|amestó}} {{PLURAL:$7|la etiqueta|les etiquetes}} $6 a la entrada del rexistru $5 de la páxina $3",
+       "logentry-tag-update-remove-revision": "$1 {{GENDER:$2|desanició}} {{PLURAL:$9|la etiqueta|les etiquetes}} $8 de la revisión $4 de la páxina $3",
+       "logentry-tag-update-remove-logentry": "$1 {{GENDER:$2|desanició}} {{PLURAL:$9|la etiqueta|les etiquetes}} $8 de la entrada del rexistru $5 de la páxina $3",
+       "logentry-tag-update-revision": "$1 {{GENDER:$2|anovó}} etiquetes na revisión $4 de la páxina $3 ({{PLURAL:$7|amestó}} $6; {{PLURAL:$9|desanició}} $8)",
+       "logentry-tag-update-logentry": "$1 {{GENDER:$2|anovó}} etiquetes na entrada del rexistru $5 de la páxina $3 ({{PLURAL:$7|amestó}} $6; {{PLURAL:$9|desanició}} $8)",
        "rightsnone": "(nengún)",
        "revdelete-summary": "editar resume",
        "feedback-adding": "Amestando el comentariu a la páxina...",
        "feedback-bugornote": "Si tas preparáu pa describir un problema técnicu en detalle, [$1 informa del fallu].\nD'otra miente, pues usar el formulariu cenciellu d'abaxo. El to comentariu apaecerá na páxina \"[$3 $2]\" xunto col to nome d'usuariu y el restolador qu'uses.",
        "feedback-cancel": "Encaboxar",
        "feedback-close": "Fecho",
+       "feedback-external-bug-report-button": "Rexistrar una xera técnica",
+       "feedback-dialog-title": "Unviar opinión",
+       "feedback-dialog-intro": "Puedes usar el formulariu fácil de más abaxo pa unviar comentarios. Estos amestaránse a la páxina «$1», xunto col to nome d'usuariu.",
        "feedback-error-title": "Error",
        "feedback-error1": "Fallu: Resultáu de la API non reconocíu",
        "feedback-error2": "Fallu: Falló la edición",
        "feedback-error3": "Fallu: Ensin respuesta de la API",
+       "feedback-error4": "Error: Nun pudo espublizase nel títulu de comentarios dau",
        "feedback-message": "Mensaxe:",
        "feedback-subject": "Asuntu:",
        "feedback-submit": "Unviar",
+       "feedback-terms": "Entiendo que la información del mio axente d'usuariu incluye información sobro la versión exauta del mio restolador y sistema operativu, y que se compartirá públicamente xunto colos comentarios.",
+       "feedback-termsofuse": "Acepto dar la mio opinión acordies colos Términos d'usu.",
        "feedback-thanks": "¡Gracies! La to opinión s'espublizó na páxina «[$2  $1]».",
        "feedback-thanks-title": "¡Gracies!",
        "feedback-useragent": "Axente d'usuariu:",
        "searchsuggest-search": "Buscar",
-       "searchsuggest-containing": "que contién...",
+       "searchsuggest-containing": "que contien...",
        "api-error-badaccess-groups": "Nun tienes permisu pa xubir ficheros a esta wiki.",
        "api-error-badtoken": "Fallu internu: token incorreutu.",
        "api-error-copyuploaddisabled": "Xubir d'una URL ta desactivao nesti sirvidor.",
        "api-error-stashfailed": "Fallu internu: el sirvidor nun pudo guardar el ficheru temporal.",
        "api-error-publishfailed": "Fallu internu: el sirvidor nun pudo espublizar el ficheru temporal.",
        "api-error-stasherror": "Hebo un error al xubir el ficheru al almacén.",
+       "api-error-stashedfilenotfound": "Nun s'alcontró'l ficheru na reserva al intentar cargalu dende allí.",
+       "api-error-stashpathinvalid": "El camín onde tenía qu'alcontrase'l ficheru de la reserva ye inválidu.",
+       "api-error-stashfilestorage": "Hebo un error al atroxar el ficheru nel depósitu.",
+       "api-error-stashzerolength": "El sirvidor nun pudo atroxar el ficheru nel depósitu porque tien tamañu cero.",
+       "api-error-stashnotloggedin": "Tienes d'aniciar sesión p'atroxar ficheros nel depósitu de carga.",
+       "api-error-stashwrongowner": "El ficheru al qu'intentabes acceder nel depósitu nun te pertenez.",
+       "api-error-stashnosuchfilekey": "La clave de ficheru a la qu'intentabes acceder nel depósitu nun esiste.",
        "api-error-timeout": "El sirvidor nun respondió nel tiempu esperáu.",
        "api-error-unclassified": "Hebo un fallu desconocíu",
        "api-error-unknown-code": "Fallu desconocíu: «$1»",
        "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_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>",
        "pagelanguage": "Selector de llingua de la páxina",
        "pagelang-name": "Páxina",
        "pagelang-language": "Llingua",
index 40914c0..2d2e09a 100644 (file)
        "importinterwiki": "Transwiki koburera",
        "import-interwiki-history": "Ksudara va kot izvotsiatos ke batu bu",
        "import-interwiki-submit": "Koburera",
-       "import-interwiki-namespace": "Graskarafo yoltxo :",
        "import-upload-filename": "Iyeltakyolt :",
        "import-comment": "Sebuks :",
        "importtext": "Exportez un fichier depuis le wiki source en utilisant la fonction Special:Export, sauvez la page sur votre disque puis envoyez là ici.",
        "import-noarticle": "Me gokoburenu bu !",
        "xml-error-string": "$1 moe $2 conha, $3 briz ($4 byte): $5",
        "importlogpage": "Koburera va \"log\" bu",
-       "import-logentry-upload": "kobureyen [[$1]] kan iyeltakkalvajara",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|betaks|betaks}}",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|betaks|betaks}} male $2",
        "tooltip-pt-userpage": "Jinafu favesikbu",
index 741e455..c5158a4 100644 (file)
        "import-interwiki-history": "इस पृष्ठ के सभी इतिहास अवतरण कॉपी करें",
        "import-interwiki-templates": "कुल साँचा शामिल करा जाय",
        "import-interwiki-submit": "आयात",
-       "import-interwiki-namespace": "गंतव्य नामस्थान:",
-       "import-interwiki-rootpage": "गंतव्य पृष्ठ उपसर्ग (वैकल्पिक):",
        "import-upload-filename": "फ़ाइल कय नाँव",
        "import-comment": "टिप्पणी:",
        "importtext": "कृपया स्रोत विकि से संचिका निर्यातित करने के लिए [[Special:Export|निर्यात सुविधा]] का इस्तेमाल करें।\nइसे अपने संगणक पर सँजो के यहाँ चढ़ा दें।",
        "import-rootpage-nosubpage": "दिए गए उपसर्ग पृष्ठ \"$1\" के नामस्थान में उप-पृष्ठ नहीं बनाए जा सकते।",
        "importlogpage": "आयात सूची",
        "importlogpagetext": "अन्य विकियों से प्रबन्धकों द्वारा किए गए सम्पादन इतिहास के साथ होने वाले पृष्ठों का आयात।",
+       "import-logentry-upload-detail": "$1 अवतरण आयात {{PLURAL:$1|किया गया|किये गए}}",
+       "import-logentry-interwiki-detail": "$2 से $1 अवतरण आयात {{PLURAL:$1|किया गया|किये गए}}",
        "javascripttest": "जावास्क्रिप्ट परीक्षण",
+       "javascripttest-pagetext-noframework": "यह पृष्ठ जावास्क्रिप्ट परीक्षण चलाने के लिए है।",
        "javascripttest-pagetext-unknownframework": "अज्ञात परीक्षण ढाँचा \"$1\"",
        "javascripttest-pagetext-unknownaction": "अज्ञात काम \"$1\".",
        "javascripttest-pagetext-frameworks": "कृपया निम्न परीक्षण ढाँचों में से एक चुनें: $1",
        "tooltip-ca-protect": "इ पन्ना कय सुरक्षित करा जाय",
        "tooltip-ca-unprotect": "ई पन्ना कय सुरक्षा स्तर बदला जाय",
        "tooltip-ca-delete": "ई पन्ना मेटावा जाय",
+       "tooltip-ca-undelete": "इस पृष्ठ को हटाने से पहले किये गये बदलाव पुनर्स्थापित करें",
        "tooltip-ca-move": "ई पन्ना कय नाँव बदला जाय",
        "tooltip-ca-watch": "इ पन्ना कय अपने ध्यानसूची में डारा जाय",
        "tooltip-ca-unwatch": "इ पन्ना कय अपने ध्यानसूची से हटावा जाय",
        "pageinfo-contentpage-yes": "हाँ",
        "pageinfo-protect-cascading-yes": "हाँ",
        "pageinfo-category-info": "श्रेणी जानकारी",
+       "pageinfo-category-total": "कुल सदस्य गिन्ती",
        "pageinfo-category-pages": "पन्नन कय सङ्ख्या",
        "pageinfo-category-subcats": "उपश्रेणिन कय गिन्ती",
        "pageinfo-category-files": "फाइल कय गिन्ती",
        "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",
        "file-info-png-looped": "चक्रित",
        "file-info-png-repeat": "$1 {{PLURAL:$1|दाइ}} प्ले होइ चुका है",
        "file-info-png-frames": "$1 {{PLURAL:$1|फ्रेम}}",
+       "file-no-thumb-animation": "'''सूचना: तकनीकी समस्याओं के कारण इस फ़ाइल के थम्बनेल ऐनिमेटिड नहीं होंगे।'''",
+       "file-no-thumb-animation-gif": "'''सूचना:तकनीकी समस्याओं के कारण इस फ़ाइल जैसे अधिक रेज़ोल्यूशन गिफ़ चित्रों के थम्बनेल ऐनिमेटिड नहीं होंगे।'''",
        "newimages": "नँवा फ़ाईल्स कय गैलरी",
+       "imagelisttext": "नीचे $2 के नुसार '''$1''' {{PLURAL:$1|फ़ाईल दी है।|फ़ाईलें दी हुईं हैं।}}",
+       "newimages-summary": "यह विशेष पृष्ठ हाल ही में अपलोड की गयी फ़ाइलें दिखाता है।",
        "newimages-legend": "छनना",
        "newimages-label": "फाइल नाँव (या ओकर अंश):",
        "newimages-showbots": "बाट कय अपलोड देखावा जाय",
        "saturday-at": "शनीच्चर कय $1",
        "sunday-at": "अत्तवार कय $1",
        "yesterday-at": "कल्हीँया",
+       "bad_image_list": "प्रारूप इस प्रकार है:\n\nकेवल सूची के मद (* से शुरू होने वाली पंक्तियाँ) चुने जाएँगी।\nकिसी भी पक्ति में मौजूद पहली कड़ी, गलत संचिका की कड़ी होनी चाहिए\nउसी पंक्ति मे आगे आने वाली अन्य कड़ियों को अपवाद माना जाता है, अर्थात् ये ऐसे पृष्ठ होंगे जिनके अंदर यह संचिका जड़ी हुई है।",
        "metadata": "मेटाडाटा",
        "metadata-help": "इस फ़ाइल में बढ़ाई हुई जानकारी हैं, हो सकता है कि यह फ़ाइल बनाने में इस्तेमाल किये गए स्कैनर अथवा कैमेरा से यह प्राप्त हुई हैं। अगर यह फ़ाइल बदलदी गई है तो यह जानकारी नई फ़ाइल से मेल नहीं खाने की आशंका है।",
        "metadata-expand": "अउर विवरण देखावा जाय",
        "exif-countrycodecreated": "तस्विर खिचल देश कय कोड",
        "exif-provinceorstatecreated": "प्रांत या राज्य जहां इ चित्र लै ग रहा",
        "exif-citycreated": "शहर जहां इ चित्र लै ग रहा",
+       "exif-sublocationcreated": "यह चित्र शहर कि इस जगह जहा मे लिया गया था",
        "exif-worldregiondest": "दुनिया कय क्षेत्र देखाइ गा है",
        "exif-countrydest": "देश देखाइ गा है",
        "exif-countrycodedest": "देखावल देश कय कोड",
        "exif-fixtureidentifier": "फिक्चर कय नाम",
        "exif-locationdest": "देखावल जगह",
        "exif-locationdestcode": "देखावल जगहि कय कोड",
+       "exif-objectcycle": " दिन के समय जिसके लिए यह मीडिया है",
        "exif-contact": "संपर्क जानकारी",
        "exif-writer": "लेखक",
        "exif-languagecode": "भाषा",
        "confirmemail": "आपन ई-मेल ठहर निश्चित करा जाय",
        "confirmemail_noemail": "आप कय [[Special:Preferences|पसंद]] मा वैध इ-मेल एड्रेस नाइ दिहा है।",
        "confirmemail_text": "{{SITENAME}} मा इमेल सुविधन कय लाभ उठावे खर्तीन आप कय आपन इमेल ठहर प्रमाणित करेक परि ।कन्फर्मेशन कोड भेजय खत्तीर निचे कय बटन पे क्लिक किन जाय। मेल मा कोड वाला लिन्क है ।उ लिन्क कय आप अपने ब्राउजर मा खोलि कय आपन इमेल ठहर प्रमाणित कै सका जात है ।",
+       "confirmemail_pending": "आपको पहलेसे ही एक कन्फर्मेशन कोड भेजा गया हैं;\nअगर आपने हालमें खाता खोला हैं, तो नये कोड की माँग करने से पहले कुछ पल उसका इंतज़ार करें।",
        "confirmemail_send": "कन्फर्मेशन कोड मेल करा जाय",
        "confirmemail_sent": "कन्फर्मेशन इ-मेल भेज दिहा गा है।",
        "confirmemail_oncreate": "आप कय इ-मेल  ठहर पे एकठु कन्फर्मेशन कोड भेजा गा है।\nलॉग इन करय खत्तीर एकर आवश्यकता नाइ है, लेकिन इ विकि पे उपलब्ध इ-मेल आधारित सुविधन् कय इस्तेमाल करय खत्तीर इ देब जरूरी है।",
        "confirmemail_success": "आप कय इमेल ठहर प्रमाणित होइ गवा है । अब आप [[Special:UserLogin|लाग इन]] कैकय विकि कय मजा लै सका जात है ।",
        "confirmemail_loggedin": "आप कय इमेल ठहर प्रमाणित होइ गवा है ।",
        "confirmemail_subject": "{{SITENAME}} इ-मेल एड्रेस प्रमाणिकरण",
+       "confirmemail_body": "किसीने, शायद आपने,  $1 आइपी एड्रेस से,\n{{SITENAME}} पर  \"$2\" इस नाम से खाता खोलने की माँग की हैं।\n\nयह खाता आपही का हैं और {{SITENAME}} पर उपलब्ध इ-मेल\nसुविधा शुरू करने के लिये, नीचे दी गई कड़ी अपने ब्राउज़रमें खोलें:\n\n$3\n\nअगर यह माँग आपने *नहीं* की हैं, तो इसे रद्द करने के लिये\nनीचे दी हुई कड़ी खोलें:\n\n$5\n\nयह निश्चिती कोड $4 को समाप्त हो जायेगा।",
+       "confirmemail_body_changed": "किसी ने, शायद आपने ही, आइ॰पी पते $1 से {{SITENAME}} पर \"$2\" सदस्य खाते का ई-मेल पता बदलकर ये पता दिया है।\n\nइस बात की पुष्टि करने के लिये कि यह सदस्य खाता आपका ही है, और {{SITENAME}} पर ई-मेल सुविधाएँ पुनः शुरू करने के लिये निम्न लिंक अपने ब्राउज़र में खोलें:\n\n$3\n\nयदि यह सदस्य खाता आपका नहीं है, ई-मेल पुष्टि रद्द करने के लिये निम्न लिंक पर जाएँ:\n\n$5\n\nये पुष्टिकरण लिंक $6 को $7 बजे के बाद काम नहीं करेंगे।",
+       "confirmemail_body_set": "किसी ने, शायद आपने ही, आई॰पी पते $1 से,\n{{SITENAME}} पर \"$2\" सदस्य खाते का ई-मेल पता यह ईमेल पता निर्दिष्ट किया है।\n\nइस बात की पुष्टि करने के लिए कि यह सदस्य खाता आपका ही है,\nऔर {{SITENAME}} पर ईमेल सुविधाएँ शुरू करने के लिए निम्न लिंक अपने ब्राउज़र में खोलें:\n\n$3\n\nयदि यह सदस्य खाता आपका नहीं है, ई-मेल पुष्टि रद्द करने के लिए निम्न लिंक पर जाएँ:\n\n$5\n\nयह पुष्टिकरण लिंक $6 को $7 के बाद काम नहीं करेंगे।",
        "confirmemail_invalidated": "इ-मेल एड्रेस प्रमाणिकरण रद्द कै गय",
        "invalidateemail": "इ-मेल प्रमाणिकरण रद्द करा जाय",
        "scarytranscludedisabled": "[आंतरविकि ट्रान्स्क्लुडिंग बंद है]",
        "scarytranscludefailed-httpstatus": "[$1 कय लिये साँचा नाइ मँगाइ मिला, त्रुटि: HTTP $2]",
        "scarytranscludetoolong": "[यूआरएल बहुतय लम्मा है]",
        "deletedwhileediting": "'''Warning''':आप जबसे सम्पादन शुर करा गा है तब से इ पन्ना मिटाइ दिहा है ।",
+       "confirmrecreate": "सदस्य [[User:$1|$1]] ([[User talk:$1|वार्ता]]) ने आपके द्वारा संपादन शुरू होने के बाद यह पृष्ठ निम्नलिखित कारण देकर हटाया हैं:\n: ''$2''\nक्या आप इसे फिरसे बनाना चाहतें हैं, इसकी निश्चिती करें।",
+       "confirmrecreate-noreason": "जब आपने इस पृष्ठ का सम्पादन शुरू किया था, उसके बाद से सदस्य [[User:$1|$1]] ([[User talk:$1|talk]]) ने इसे हटा दिया है।  कृपया पुष्टि करें कि आप इस पृष्ठ को पुनः बनाना चाहते हैं।",
        "recreate": "फिरसे बनावा जाय",
        "confirm_purge_button": "ठीक है",
        "confirm-purge-top": "पन्ना कय कैश साफ करा जाय ?",
        "autoredircomment": "[[$1]] पे अनुप्रेषित",
        "autosumm-new": "'$1' कय साथे नँवा पन्ना बनावा गय",
        "autosumm-newblank": "खाली पन्ना बनावा गय",
+       "lag-warn-normal": "पिछले $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|रॉ ध्यानसूची का संपादन]] भी कर सकते हैं।",
        "watchlistedit-normal-submit": "शिर्षक हटावा जाय",
        "watchlistedit-normal-done": "आप कय ध्यानसूचीसे {{PLURAL:$1|1शीर्षक|$1 शीर्षक}} हटाइ गय:",
        "watchlistedit-raw-title": "कच्चा निगरानी सूची सम्पादन करा जाय",
        "watchlistedit-raw-legend": "कच्चा निगरानी सूची सम्पादन करा जाय",
+       "watchlistedit-raw-explain": "आपकी ध्यानसूची में सूचीबद्ध पृष्ठ नीचे दिये गये हैं, और वे सूची से निकालकर या बढ़ाकर बदले जा सकते हैं;\nहर लाइन पर एक शीर्षक देकर।\nजब पूर्ण हो जाए, तो \"{{int:Watchlistedit-raw-submit}}\" पर क्लिक करें।\nआप [[Special:EditWatchlist|स्टैण्डर्ड संपादक का इस्तेमाल]] भी कर सकते हैं।",
        "watchlistedit-raw-titles": "शीर्षक:",
        "watchlistedit-raw-submit": "ध्यानसूची अपडेट करा जाय",
        "watchlistedit-raw-done": "आप कय ध्यान सुची अपडेट होइ गवा है ।",
        "watchlistedit-raw-removed": "{{PLURAL:$1|1शीर्षक|$1 शीर्षक}} हटाइ गय:",
        "watchlistedit-clear-title": "अवलोकन सूची खाली कै गय",
        "watchlistedit-clear-legend": "अवलोकन सूची खाली कीन जाय",
+       "watchlistedit-clear-explain": "आपकी ध्यानसूची से सभी पृष्ठ हटा दिये जायेंगे",
        "watchlistedit-clear-titles": "शिर्षक",
+       "watchlistedit-clear-done": "आपकी ध्यानसूची खाली कर दी गयी है।",
+       "watchlistedit-clear-removed": "$1 पृष्ठ{{PLURAL:$1|हटाया गया|हटाये गए}}:",
+       "watchlistedit-too-many": "यहाँ दर्शाने के लिए अत्यधिक पृष्ठ हैं।",
        "watchlisttools-clear": "अवलोकन सूची खाली कीन जाय",
        "watchlisttools-view": "आधारित बदलाव देखा जाय",
        "watchlisttools-edit": "ध्यानसूची देखा जाय अव संपादित कीन जाय",
        "watchlisttools-raw": "रॉ ध्यानसूची देखा जाय अव संपादित कीन जाय",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|वार्ता]])",
+       "duplicate-defaultsort": "'''Warning:''' पुरानी मूल क्रमांकन कुंजी \"$1\" के बजाय अब मूल क्रमांकन कुंजी \"$2\" होगी।",
        "version": "संस्करण",
        "version-extensions": "इन्स्टॉल करल एक्स्टेंशन",
        "version-skins": "इन्स्टॉल करल त्वचा",
        "version-ext-colheader-description": "विवरण",
        "version-ext-colheader-credits": "लेखक",
        "version-license-title": "$1 के लिए लाइसेंस",
+       "version-license-not-found": "इस एक्सटेंशन के लिए कोई विस्तृत लाइसेंस जानकारी नहीं पायी गयी।",
        "version-credits-title": "$1 कय लिए श्रेय",
+       "version-credits-not-found": "इस एक्सटेंशन के लिए कोई विस्तृत श्रेय जानकारी नहीं पायी गयी।",
        "version-poweredby-credits": "इ विकि  '''[https://www.mediawiki.org/ MediaWiki]''' से संचालित है, कॉपीराइट © 2001 - $1  $2 ।",
        "version-poweredby-others": "अउर",
        "version-poweredby-translators": "translatewiki.net अनुवादक",
+       "version-credits-summary": "हम निम्न व्यक्तियों द्वारा [[Special:Version|मीडियाविकि]] में किये गए योगदानों को सराहते हैं।",
        "version-software": "इन्स्टॉल करल प्रणाली",
        "version-software-product": "प्रोडक्ट",
        "version-software-version": "संस्करण",
        "version-libraries": "इन्स्टाल करल लाइब्रेरी",
        "version-libraries-library": "लाइब्रेरी",
        "version-libraries-version": "संस्करण",
+       "redirect-legend": "फ़ाइल अथवा पृष्ठ को पुनर्प्रेषण",
+       "redirect-summary": "यह विशेष पृष्ठ फ़ाइलनाम प्रदान करने पर फ़ाइल नाम को, पृष्ठ आइ॰दी अथवा अवतरण आइ॰दी देने पर पृष्ठ को, और सदस्य आइ॰दी देने पर सदस्य पृष्ठ को पुनर्प्रेषित करता है। उदाहरण: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], या [[{{#Special:Redirect}}/user/101]]।",
        "redirect-submit": "जावा जाय",
        "redirect-lookup": "ढूँढा जाय:",
        "redirect-value": "मूल्य:",
        "specialpages-group-developer": "डेवलपर औजार",
        "blankpage": "खाली पन्ना",
        "intentionallyblankpage": "इ पन्ना जानबुझी कय खाली छोडा है ।",
+       "external_image_whitelist": " #यह लाइन जैसी है वैसी ही छोड़ दें<pre>\n #नीचे रेगुलर एक्सप्रेशन के टुकड़े लिखें(बस वही हिस्सा जो // के बीच में आता है)\n #इन एक्सप्रेशन का बाहरी (hotlinked) छवियों के यू॰आर॰एल के साथ मिलान किया जाएगा\n #जो छवियाँ मिलान करेंगी, उन्हें प्रदर्शित किया जाएगा, अन्यथा केवल छवि की कड़ी दिखायी जाएगी\n # # से शुरू होने वाली लाइनें टिप्पणी मानी जाती हैं\n # इस केस-असंवेदी है\n\n #सब रेगुलर एक्सप्रेशन टुकड़े इस लाइन से ऊपर रखें। यह लाइन जैसी है वैसी ही छोड़ दें</pre>",
        "tags": "वैध बदलाव चिप्पि",
        "tag-filter": "[[Special:Tags|चिप्पी]] छननी:",
        "tag-filter-submit": "फिल्टर",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|टैग}}]]: $2)",
        "tags-title": "चिप्पि",
+       "tags-intro": "यह पृष्ठ अर्थ सहित वह चिप्पियाँ दर्शाता है जिनका कोई तंत्रांश किसी संपादन पर निशान लगाने के लिए इस्तेमाल कर सकता है।",
        "tags-tag": "चिप्पी कय नाँव",
        "tags-display-header": "बदलाव सूचिन् मा प्रदर्शन",
        "tags-description-header": "अर्थ कय पूरा वर्णन",
+       "tags-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|बदलाव|बदलाव}}",
+       "tags-create-heading": "नवाँ ट्याग बनावा जाय",
+       "tags-create-tag-name": "ट्याग नाम:",
+       "tags-create-reason": "कारण:",
+       "tags-create-submit": "बनावा जाय",
+       "tags-create-no-name": "आपको एक चिप्पि का नाम निर्दिष्ट करना चाहिए।",
+       "tags-delete-title": "चिप्पि हटायें",
+       "tags-delete-reason": "कारण:",
+       "tags-activate-title": "चिप्पी शुरु करा जाय",
+       "tags-activate-reason": "कारण:",
+       "tags-activate-not-found": "चिप्पी \"$1\" मौजूद नाई है।",
+       "tags-activate-submit": "चालु करा जाय",
+       "tags-deactivate-title": "बन्द करा जाय",
+       "tags-deactivate-reason": "कारण:",
+       "tags-deactivate-submit": "निष्क्रिय करें",
+       "tags-edit-title": "चिप्पी सम्पादन करा जाय",
+       "tags-edit-manage-link": "चिप्पी मिलावा जाए",
+       "tags-edit-revision-selected": "[[:$2]] {{PLURAL:$1|कय}} चयनित अवतरण:",
+       "tags-edit-logentry-selected": "{{PLURAL:$1|चुनल}} लॉग इवेंट:",
+       "tags-edit-existing-tags": "मौजुद चिप्पी:",
+       "tags-edit-existing-tags-none": "''कवनो नाइ''",
+       "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-nooldid-title": "अमान्य लक्ष्य अवतरण",
        "comparepages": "पन्ना दाँजा जाय",
        "compare-page1": "पन्ना १",
        "compare-page2": "पन्ना २",
        "compare-invalid-title": "आप कय दिहा शिर्षक अमान्य है ।",
        "compare-title-not-exists": "आप कय दिहा शिर्षक नाइ है ।",
        "compare-revision-not-exists": "आप कय दिहा संशोधन नाइ है ।",
+       "dberr-problems": "क्षमा करें! इस जालस्थल को कुछ तकनीकी परेशानियों का सामना करना पड़ रहा है।",
        "dberr-again": "कुछ मिन रुकि कय फिरसे लोड किन जाय",
+       "dberr-info": "(डाटाबेस से संपर्क नहीं हो पा रहा: $1)",
+       "dberr-info-hidden": "(डाटाबेस से संपर्क नहीं किया जा सका)",
        "dberr-usegoogle": "इही बिंचे आप गूगल से खोज कै सका जात है ।",
+       "dberr-outofdate": "ध्यान दे, हो सकता है कि हमारी सामग्री से संबंधित उनकी सूची बासी हो।",
+       "dberr-cachederror": "यह अनुरोधित पन्ने की संचित प्रति है, हो सकता है यह ताज़ी न हो।",
+       "htmlform-invalid-input": "आपके द्वारा प्रदत्त कुछ सामग्री में समस्याएँ हैं",
+       "htmlform-select-badoption": "आपके द्वारा निर्दिष्ट मान वैध विकल्प नहीं है।",
+       "htmlform-int-invalid": "आपके द्वारा निर्दिष्ट मान पूर्णांक नहीं है।",
+       "htmlform-float-invalid": "आपके द्वारा निर्दिष्ट मान संख्या नहीं है।",
+       "htmlform-int-toolow": "आपके द्वारा निर्दिष्ट मान न्यूनतम $1 से कम है",
+       "htmlform-int-toohigh": "आपके द्वारा निर्दिष्ट मान अधिकतम $1 से ज़्यादा है",
+       "htmlform-required": "इस मान की आवश्यकता है",
        "htmlform-submit": "जमा कीन जाय",
        "htmlform-reset": "बदलाव फिरसे उही जगही लावा जाय",
        "htmlform-selectorother-other": "अउर",
        "sqlite-no-fts": "$1पूर्ण-पाठ खोज समर्थन कय बिना",
        "logentry-delete-delete": "$1 ने पृष्ठ $3 {{GENDER:$2|हटा}} दिहा गय",
        "logentry-delete-restore": "$1 ने पृष्ठ $3 कय {{GENDER:$2|पुनर्स्थापित}} कै गय",
+       "logentry-delete-event": "$1 ने $3 पृष्ठ की लॉग {{PLURAL:$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-restricted": "प्रबंधक पे प्रतिबंध लागू",
        "revdelete-unrestricted": "प्रबंधक कय प्रबंधन हटावा जाय",
        "logentry-move-move": "$1 ने $3 पृष्ठ $4 पर {{GENDER:$2|स्थानांतरित}} कै गय",
+       "logentry-move-move-noredirect": "$1 ने $3 पर पुनर्निर्देश छोड़े बिना उसे $4 पर {{GENDER:$2|स्थानांतरित}} किया",
+       "logentry-move-move_redir": "$1 ने $4 से पुनर्निर्देश हटाकर $3 को उसपर {{GENDER:$2|स्थानांतरित}} किया",
+       "logentry-move-move_redir-noredirect": "$1 ने $4 से पुनार्निर्देश हटाकर $3 पर पुनर्निर्देश छोड़े बिना $3 को $4 पर {{GENDER:$2|स्थानांतरित}} किया",
+       "logentry-patrol-patrol": "$1 ने $3 पृष्ठ के $4 अवतरण को परीक्षित {{GENDER:$2|चिन्हित}} किया",
+       "logentry-patrol-patrol-auto": "$1 ने $3 पृष्ठ के $4 अवतरण को स्वचालित रूप से परीक्षित {{GENDER:$2|चिन्हित}} किया",
+       "logentry-newusers-newusers": "सदस्य खाता $1 {{GENDER:$2|बनाया}} गया",
        "logentry-newusers-create": "सदस्य खाता $1 {{GENDER:$2|बनावा}} गय",
+       "logentry-newusers-create2": "सदस्य खाता $3 $1 द्वारा {{GENDER:$2|बनाया}} गया था",
+       "logentry-newusers-byemail": "$1 द्वारा सदस्य खाता $3 {{GENDER:$2|बनाया}} गया एवं पासवर्ड ई-मेल द्वारा भेजा गया था",
+       "logentry-newusers-autocreate": "खाते $1 स्वचालित रूप से {{GENDER:$2|बनाया}} गया था",
+       "logentry-rights-rights": "$1 ने $3 के सदस्य समूह $4 से बदलकर $5 {{GENDER:$2|किये}}",
+       "logentry-rights-rights-legacy": "$1 ने $3 के सदस्य समूह {{GENDER:$2|बदले}}",
+       "logentry-rights-autopromote": "$1 के सदस्य समूह स्वतः $4 से बदलकर $5 {{GENDER:$2|किये}} गए",
        "logentry-upload-upload": "$1 {{GENDER:$2|ने}} $3 अपलोड किया",
        "rightsnone": "(कउनो नाहीं)",
        "revdelete-summary": "संपादन सारांश",
        "feedback-adding": "पृष्ठ पे प्रतिक्रिया जोडत है ...",
+       "feedback-back": "पीछे",
+       "feedback-bugcheck": "शानदार! जांच ले कहीं ये [ $1 known bugs] पहले से ही न हो ।",
+       "feedback-bugnew": "मैंने जाँच कीया। एक नया बग रिपोर्ट करें",
+       "feedback-bugornote": "यदि आप किसी तकनीकी परेशानी को विस्तार से समझाने के लिये तैयार हैं तो कृपया [$1 बग फ़ाइल करें]।\nयदि नहीं, तो आप नीचे दिये सरल फ़ॉर्म का प्रयोग कर सकते हैं। आपकी टिप्पणी आपके सदस्य नाम और आपके ब्राउज़र के नाम के सहित \"[$3 $2]\" पृष्ठ में जोड़ दी जाएगी।",
        "feedback-cancel": "रद्द करा जाय",
        "feedback-close": "होइ गवा",
+       "feedback-dialog-title": "प्रतिक्रिया भेजा जाय",
+       "feedback-error-title": "त्रुटि",
+       "feedback-error1": "त्रुटि: न पहचाना गया परिणाम एपीआई से",
        "feedback-error2": "त्रुटि: संपादन विफल रहा है",
+       "feedback-error3": "त्रुटि: एपीआई से कोई प्रतिक्रिया नहीं",
        "feedback-message": "सनेशा:",
        "feedback-subject": "विषय:",
-       "feedback-submit": "प्रतिक्रिया भेजा जाय",
+       "feedback-submit": "जमा करा जाय",
+       "feedback-thanks": "धन्यवाद! आपकी प्रतिक्रिया पृष्ठ में नियुक्त किया गया है \"[ $2  $1 ]\"।",
+       "feedback-thanks-title": "धन्यवाद!",
+       "feedback-useragent": "प्रयोगकर्ता एजेन्ट:",
        "searchsuggest-search": "खोज",
        "searchsuggest-containing": "...से युक्त",
        "api-error-badaccess-groups": "इ विकि मा आप कय फाइल अपलोड करेक अनुमति नाइ है",
        "api-error-badtoken": "आंतरिक त्रुटि: खराब टोकन।",
+       "api-error-copyuploaddisabled": "URL द्वारा इस सर्वर पर अपलोड अक्षम है।",
+       "api-error-duplicate": "वहाँ {{PLURAL:$1| [ $2 अन्य फ़ाइल] | रहे हैं [ $2 कुछ अन्य फ़ाइलों]}} एक ही सामग्री के साथ साइट पर पहले से ही है.",
+       "api-error-duplicate-archive": "वहाँ {{PLURAL:$1|था [$2 कुछ अन्य फ़ाइल] |were [$2 कुछ अन्य फ़ाइलें]}}, पहले से ही {{PLURAL:$1|यह was|they थे}} परन्तु  हटा दिये गये",
+       "api-error-duplicate-archive-popup-title": "डुप्लिकेट {{PLURAL:$1| फ़ाइल | फ़ाइलें}} है कि पहले से ही हटा दिया गया है",
        "api-error-duplicate-popup-title": "डुप्लिकेट {{PLURAL:$1| फ़ाइल | फ़ाइल}}",
        "api-error-empty-file": "आप कय दीहल फ़ाइल खाली रहा।",
        "api-error-emptypage": "नँवा अव खाली पन्ना बनावै कय अनुमति नाइ है",
+       "api-error-fetchfileerror": "आंतरिक त्रुटि: जब फ़ाइल लाया जा रहा तो कुछ गलत हो गया था।",
        "api-error-fileexists-forbidden": "\"$1\" नाँव कय फाइल मौजुद है,एकरे उप्पर नाइ लिखि सका जात है",
        "api-error-fileexists-shared-forbidden": "\"$1\" नाँव कय फाइल साझा फाइल भण्डार मा पहिलवे से मौजुद है अव एकरे उप्पर नाइ लिखि सका जात है ।",
        "api-error-file-too-large": "आप कय दीहल फ़ाइल बहुत बडा रहा।",
        "api-error-filename-tooshort": "फ़ाइल कय नाँव बहुत छोट है।",
        "api-error-filetype-banned": "अइसन फ़ाइल प्रतिबन्धित है।",
+       "api-error-filetype-banned-type": "$1 फ़ाइल {{PLURAL:$4|प्रकार|प्रकारों}} की अनुमति नहीं है। फ़ाइल प्रकार {{PLURAL:$3|जिसकी|जिनकी}} अनुमति है: $2।",
        "api-error-filetype-missing": "फाईल कय एक्सटेंशन लापता है ।",
        "api-error-hookaborted": "आपके द्वारा प्रयासरत संशोधन किसी एक्स्टेंशन द्वारा निरस्त किया गया।",
        "api-error-http": "आंतरिक त्रुटि: सर्वर से कनेक्ट करय में असमर्थ।",
        "api-error-illegal-filename": "अइसन फ़ाइल कय इजाजत नाइ है।",
+       "api-error-internal-error": "आंतरिक त्रुटि: विकि पर अपने अपलोड प्रसंस्करण के साथ कुछ गलत हो गया था.",
+       "api-error-invalid-file-key": "आंतरिक त्रुटि: फ़ाइल अस्थायी भंडारण में नहीं पाया गया.",
        "api-error-missingparam": "आंतरिक त्रुटि: अनुरोध पे  पैरामीटर लापता",
        "api-error-missingresult": "आन्तरिक त्रुटि: इ प्रतिलिपि सफल निर्धारित नाइ होइ सका",
        "api-error-mustbeloggedin": "फाइल अपलोड करेक आप कय लाग इन करेक परि",
        "api-error-mustbeposted": "आंतरिक त्रुटि: HTTP POST अनुरोध कय आवश्यकता है.",
+       "api-error-noimageinfo": "अपलोड सफल, लेकिन सर्वर ने फ़ाइल के बारे में हमें कोई जानकारी नहीं दी.",
        "api-error-nomodule": "आंतरिक त्रुटि: कवनो अपलोड मॉड्यूल सेट नाइ है",
        "api-error-ok-but-empty": "आंतरिक त्रुटि: सर्वर से कवनो जवाब नाइ है।",
        "api-error-overwrite": "मौजुदा फाइल कय उप्पर नाइ लिखि सका जात अहै ।",
        "api-error-stashfailed": "आन्तरिक त्रुटि: अस्थाई फाइल राखय मा सर्वर असफल रहा।",
+       "api-error-publishfailed": "आन्तरिक त्रुटि: अस्थाई फाइल राखय मा सर्वर असफल रहा।",
+       "api-error-timeout": "सर्वर ने अपेक्षित समय के भीतर जवाब नहीं दिया",
        "api-error-unclassified": "अज्ञात त्रुटि आइ गवा।",
        "api-error-unknown-code": "अज्ञात त्रुटि: \"$1\"",
        "api-error-unknown-error": "आंतरिक त्रुटि: आप कय फ़ाइल अपलोड प्रयास करत समय कुछ गलत होइ गवा रहा।",
        "limitreport-expansiondepth": "उच्चतम विस्तार गहराई",
        "limitreport-expensivefunctioncount": "महंगा पार्सर फंक्शन कय संख्या",
        "expandtemplates": "साँचा विस्तार",
+       "expand_templates_intro": "यह विशेष पृष्ठ पाठ इनपुट लेता है और सभी साँचों को विस्तृत करता है।\nयह <code><nowiki>{{</nowiki>#language:…}}</code> जैसे पार्सर फंक्शनों और\n<code><nowiki>{{</nowiki>CURRENTDAY}}</code> जैसे वेरियेबलों को भी विस्तृत करता है।\nयह दोहरे कोष्ठकों में दिया लगभग सब कुछ विस्तृत करता है।",
        "expand_templates_title": "कन्टेक्स्ट शीर्षक, जैसय {{FULLPAGENAME}} आदि कय लिए:",
        "expand_templates_input": "इनपुट पाठ:",
        "expand_templates_output": "परिणाम",
        "expand_templates_generate_xml": "XML कय पार्स (parse) वृक्ष देखावा जाय",
        "expand_templates_generate_rawhtml": "सुद्ध HTML देखावा जाय",
        "expand_templates_preview": "झलक",
+       "pagelanguage": "पृष्ठ भाषा चुनाव",
        "pagelang-name": "पन्ना",
        "pagelang-language": "भाषा",
        "pagelang-use-default": "डिफ़ॉल्ट भाषा इस्तेमाल कीन जाय",
        "right-pagelang": "पन्ना कय भाषा चुना जाय",
        "action-pagelang": "पन्ना कय भाषा बदला जाय",
        "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 ('''अक्षम''')",
        "mediastatistics": "मीडिया कय आँकड़ा",
        "mediastatistics-header-video": "वीडियो",
        "mediastatistics-header-office": "आफिस",
        "mediastatistics-header-text": "शाब्दिक",
-       "json-error-unknown": "JSON से समस्या रहा । गल्ती: $1"
+       "json-error-unknown": "JSON से समस्या रहा । गल्ती: $1",
+       "json-error-syntax": "सिन्टॅक्स त्रुटि",
+       "headline-anchor-title": "इस अनुभाग की कड़ी",
+       "special-characters-group-latin": "लाटिन",
+       "special-characters-group-latinextended": "लाटिन विस्तारित",
+       "special-characters-group-ipa": "आइपीए",
+       "special-characters-group-symbols": "प्रतीक",
+       "special-characters-group-greek": "ग्रीक",
+       "special-characters-group-cyrillic": "सिरिलिक",
+       "special-characters-group-arabic": "अरबी",
+       "special-characters-group-arabicextended": "अरबी विस्तारित",
+       "special-characters-group-persian": "फारसी",
+       "special-characters-group-hebrew": "हिब्रू",
+       "special-characters-group-bangla": "बांग्ला",
+       "special-characters-group-tamil": "तमिल",
+       "special-characters-group-telugu": "तेलूगू",
+       "special-characters-group-sinhala": "सिंहल",
+       "special-characters-group-gujarati": "गुजराती",
+       "special-characters-group-devanagari": "देवनागरी",
+       "special-characters-group-thai": "थाई",
+       "special-characters-group-lao": "लाओ",
+       "special-characters-group-khmer": "खमेर",
+       "special-characters-title-endash": "डैश",
+       "special-characters-title-emdash": "बड्का डैश",
+       "special-characters-title-minus": "माइनस चिन्ह"
 }
index ccd793c..6fcdcba 100644 (file)
        "errorpagetitle": "خطا",
        "returnto": "$1-ه قاییت.",
        "tagline": "{{SITENAME}} سایتیندان",
-       "help": "کؤمک",
+       "help": "یاردیم",
        "search": "آختار",
        "searchbutton": "آختار",
        "go": "گئت",
        "talkpage": "بۇ صحیفه‌نی دانیش",
        "talkpagelinktext": "دانیشیق",
        "specialpage": "اؤزل صفحه",
-       "personaltools": "شخصی آراجلار",
+       "personaltools": "شخصی آراجلار",
        "articlepage": "ایچری‌لی صحیفه‌یه باخ",
        "talk": "دانیشیق",
-       "views": "گؤرونوشلر",
-       "toolbox": "آراجلار",
+       "views": "گؤرونوشلر",
+       "toolbox": "آراجلار",
        "userpage": "ایستیفاده‌چی صحیفه‌‌سینه باخ",
        "projectpage": "پروژه صحیفه‌سینه باخ",
        "imagepage": "فایل صحیفه‌سینه باخ",
        "pool-errorunknown": "بیلینمه‌ین خطا",
        "pool-servererror": "پول سنتر سئرویسی الده دئییل ( $1 ).",
        "poolcounter-usage-error": "$1:ایشلتمک خطاسی",
-       "aboutsite": "{{SITENAME}} گؤره",
+       "aboutsite": "{{SITENAME}} گؤره",
        "aboutpage": "Project:گؤره",
        "copyright": "ایچینده‌کیلر $1 لیسانسی احاطه‌سینده‌دیلر.",
        "copyrightpage": "{{ns:project}}:کوْپی حاقلاری",
-       "currentevents": "ایندیکی اولایلار",
-       "currentevents-url": "Project:ایندیکی اولایلار",
+       "currentevents": "ایندیکی اولایلار",
+       "currentevents-url": "Project:ایندیکی اولایلار",
        "disclaimers": "یالانلامالار",
        "disclaimerpage": "Project:گنل یالانلاما",
        "edithelp": "ديَیشتیرمک یاردیمی",
        "diff-multi-otherusers": "({{PLURAL:$1|۱ میانی نوسخه لر|$1 میانی نوسخه لر}} دَییک اولونموش {{PLURAL:$2|۱ ایشلدچی|$2 ایشلدچی}}طرفیندن گوستریلمیر)",
        "diff-multi-manyusers": "{{PLURAL:$2|بیر|$2}}-دن چوخ ایستیفاده‌چی یارادان {{PLURAL:$1|بیر|$1}} نوسخه، گؤستریلمه‌ییب‌دیر",
        "difference-missing-revision": "بو فرقین ($1) {{PLURAL:$2|بیر|$2}} نوسخه‌سی تاپیلانمادی.\n\nعموماً بو خطا، سیلینن بیر صحیفه‌یه واختی گئچمیش بیر فرق باغلانتی‌سیلا گلمک ایله آرا گلر.\n[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}}سیلمک سیاهی‌سی]ندا باشقا بیلگیلر اولا بیلر.",
-       "searchresults": "آختاریش سونوجلاری",
-       "searchresults-title": "«$1» اوچون آختاریش سونوجلاری",
+       "searchresults": "آختاریش سونوجلاری",
+       "searchresults-title": "«$1» اوچون آختاریش سونوجلاری",
        "titlematches": "صحیفه‌‌ آدی عینیدیر",
        "textmatches": "یازی عینی‌دیر",
        "notextmatches": "هئچ بیر بنزر صحیفه یازی‌سی تاپیلمادی",
        "nchanges": "$1 {{PLURAL:$1|دَییشیکلیک}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|سون گوروش دن}}",
        "enhancedrc-history": "گئچمیش",
-       "recentchanges": "سون دَییشیکلیکلر",
+       "recentchanges": "سون دَییشیکلیکلر",
        "recentchanges-legend": "سون دَییشیکلیکلر سئچمه‌لری",
        "recentchanges-summary": "بو صحیفه‌ده، بو ویکی‌ده وئریلن ان سون دَییشیکلیکلری ایزله‌یین.",
        "recentchanges-noresult": "وئریلمیش دؤنم‌ده، بو معیارلارا تطبیق اولان دَییشدیرمه یوخدور.",
        "rc-old-title": "ایلک‌جه «$1» آدی‌له یارانمیشدیر",
        "recentchangeslinked": "ایلگیلی دَییشیکلیکلر",
        "recentchangeslinked-feed": "ایلگیلی دَییشیکلیکلر",
-       "recentchangeslinked-toolbox": "ایلگیلی دَییشیکلیکلر",
+       "recentchangeslinked-toolbox": "ایلگیلی دَییشیکلیکلر",
        "recentchangeslinked-title": "''$1'' ایله ایلگی‌لی دییشیکلر",
        "recentchangeslinked-summary": "آشاغیداکی سیياهی، قئيد اوْلونان صحیفه‌‌يه (و يا قئيد اوْلونان کاتئقوْرياداکی صحیفه‌‌لره) داخیلی کئچید وئرن صحیفه‌‌لرده ائدیلمیش سوْن ديَیشیکلیکلرین سیياهیسیدیر. \n[[Special:Watchlist|ایزله‌مه سیياهینیزداکی]] صحیفه‌‌لر '''قالین''' شریفتله گؤستریلمیشدیر.",
        "recentchangeslinked-page": "صفحه آدی:",
        "listusers-desc": "آزالان سیرادا سیرالا",
        "usereditcount": "$1 {{PLURAL:$1|دَییشدیرمه}}",
        "usercreated": "$1 تاریخینده، ساعات $2-ده {{GENDER:$3|یارانیب‌دیر}}",
-       "newpages": "يئنی صفحه‌‌‌لر",
+       "newpages": "يئنی صفحه‌لر",
        "newpages-username": "ایستیفاده‌چی آدی:",
        "ancientpages": "ان اسکی صحیفه‌لر",
        "move": "آدینی دَییشدیر",
        "invert": "سئچیلنی دؤندر",
        "tooltip-invert": "بو قوتونی علامتله یین تا انتخاب اولان آد فضا سینین ایچری صحیفه لری دییشیک لیک لری(و اوبیری علامتلنمیش فضالار) گیزله نه آدی",
        "tooltip-whatlinkshere-invert": "سئچیلمیش آدفضاسیندان اولان باغلانتیلاری گیزلتمک اوچون بو قوتویا نیشان قویون.",
-       "namespace_association": "عÙ\84اÙ\82Ù\87â\80\8cÙ\84Û\8c Ø¢Ø¯ Ø³Ø§Ø­Ù\87â\80\8cسی",
+       "namespace_association": "اÛ\8cÙ\84Ú¯Û\8cÙ\84Û\8c Ø¢Ø¯Ù\81ضاسی",
        "tooltip-namespace_association": "بو قوتونو علامت له ین یالنیز آد بحث فضاسی یا مرتبط اولان آد فضاسی ایله انتخاب اولا",
        "blanknamespace": "(آنا)",
        "contributions": "{{GENDER:$1|ایستیفاده‌چی}} چالیشمالاری",
        "sp-contributions-toponly": "تکجه سون نوسخه اولان دییشیکلری گؤستر",
        "sp-contributions-newonly": "یالنیز صفحه یاراتماق دَییشیکلیکلرینی گؤستر",
        "sp-contributions-submit": "آختار",
-       "whatlinkshere": "بو صفحه‌یه باغلانتیلار",
+       "whatlinkshere": "بو صفحه‌یه باغلانتیلار",
        "whatlinkshere-title": "«$1»-ه باغلانان صحیفه‌لر",
        "whatlinkshere-page": "صفحه:",
        "linkshere": "آشاغیداکی صحیفه‌لر '''[[:$1]]'''-ه باغلانیب:",
        "import-interwiki-history": "صحیفه‌نین دییشمه تاریخچه‌لری‌نین هامی‌سینی کؤچور",
        "import-interwiki-templates": "بوتون شابلون‌لارلا بیرلیکده",
        "import-interwiki-submit": "ایچری توکمه اولسون",
-       "import-interwiki-namespace": "هدف آد ساحه‌سی:",
-       "import-interwiki-rootpage": "هدف‌لنن قایناق صحیفه‌سی (ایسته‌یه باغ‌لی):",
        "import-upload-filename": "فایل آدی",
        "import-comment": "آچیخلا:",
        "importtext": "خاهیش ائدیریک فایلی [[Special:Export| خاریجه کؤچورمه کؤمک پروقرامییلا]] قایناق ویکی خاریجه کؤچورون.\nکومپوتئرینیزه یازین و بورا یوکلیین.",
        "tooltip-pt-mycontris": "سیزین چالیشمالارینیزین لیستی",
        "tooltip-pt-login": "گیریش ائتمه‌یینیز توصیه اولونور؛ اما گرکلی دئییل",
        "tooltip-pt-logout": "چیخیش",
-       "tooltip-pt-createaccount": "سیزدن دعوت اولونور ایشلدن حسابی آچیب و گیریش ائده سیز،آنجاق حساب یارتماق اختیاری دیر.",
+       "tooltip-pt-createaccount": "سیزدن دعوت اولونور ایشلدن حسابی آچیب و گیریش ائده‌سیز؛ آنجاق حساب یاراتماق ایستگه باغلی‌دیر",
        "tooltip-ca-talk": "ایچینده‌کیلره گؤره دانیشیق",
        "tooltip-ca-edit": "سیز بو صفحه‌نی دَییشدیره بیلرسینیز. لطفاً قئید ائتمه‌دن قاباق اؤن‌گؤستریش دوگمه‌سینی ایشلدین",
        "tooltip-ca-addsection": "یئنی بؤلوم یارات",
        "tooltip-ca-viewsource": "بو صحیفه‌‌ قورونوب‌دور.\nاونون قایناغینا باخا بیلرسیز",
-       "tooltip-ca-history": "بو صفحه‌نین گئچمیش سۆروملری",
+       "tooltip-ca-history": "بو صفحه‌نین گئچمیش سۆروملری",
        "tooltip-ca-protect": "بو صحیفه‌نی قورو",
        "tooltip-ca-unprotect": "بو صحیفه‌نین قوروماسینی دَییشدیر",
        "tooltip-ca-delete": "بو صحیفه‌‌نی سیل",
        "svg-long-error": "اعتبارسیز سوگ فایل: $1",
        "show-big-image": "فایلین اصلی",
        "show-big-image-preview": "سیناق گؤستریشی اؤلچوسو: $1.",
-       "show-big-image-other": "دÛ\8cگر {{PLURAL:$2|Ù\86تÛ\8cج|Ù\86تÛ\8cجÙ\87â\80\8cلر}}: $1.",
+       "show-big-image-other": "Ø¢Û\8cرÛ\8c {{PLURAL:$2|Ú©Û\8cÙ\81Û\8cت|Ú©Û\8cÙ\81Û\8cتلر}}: $1.",
        "show-big-image-size": "$1 × $2 پیکسئل",
        "file-info-gif-looped": "ایلملنیب",
        "file-info-gif-frames": "$1 {{PLURAL:$1|فرامئ|چرچیوه}}",
        "tags-delete": "سیل",
        "tags-hitcount": "$1 {{PLURAL:$1|دییشیکلیک|دییشیک‌لیک}}",
        "tags-create-submit": "یارات",
+       "tags-edit-title": "اِتیکِتلری دَییشدیر",
+       "tags-edit-manage-link": "اِتیکِتلری ایداره ائت",
+       "tags-edit-revision-selected": "[[:$2]]-نین سئچیلمیش {{PLURAL:$1|نوسخه‌سی|نوسخه‌لری}}:",
+       "tags-edit-logentry-selected": "سئچیلمیش {{PLURAL:$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-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-nooldid-title": "گئچرسیز هدف نوسخه",
        "comparepages": "صحیفه‌لری قارشی‌لاش‌دیر",
        "compare-page1": "صحیفه 1",
        "compare-page2": "صحیفه 2",
        "htmlform-chosen-placeholder": "بیر سئچمه سئچین",
        "htmlform-cloner-create": "چوْخراق آرتیر",
        "htmlform-cloner-delete": "سیل",
+       "htmlform-cloner-required": "ان آزی بیر دیَر گرکلیدیر.",
        "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:$4|$3}}-نی {{GENDER:$2|بلوکلادی}}. قورتارماق تاریخی: $5 $6",
+       "logentry-block-unblock": "$1 {{GENDER:$4|$3}}-نین {{GENDER:$2|بلوکلاماغینی قالدیردی}}",
        "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-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-create": "$1 ایشلدن حسابی {{GENDER:$2|یارادیلدی}}",
        "logentry-newusers-create2": "$1 ایستیفاده‌چی، $3 حسابی {{GENDER:$2|یاراتدی}}",
        "logentry-newusers-byemail": "$3 ایستیفاده‌چی حسابی، $1 ایله {{GENDER:$2|یارادیلیب}} و رمز، ایمیل ایله گؤندریلیب‌دیر",
        "logentry-newusers-autocreate": "$1 ایستیفاده‌چی حسابی اوتوماتیک {{GENDER:$2|یارادیلدی}}",
        "logentry-rights-autopromote": "$1-ین مقامی اوتوماتیک $4-دن $5-ه {{GENDER:$2|آرتیریلدی}}",
        "logentry-upload-upload": "$1 $3 را {{GENDER:$2|یوکلندیردی}}",
        "rightsnone": "(هئچ)",
+       "revdelete-summary": "دَییشدیرمه قیساسی",
        "feedback-adding": "صحیفه‌یه گئری-بیلدیریم آرتیریلیر...",
+       "feedback-back": "دالی",
        "feedback-bugcheck": "گؤزل! فقط لوطفاً باخین او [$1 تانینمیش خطالار]دان اولماسین.",
        "feedback-bugnew": "یوخلادیم. یئنی بیر خطا گؤندر",
        "feedback-bugornote": "بیر تکنیکی خطانی شرح وئرمگه آماده اولساز، لوطفاً [$1 بیر باگ بیلدیرین].\nاو اولماسا، بو آشاغیداکی ساده فورم‌دان ایستیفاده ائده بیلرسینیز. سیزین باخیشینیز، ایستیفاده‌چی آدینیزلا، «[$3 $2]» صحیفه‌سینه آرتیریلاجاق‌دیر.",
        "feedback-cancel": "لغو ائت",
        "feedback-close": "اولدو",
+       "feedback-error-title": "خطا",
        "feedback-error1": "خطا: API-دان تانینمامیش نتیجه",
        "feedback-error2": "خطا: دَییشدیرمه باشاری‌سیز اولدو",
        "feedback-error3": "خطا: API-دان جاواب گلمه‌دی",
        "feedback-subject": "قونو:",
        "feedback-submit": "گؤندر",
        "feedback-thanks": "تشکورلر! سیزین گئری-بیلدیریمینیز «[$2 $1]» صحیفه‌سینه گؤندریلدی.",
+       "feedback-thanks-title": "تشکورلر!",
        "searchsuggest-search": "آختار",
        "searchsuggest-containing": "ساخلانیلیر...",
        "api-error-badaccess-groups": "سیزین بو ویکی‌یه فایل یوکله‌مک ایجازه‌نیز یوخدور.",
        "mediastatistics-header-audio": "سس",
        "mediastatistics-header-video": "ویدیولار",
        "mediastatistics-header-office": "دفتر",
+       "headline-anchor-title": "بو بؤلومه باغلانتی",
        "special-characters-group-latin": "لاتین",
        "special-characters-group-latinextended": "لاتین گئنیشلندیریلمیش",
        "special-characters-group-ipa": "IPA",
index a748209..dc7cfd7 100644 (file)
        "import-interwiki-history": "Был биттең бөтә үҙгәртеү тарихын яҙҙырырға",
        "import-interwiki-templates": "Бөтә ҡалыптарҙы индерергә",
        "import-interwiki-submit": "Тейәргә",
-       "import-interwiki-namespace": "Кәрәкле исемдәр арауығы:",
-       "import-interwiki-rootpage": "Төп бит (мотлаҡ түгел):",
        "import-upload-filename": "Файл исеме:",
        "import-comment": "Иҫкәрмә:",
        "importtext": "Зинһар, файлды сығанаҡ викинан [[Special:Export|махсус ҡорал]] ярҙамында сығарығыҙ. Артабан уны компьютерығыҙға һаҡлағыҙ һәм бында тейәгеҙ.",
        "import-rootpage-nosubpage": "Төп биттең \"$1\" исемдәр арауығы эске биттәргә рөхсәт бирмәй.",
        "importlogpage": "Тейәү яҙмалары журналы",
        "importlogpagetext": "Хакимдәр тарафынан башҡа вики проекттарҙан биттәрҙе һәм уларҙың үҙгәртеүҙәр тарихын тейәү.",
-       "import-logentry-upload": "[[$1]] битен файлдан тейәгән",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|1=өлгө|өлгө}}",
-       "import-logentry-interwiki": "$1 битен вики проекттары-ара тейәгән",
        "import-logentry-interwiki-detail": "$2 өлгөнән $1 {{PLURAL:$1|1=өлгө|өлгө}}",
        "javascripttest": "\nJavaScript тикшереү",
        "javascripttest-pagetext-noframework": "Был бит JavaScript тикшеренеүҙәре үткәреү өсөн  резервланған.",
        "expand_templates_remove_comments": "Аңлатмаларҙы юйырға",
        "expand_templates_remove_nowiki": "Һөҙөмтәлә <nowiki> билдәләрен йәшерергә",
        "expand_templates_generate_xml": "XML уҡыу ағасын күрһәтергә",
-       "expand_templates_preview": "Ҡарап сығыу"
+       "expand_templates_preview": "Ҡарап сығыу",
+       "special-characters-group-latin": "Латин",
+       "special-characters-group-latinextended": "Латин (киңәйтелгән)",
+       "special-characters-group-ipa": "ХАФӘ (IPA)",
+       "special-characters-group-symbols": "Тамғалар",
+       "special-characters-group-greek": "Грек",
+       "special-characters-group-cyrillic": "Кириллик",
+       "special-characters-group-arabic": "Ғәрәп",
+       "special-characters-group-arabicextended": "Ғәрәп (киңәйтелгән)",
+       "special-characters-group-persian": "Фарсы",
+       "special-characters-group-hebrew": "Йәһүд",
+       "special-characters-group-bangla": "Бенгал",
+       "special-characters-group-tamil": "Тамиль",
+       "special-characters-group-telugu": "Телугу",
+       "special-characters-group-sinhala": "Сингал",
+       "special-characters-group-gujarati": "Гуджарати",
+       "special-characters-group-devanagari": "Деванагари",
+       "special-characters-group-thai": "Тай",
+       "special-characters-group-lao": "Лао",
+       "special-characters-group-khmer": "Кһмер",
+       "special-characters-title-endash": "уртаса һыҙыҡ",
+       "special-characters-title-emdash": "оҙон һыҙыҡ",
+       "special-characters-title-minus": "минус билдәһе"
 }
index 9f05621..ad81625 100644 (file)
        "import-interwiki-history": "کپی کن کل بازبینی آن تاریح په ای صفحه",
        "import-interwiki-templates": "کل تمپلت هور بنت",
        "import-interwiki-submit": "ورود",
-       "import-interwiki-namespace": "مقصدء نام فضا",
        "import-upload-filename": "فایلءَ نام:",
        "import-comment": "نظر:",
        "importtext": "لطفا فایل چه منبع ویکی درگیز گون حاصین:[[Special:Export|وسیله درگیزگ]], ایء ته وتی دیسک ذخیره کن و ادان آپلود کن.",
index e5a69d9..71e1204 100644 (file)
        "import-interwiki-history": "Kopyahon an gabos na mga bersyón para sa páhinang ini",
        "import-interwiki-templates": "Ibali an gabos na mga panguyog",
        "import-interwiki-submit": "Ipalaog",
-       "import-interwiki-namespace": "Destinasyon kan espasyong-pangaran:",
-       "import-interwiki-rootpage": "Destinasyon kan ugat pahina (opsyonal):",
        "import-upload-filename": "Sagunsong Pangaran:",
        "import-comment": "Komento:",
        "importtext": "Paki-eksporta an sagunson gikan sa ginikanang wiki na gamit an [[Special:Export|gamiton pan-eksporta]].\nItagama ini sa saimong kompyuter asin ikarga ini digde.",
index 997fed0..ef82495 100644 (file)
        "no-null-revision": "Немагчыма стварыць нулявую вэрсію для старонкі «$1»",
        "badtitle": "Няслушная назва",
        "badtitletext": "Запытаная назва старонкі няслушная ці пустая, альбо няслушна ўказаная міжмоўная ці інтэрвікі-назва. Яна можа ўтрымліваць сымбалі, якія нельга ўжываць у назвах.",
+       "title-invalid-empty": "Запытаная назва старонкі пустая або ўтрымлівае толькі прастору назваў.",
+       "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 байтаў у кадаваньні UTF-8.",
        "perfcached": "Наступныя зьвесткі кэшаваныя і могуць быць састарэлымі. У кэшы {{PLURAL:$1|даступны|даступныя}} ня больш за $1 {{PLURAL:$1|вынік|вынікі|вынікаў}}.",
        "perfcachedts": "Наступныя зьвесткі кэшаваныя і апошні раз былі абноўленыя $1. У кэшы {{PLURAL:$4|даступны|даступныя}} ня больш за $4 {{PLURAL:$4|вынік|вынікі|вынікаў}}.",
        "querypage-no-updates": "Абнаўленьні гэтай старонкі цяпер адключаныя. Зьвесткі ня будуць абнаўляцца.",
        "viewyourtext": "Вы можаце праглядзець і скапіяваць крынічны тэкст <strong>вашых рэдагаваньняў</strong> на гэтай старонцы:",
        "protectedinterface": "Гэтая старонка ўтрымлівае інтэрфэйснае паведамленьне праграмнага забесьпячэньня, і яе зьмена забаронена. Каб дадаць ці зьмяніць пераклад ва ўсіх праектах, зьвярніцеся на [//translatewiki.net/ translatewiki.net], праект для перакладу MediaWiki.",
        "editinginterface": "<strong>Увага:</strong> Вы рэдагуеце старонку, якая ўтрымлівае тэкст інтэрфэйсу праграмнага забесьпячэньня.\nЯе зьмена паўплывае на вонкавы выгляд інтэрфэйсу іншых удзельнікаў у гэтай вікі.",
-       "translateinterface": "Каб дадаць ці зьмяніць пераклады для ўсіх вікі, калі ласка, крыстаецеся [//translatewiki.net/ translatewiki.net], лякалізацыйным праектам MediaWiki.",
+       "translateinterface": "Каб дадаць ці зьмяніць пераклады для ўсіх вікі, калі ласка, карыстайцеся [//translatewiki.net/ translatewiki.net], лякалізацыйным праектам MediaWiki.",
        "cascadeprotected": "Гэтая старонка абароненая ад рэдагаваньня, таму што яна ўключаная ў {{PLURAL:$1|1=наступную старонку, якая была абароненая|наступныя старонкі, якія былі абароненыя}} з актывізаванай опцыяй «каскаднай абароны»:\n$2",
        "namespaceprotected": "Вы ня маеце правоў на рэдагаваньне старонак у прасторы назваў <strong>$1</strong>.",
        "customcssprotected": "Вы ня маеце правоў на рэдагаваньне гэтай CSS-старонкі, таму што яна ўтрымлівае пэрсанальныя налады іншага ўдзельніка.",
        "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-showdeleted": "паказаць",
        "revisiondelete": "Выдаліць/аднавіць вэрсіі",
        "revdelete-nooldid-title": "Ня выбрана мэтавая вэрсія",
-       "revdelete-nooldid-text": "Вы ня выбралі мэтавую вэрсію (ці вэрсіі) для выкананьня гэтай функцыі, выбранай вэрсіі не існуе альбо Вы спрабуеце схаваць цяперашнюю вэрсію.",
+       "revdelete-nooldid-text": "Вы ня выбралі мэтавую вэрсію для выкананьня гэтай функцыі, выбранай вэрсіі не існуе альбо Вы спрабуеце схаваць цяперашнюю вэрсію.",
        "revdelete-no-file": "Пазначаны файл не існуе.",
        "revdelete-show-file-confirm": "Вы ўпэўненыя, што жадаеце паглядзець выдаленую вэрсію файла «<nowiki>$1</nowiki>» ад $2 $3?",
        "revdelete-show-file-submit": "Так",
        "right-sendemail": "адпраўка электронных лістоў іншым удзельнікам",
        "right-passwordreset": "прагляд электронных лістоў з ачысткай паролю",
        "right-managechangetags": "ствараць і выдаляць [[Special:Tags|меткі]] з базы зьвестак",
+       "right-applychangetags": "дадаваць [[Special:Tags|меткі]] пры рэдагаваньні",
+       "right-changetags": "дадаваць і выдаляць адвольныя [[Special:Tags|меткі]] да асобных вэрсіяў і запісаў у журнале падзеяў",
        "newuserlogpage": "Журнал стварэньня рахункаў",
        "newuserlogpagetext": "Гэта журнал стварэньня рахункаў удзельнікаў і ўдзельніц.",
        "rightslog": "Журнал правоў удзельнікаў",
        "action-editmyprivateinfo": "рэдагаваньне вашых прыватных зьвестак",
        "action-editcontentmodel": "рэдагаваньне мадэлі зьместу старонкі",
        "action-managechangetags": "стварэньне і выдаленьне метак з базы зьвестак",
+       "action-applychangetags": "дадаваньне метак пры рэдагаваньні",
+       "action-changetags": "дадаваньне і выдаленьне адвольных метак да асобных вэрсіяў і запісаў у журнале падзеяў",
        "nchanges": "$1 {{PLURAL:$1|зьмена|зьмены|зьменаў}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|з апошняга візыту}}",
        "enhancedrc-history": "гісторыя",
        "listfiles-delete": "выдаліць",
        "listfiles-summary": "На гэтай спэцыяльнай старонцы паказаныя ўсе загружаныя файлы.",
        "listfiles_search_for": "Пошук па назьве файла:",
+       "listfiles-userdoesnotexist": "Рахунак удзельніка «$1» не зарэгістраваны.",
        "imgfile": "файл",
        "listfiles": "Сьпіс файлаў",
        "listfiles_thumb": "Мініятура",
        "logempty": "Падобных запісаў у журнале няма.",
        "log-title-wildcard": "Шукаць назвы, якія пачынаюцца з гэтага тэксту",
        "showhideselectedlogentries": "Паказаць/схаваць выбраныя запісы ў журнале",
+       "log-edit-tags": "Рэдагаваць меткі да абраных запісаў у журнале падзеяў",
        "allpages": "Усе старонкі",
        "nextpage": "Наступная старонка ($1)",
        "prevpage": "Папярэдняя старонка ($1)",
        "import-interwiki-history": "Капіяваць гісторыю старонкі цалкам",
        "import-interwiki-templates": "Уключыць усе шаблёны",
        "import-interwiki-submit": "Імпартаваць",
-       "import-interwiki-namespace": "Мэтавая прастора назваў:",
-       "import-interwiki-rootpage": "Мэтавая карнявая старонка (неабавязкова):",
+       "import-mapping-default": "Імпарт у месца па змоўчаньні",
+       "import-mapping-namespace": "Імпарт у прастору назваў:",
+       "import-mapping-subpage": "Імпарт у якасьці падстаронак наступнай старонкі:",
        "import-upload-filename": "Назва файла:",
        "import-comment": "Камэнтар:",
        "importtext": "Калі ласка, экспартуйце файл з крынічнай вікі з дапамогай [[Special:Export|прылады экспарту]].\nЗахавайце яго на свой кампутар, а потым загрузіце сюды.",
        "tooltip-t-contributions": "Паказаць унёсак гэтага удзельніка/гэтай удзельніцы",
        "tooltip-t-emailuser": "Даслаць ліст гэтаму ўдзельніку/гэтай удзельніцы па электроннай пошце",
        "tooltip-t-info": "Болей інфармацыі пра гэтую старонку",
-       "tooltip-t-upload": "Загрузіць файл",
+       "tooltip-t-upload": "Загрузіць файлы",
        "tooltip-t-specialpages": "Сьпіс усіх спэцыяльных старонак",
        "tooltip-t-print": "Вэрсія гэтай старонкі для друку",
        "tooltip-t-permalink": "Сталая спасылка на гэтую вэрсію старонкі",
        "pageinfo-protect-cascading-yes": "Так",
        "pageinfo-protect-cascading-from": "Каскадная абароная пачынаецца з",
        "pageinfo-category-info": "Інфармацыя пра катэгорыю",
+       "pageinfo-category-total": "Агульная колькасьць чальцоў",
        "pageinfo-category-pages": "Колькасьць старонак",
        "pageinfo-category-subcats": "Колькасьць падкатэгорыяў",
        "pageinfo-category-files": "Колькасьць файлаў",
        "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",
        "log-name-pagelang": "Журнал зьменаў мовы",
        "log-description-pagelang": "Гэта журнал зьменаў мовы старонак.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|зьмяніў|зьмяніла}} мову старонкі $3 з $4 на $5.",
-       "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 tarball-усталёўнік], які ўтрымлівае некалькі тэмаў і пашырэньняў. Вы можаце скапіяваць каталёг <code>skins/</code> зь яго.\n:* Спампуйце tarball-усталёўнікі для асобных тэмаў з [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Зрабіце клон аднаго з сховішчаў <code>mediawiki/skins/*</code> праз git у каталёг <code dir=\"ltr\">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 dir=\"ltr\">$3</pre>\n\n; Калі вы толькі што зьмянілі <code>LocalSettings.php</code>:\n: Пераправерце назвы тэмаў афармленьня на наяўнасьць памылак.",
+       "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:* Зрабіце клон аднаго з сховішчаў <code>mediawiki/skins/*</code> праз git у каталёг <code dir=\"ltr\">skins/</code> вашай усталёўкі MediaWiki.\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:* Зрабіце клон аднаго з сховішчаў <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 ('''адключана''')",
index 836a20c..e3b6658 100644 (file)
        "notloggedin": "Не ўвайшоў",
        "userlogin-noaccount": "Не маеце ўліковага запісу?",
        "userlogin-joinproject": "Далучайцеся да {{GRAMMAR:родны|{{SITENAME}}}}",
-       "nologin": "Не маеце рахунку? $1.",
+       "nologin": "Не маеце рахунка? $1.",
        "nologinlink": "Завесці рахунак",
        "createaccount": "Стварыць рахунак",
        "gotaccount": "Ужо маеце рахунак? '''$1'''.",
        "accountcreated": "Створаны рахунак",
        "accountcreatedtext": "Створаны ўліковы запіс удзельніка [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|размовы]]).",
        "createaccount-title": "Стварэнне рахунка на {{SITENAME}}",
-       "createaccount-text": "На пляцоўцы {{SITENAME}} ($4) быў створаны рахунак удзельніка з гэтым адрасам эл.пошты. Назва рахунку \"$2\", пароль \"$3\". Варта адразу ўвайсці ў сістэму і змяніць пароль.\n\nКалі стварэнне рахунку было памылковым, то на гэтае паведамленне можна не звяртаць увагі.",
+       "createaccount-text": "На пляцоўцы {{SITENAME}} ($4) быў створаны рахунак удзельніка з гэтым адрасам эл.пошты. Назва рахунка \"$2\", пароль \"$3\". Варта адразу ўвайсці ў сістэму і змяніць пароль.\n\nКалі рахунак быў створаны памылкова, то на гэтае паведамленне можна не звяртаць увагі.",
        "login-throttled": "Занадта многа нядаўніх спробаў увайсці пад гэтым уліковым запісам. \nПачакайце $1 перад тым, як спрабаваць ізноў.",
        "login-abort-generic": "Няўдалая спроба ўвайсці ў сістэму",
        "loginlanguagelabel": "Мова: $1",
        "user-mail-no-body": "Спроба даслаць ліст эл.пошты з пустым або неабгрунтавана кароткім зместам.",
        "changepassword": "Пароль",
        "resetpass_announce": "Каб завяршыць уваход у сістэму, Вы павінны ўстанавіць новы пароль.",
-       "resetpass_header": "Змяніць пароль рахунку",
+       "resetpass_header": "Змяніць пароль рахунка",
        "oldpassword": "Стары пароль:",
        "newpassword": "Новы пароль:",
        "retypenew": "Новы пароль паўторна:",
        "showpreview": "Як будзе",
        "showdiff": "Розніца",
        "blankarticle": "<strong>Увага:</strong> Вы ствараеце пустую старонку.\nКалі вы націсніце \"{{int:savearticle}}\" яшчэ раз, будзе створана старонка без аніякага зместу.",
-       "anoneditwarning": "Вы не ўвайшлі ў сістэму. Таму, калі вы запішаце старонку, у яе гісторыю трапіць ваш адрас IP.",
+       "anoneditwarning": "<strong>Увага!</strong> Вы не аўтарызаваліся на сайце. Ваш IP-адрас будзе публічна бачным, калі вы будзеце ўносіць любыя праўкі. Калі вы <strong>[$1 ўвойдзеце]</strong> ці <strong>[$2 створыце ўліковы запіс]</strong>, праўкі замест гэтага будуць звязаны з вашым імем карыстальніка, а таксама ў вас з'явяцца іншыя перавагі.",
        "anonpreviewwarning": "''Вы не прайшлі ідэнтыфікацыю Захаванне будзе запісана з вашым IP адрасам у гісторыі правак гэтай старонкі.''",
        "missingsummary": "<strong>Нагадваем:</strong> вы не ўпісалі тлумачэння для сваёй праўкі. Калі націснуць \"{{int:savearticle}}\" яшчэ раз, праўка будзе замацавана без тлумачэння.",
        "missingcommenttext": "Калі ласка, увядзіце ніжэй каментарый.",
        "accmailtext": "На адрас $2 быў дасланы згенераваны пароль для [[User talk:$1|$1]]. Ён можа быць зменены на <em>[[Special:ChangePassword|старонцы змены пароля]]</em> пасля ўваходу ў сістэму.",
        "newarticle": "(Новы)",
        "newarticletext": "Вы перайшлі да старонкі, якой яшчэ няма, і таму трапілі сюды. \nКаб пачаць новую старонку, пішыце яе тэкст у ніжэйпаказаным акне рэдагавання (падрабязнасці бач у [$1 даведцы]). \nКалі вы тут выпадкова, проста націсніце <strong>назад</strong> у браўзеры.",
-       "anontalkpagetext": "----''Гэта старонка размовы з ананімным удзельнікам, які або не мае свайго рахунку, або ім не карыстаўся. Таму дзеля яго ці яе ідэнтыфікацыі мы мусім выкарыстаць лічбавы Адрас IP. Такі адрас IP могуць дзяліць між сабою некалькі асоб. Калі вы ананімны ўдзельнік, і лічыце, што атрымліваеце няслушныя заўвагі,[[Special:UserLogin/signup|стварыце рахунак]] або [[Special:UserLogin|акажыцеся]], каб вас больш не блыталі з іншымі ананімнымі ўдзельнікамі.''",
+       "anontalkpagetext": "----''Гэта старонка размовы з ананімным удзельнікам, які або не мае свайго рахунка, або ім не карыстаўся. Таму дзеля яго ці яе ідэнтыфікацыі мы мусім выкарыстаць лічбавы IP-адрас. Такі адрас IP могуць дзяліць між сабою некалькі асоб. Калі вы ананімны ўдзельнік, і лічыце, што атрымліваеце няслушныя заўвагі,[[Special:UserLogin/signup|стварыце рахунак]] або [[Special:UserLogin|зайдзіце ў сістэму]], каб вас больш не блыталі з іншымі ананімнымі ўдзельнікамі.''",
        "noarticletext": "Старонка не ўтрымлівае тэксту. Вы можаце [[Special:Search/{{PAGENAME}}|пашукаць гэткую назву]] ў іншых старонках ці <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}}}} журнале сціранняў].",
        "revdelete-unsuppress": "Зняць абмежаванні на адноўленыя версіі",
        "revdelete-log": "Прычына:",
        "revdelete-submit": "Прымяніць да азначан{{PLURAL:$1|ай ерсіі|ых версій}}",
-       "revdelete-success": "<strong>Паспяхова абноўлена бачнасць версіі.</strong>",
+       "revdelete-success": "Паспяхова абноўлена бачнасць версіі.",
        "revdelete-failure": "'''Не ўдалося абнавіць бачнасць версіі:'''\n$1",
        "logdelete-success": "'''Бачнасць падзеі настаўленая паспяхова.'''",
        "logdelete-failure": "'''Бачнасць журнала не ўсталявана:'''\n$1",
        "searchall": "усе",
        "showingresults": "Ніжэй паказаны да {{PLURAL:$1|'''$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": "Нічога не было знойдзена.",
        "powersearch-legend": "Падрабязны пошук",
        "powersearch-ns": "Шукаць у прасторах назваў:",
        "querypage-disabled": "Гэта адмысловая старонка адключана для павышэння прадукцыйнасці.",
        "booksources": "Кнігі",
        "booksources-search-legend": "Знайсці, дзе купіць кнігі",
+       "booksources-search": "Пошук",
        "booksources-text": "Ніжэй паказаны пералік спасылак на іншыя сеціўныя пляцоўкі, якія прадаюць новыя і б/у кнігі, і, магчыма, маюць больш звестак пра кнігі, якіх вы шукаеце:",
        "booksources-invalid-isbn": "Гэты ISBN не выглядае правільным; праверце правільнасць капіравання з арыгіналу.",
        "specialloguserlabel": "Выканаўца:",
        "expiringblock": "канчаецца $1 $2",
        "anononlyblock": "толькі ананімы",
        "noautoblockblock": "аўтаблок не дазволены",
-       "createaccountblock": "стварэнне рахунку заблакавана",
+       "createaccountblock": "стварэнне рахунка заблакавана",
        "emailblock": "эл.пошта заблакавана",
        "blocklist-nousertalk": "не мае дазволу правіць уласную старонку размоў",
        "ipblocklist-empty": "Спіс блокаў зараз пусты.",
        "blocklogtext": "Журнал пастаноўкі і зняцця блокаў. Аўтаматычна блакаваныя адрасы IP тут не паказваюцца. Спіс актуальных забарон і блокаў бач у [[Special:BlockList|спісе блокаў]].",
        "unblocklogentry": "зняты блок з $1",
        "block-log-flags-anononly": "толькі ананімныя ўдзельнікі",
-       "block-log-flags-nocreate": "стварэнне рахунку не дазволена",
+       "block-log-flags-nocreate": "стварэнне рахунка не дазволена",
        "block-log-flags-noautoblock": "аўта-блок не дазволены",
        "block-log-flags-noemail": "пастаўлены блок на эл.пошту",
        "block-log-flags-nousertalk": "нельга правіць уласную размову",
        "import-interwiki-history": "Капіраваць усе гістарычныя версіі гэтай старонкі",
        "import-interwiki-templates": "Разам з усімі шаблонамі",
        "import-interwiki-submit": "Імпартаваць",
-       "import-interwiki-namespace": "У прастору назваў:",
-       "import-interwiki-rootpage": "Мэтавая каранёвая старонка (неабавязкова):",
        "import-upload-filename": "Назва файла:",
        "import-comment": "Каментарый:",
        "importtext": "Калі ласка, экспартуйце файл з крынічнай вікі з дапамогай [[Special:Export|прылады экспарту]].\nЗахавайце яго на свой камп'ютар, а потым загрузіце сюды.",
        "tooltip-pt-mycontris": "Пералік вашага ўкладу",
        "tooltip-pt-login": "Уваходзіць у сістэму неабавязкова, але вас вельмі запрашаюць гэтак зрабіць.",
        "tooltip-pt-logout": "Выйсці з сістэмы",
+       "tooltip-pt-createaccount": "Вам прапануецца стварыць уліковы запіс і ўвайсці ў сістэму, але гэта не абавязкова",
        "tooltip-ca-talk": "Размовы пра змест гэтай старонкі",
        "tooltip-ca-edit": "Старонку можна правіць. Перш чым запісаць свае змены, паглядзіце на вынік, націснуўшы кнопку папярэдняга прагляду.",
        "tooltip-ca-addsection": "Дадаць новы раздзел",
        "confirmemail_loggedin": "Зараз ваш адрас эл.пошты стаўся пацверджаным.",
        "confirmemail_subject": "Пацверджанне адрасу эл.пошты для {{SITENAME}}",
        "confirmemail_body": "Нехта (магчыма, што і вы — з адрасу IP $1) завёў рахунак \"$2\" на пляцоўцы {{SITENAME}}, паказваючы гэты адрас эл.пошты як свой.\n\nДзеля таго, каб пацвердзіць, што рахунак сапраўды ваш, і каб актываваць магчымасці эл.пошты для {{SITENAME}}, адкрыйце ў браўзеры гэтую спасылку:\n\n$3\n\nКалі гэта *былі не вы*, не адкрывайце той спасылкі, а адкрыйце гэтую, каб згасіць пацверджанне адрасу эл.пошты:\n\n$5\n\nГэты пацвярджальны код згасне $4.",
-       "confirmemail_body_changed": "Нехта з IP-адрасу \"$1\" (магчыма, што Вы) змяніў адрас эл.пошты для рахунку \"$2\" на пляцоўцы {{SITENAME}}.\n\nКаб пацвердзіць, што рахунак сапраўды належыць вам, і каб ізноў уключыць працу з эл.поштай для рахунку на пляцоўцы {{SITENAME}}, адкрыйце гэтую спасылку ў браўзеры:\n\n$3\n\nКалі рахунак вам *не належыць*, адкрыйце ніжэй паказаную спасылку, каб адмовіцца ад пацверджання адрасу эл.пошты:\n\n$5\n\nГэты квіток на пацверджанне будзе дзейсны не далей за $4.",
+       "confirmemail_body_changed": "Нехта з IP-адраса \"$1\" (магчыма, што Вы) змяніў адрас эл.пошты для рахунка \"$2\" на пляцоўцы {{SITENAME}}.\n\nКаб пацвердзіць, што рахунак сапраўды належыць вам, і каб ізноў уключыць працу з эл.поштай для рахунка на пляцоўцы {{SITENAME}}, адкрыйце гэтую спасылку ў браўзеры:\n\n$3\n\nКалі рахунак вам *не належыць*, адкрыйце ніжэй паказаную спасылку, каб адмовіцца ад пацвярджэння адраса эл.пошты:\n\n$5\n\nГэты код пацвярджэння сапраўдны да $4.",
        "confirmemail_body_set": "Нехта (магчыма, вы) з IP-адрасам $1\nпаказаў дадзены адрас электроннай пошты для ўліковага запісу «$2» у праекце {{SITENAME}}.\n\nКаб пацвердзіць, што акаўнт сапраўды належыць вам, і ўключыць магчымасць адпраўкі лістоў з сайта {{SITENAME}}, адкрыйце гэтую спасылку ў браўзеры:\n\n$3\n\nКалі рахунак вам *не належыць*, адкрыйце ніжэй паказаную спасылку, каб адмовіцца ад пацверджання адрасу эл.пошты:\n\n$5\n\nКод пацверджання дзейсны да $4.",
        "confirmemail_invalidated": "Пацверджанне эл.пошты скасаванае",
        "invalidateemail": "Адмовіцца ад пацверджання эл.пошты",
        "revdelete-uname-unhid": "імя ўдзельніка адкрыта",
        "revdelete-restricted": "пастаўленыя абмежаванні на адміністратараў",
        "revdelete-unrestricted": "знятыя абмежаванні з адміністратараў",
+       "logentry-block-block": "$1 заблакірава{{GENDER:$2|ў|ла}} {{GENDER:$4|$3}} на перыяд $5 $6",
+       "logentry-block-reblock": "$1 {{GENDER:$2|памяняў|памяняла}} настройкі блакіроўкі {{GENDER:$4|$3}} на перыяд $5 $6",
+       "logentry-suppress-reblock": "$1 {{GENDER:$2|памяняў|памяняла}} параметры блакіроўкі {{GENDER:$4|$3}} на перыяд $5 $6",
        "logentry-move-move": "$1 {{GENDER:$2|перанёс|перанесла}} старонку $3 у $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|перанёс|перанесла}} старонку $3 у $4, не пакінуўшы перасылкі",
        "logentry-move-move_redir": "$1 {{GENDER:$2|перанёс|перанесла}} старонку $3 у $4 па-над перасылкаю",
index b51ddbf..9d33a6f 100644 (file)
        "disclaimers": "Предупреждение",
        "disclaimerpage": "Project:Предупреждение",
        "edithelp": "Помощ при редактиране",
+       "helppage-top-gethelp": "Помощ",
        "mainpage": "Начална страница",
        "mainpage-description": "Начална страница",
        "policy-url": "Project:Политика",
        "ns-specialprotected": "Специалните страници не могат да бъдат редактирани.",
        "titleprotected": "Тази страница е била защитена срещу създаване от [[User:$1|$1]].\nПосочената причина е ''$2''.",
        "filereadonlyerror": "Файлът „$1“ не може да бъде променен, тъй като файловото хранилище „$2“ е в режим само за четене.\n\nАдминистраторът, който го е заключил, е посочил следната причина: „$3“.",
-       "invalidtitle-knownnamespace": "Невалидно заглавие с именно пространство $2\" и текст \"$3\"",
+       "invalidtitle-knownnamespace": "Невалидно заглавие с именно пространство „$2“ и текст „$3“",
        "invalidtitle-unknownnamespace": "Невалидно заглавие с неразпознато именно пространство номер $1 и текст „$2“",
        "exception-nologin": "Не сте влезли в системата",
        "exception-nologin-text": "За достъп до избраното действие или страница е необходимо влизане в системата.",
        "preview": "Предварителен преглед",
        "showpreview": "Предварителен преглед",
        "showdiff": "Показване на промените",
-       "anoneditwarning": "'''Внимание:''' Не сте влезли в системата. В историята на страницата ще бъде записан вашият IP-адрес.",
+       "anoneditwarning": "<strong>Внимание:</strong> Не сте влезли в системата. Ако направите редакция IP-адресът Ви ще бъде публично видим. Ако <strong>[$1 влезете]</strong> или си <strong>[$2 създадете акаунт]</strong>, редакциите Ви ще бъдат свързани с потребителското Ви име, заедно с други преимущества.",
        "anonpreviewwarning": "Внимание: Не сте влезли в системата. Ако съхраните редакцията си, тя ще бъде записана в историята на страницата с вашият IP-адрес.",
        "missingsummary": "'''Напомняне:''' Не е въведено кратко описание на промените. При повторно натискане на бутона „Съхраняване“, редакцията ще бъде съхранена без резюме.",
        "missingcommenttext": "По-долу въведете вашето съобщение.",
        "content-model-text": "обикновен текст",
        "content-model-javascript": "Джаваскрипт",
        "content-model-css": "CSS",
+       "content-json-empty-object": "Празен обект",
+       "content-json-empty-array": "Празен масив",
        "duplicate-args-category": "Страници, които използват повтарящи се аргументи в повикванията на шаблона",
        "duplicate-args-category-desc": "Страницата съдържа шаблонни повиквания, които използват повтарящи се аргументи, като например <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> or <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "Внимание: Тази страница прекалено много пъти използва ресурсоемки парсерни функции.\n\nВ момента има {{PLURAL:$1|$1 обръщение|$1 обръщения}} към такива функции, а трябва да {{PLURAL:$1|е|са}} по-малко от $2.",
        "notextmatches": "Няма съответствия в текста на страници",
        "prevn": "предишни {{PLURAL:$1|$1}}",
        "nextn": "следващи {{PLURAL:$1|$1}}",
+       "prev-page": "предишна страница",
+       "next-page": "следваща страница",
        "prevn-title": "$1 {{PLURAL:$1|предишен резултат|предишни резултата}}",
        "nextn-title": "$1 {{PLURAL:$1|следващ резултат|следващи резултата}}",
        "shown-title": "Показване на $1 {{PLURAL:$1|резултат|резултата}} на страница",
        "viewprevnext": "Преглед ($1 {{int:pipe-separator}} $2) ($3).",
        "searchmenu-exists": "'''Съществува страница с името „[[:$1]]“ в това уики.'''",
-       "searchmenu-new": "'''Създаване на страницата „[[:$1]]“ в това уики!'''",
+       "searchmenu-new": "<strong>Създаване на страницата „[[:$1]]“ в това уики!</strong> {{PLURAL:$2|0=|Вижте също страницата, която е резултат от търсенето.|Вижте също резултатите от търсенето.}}",
        "searchprofile-articles": "Съдържателни страници",
        "searchprofile-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": "Търсене в именни пространства:",
        "prefs-personal": "Потребителски данни",
        "prefs-rc": "Последни промени",
        "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": "Брой редакции, които се показват в разширения списък за наблюдение:",
        "backend-fail-notexists": "Файлът $1 не съществува.",
        "backend-fail-delete": "Файлът $1 не може да бъде изтрит.",
        "backend-fail-alreadyexists": "Файлът $1 вече съществува.",
-       "backend-fail-store": "Файлът $1 не може да бъде съхранен в $2.",
+       "backend-fail-store": "Файлът „$1“ не може да бъде съхранен в „$2“.",
        "backend-fail-copy": "Файлът „$1“ не можа да бъде копиран в „$2“.",
        "backend-fail-move": "Файлът „$1“ не можа да бъде преместен в „$2“.",
        "backend-fail-opentemp": "Временният файл не може да бъде отворен.",
        "zip-wrong-format": "Указаният файл не е ZIP файл.",
        "zip-bad": "Файлът е повреден или е нечетим ZIP файл.\nСигурността му не може да бъде проверена.",
        "zip-unsupported": "Файлът е ZIP файл, който използва ZIP компоненти, които не се поддържат от МедияУики.\nСигурността му не може да бъде коректно проверена.",
+       "uploadstash": "Скрити качвания",
        "uploadstash-summary": "Тази страница предоставя достъп до файловете, които са качени (или са в процес на качване), но все още не са публикувани в уикито. Тези файлове не са достъпни само за потребителя, който ги е качил.",
+       "uploadstash-clear": "Изчистване на скритите качвания",
+       "uploadstash-nofiles": "Нямате скрити файлове",
        "uploadstash-badtoken": "Извършване на това действие е неуспешно, вероятно заради изтекла сесия. Опитайте отново.",
        "uploadstash-errclear": "Изчистването на файловете беше неуспешно.",
        "uploadstash-refresh": "Обновяване на списъка с файлове",
        "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-notindir": "Търсеният път не е в настроената директория за качвания.",
-       "img-auth-badtitle": "Грешка при изграждането на валидно заглавие от \"$1\".",
+       "img-auth-badtitle": "Грешка при изграждането на валидно заглавие от „$1“.",
        "img-auth-nologinnWL": "Не сте влезли в системата и „$1“ не е в белия списък.",
        "img-auth-nofile": "Файлът „$1“ не съществува.",
        "img-auth-isdir": "Опитвате се да осъществите достъп до директорията „$1“.\nРазрешен е само достъп до файловете.",
        "img-auth-public": "Функцията img_auth.php е да извлича файлове от частни уикита.\nТова уики е конфигурирано като публично.\nС цел оптимална сигурност, функцията img_auth.php е деактивирана.",
        "img-auth-noread": "Потребителят няма достъп за четене на „$1“.",
        "http-invalid-url": "Невалиден адрес: $1",
-       "http-invalid-scheme": "Не се поддържат URL адреси с префикс \"$1\".",
+       "http-invalid-scheme": "Не се поддържат URL адреси с префикс „$1“.",
        "http-request-error": "HTTP заявката пропадна поради неизвестна грешка.",
        "http-read-error": "HTTP грешка при четене.",
        "http-timed-out": "Пресрочено време за HTTP заявка.",
        "nolicense": "Нищо не е избрано",
        "license-nopreview": "(Не е наличен предварителен преглед)",
        "upload_source_url": " (правилен, публично достъпен интернет-адрес)",
-       "upload_source_file": " (файл на вашия компютър)",
+       "upload_source_file": "(файл на вашия компютър)",
        "listfiles-delete": "изтриване",
        "listfiles-summary": "Тази специална страница показва всички качени файлове.",
        "listfiles_search_for": "Търсене по име на файла:",
+       "listfiles-userdoesnotexist": "Няма регистрирана потребителска сметка за „$1“.",
        "imgfile": "файл",
        "listfiles": "Списък на файловете",
        "listfiles_thumb": "Миникартинка",
        "uploadnewversion-linktext": "Качване на нова версия на файла",
        "shared-repo-from": "от $1",
        "shared-repo": "споделено хранилище",
+       "upload-disallowed-here": "Не можете да препокриете файла.",
        "filerevert": "Възвръщане на $1",
        "filerevert-legend": "Възвръщане на файла",
        "filerevert-intro": "Възвръщане на '''[[Media:$1|$1]]''' към [$4 версията от $3, $2].",
        "ninterwikis": "$1 {{PLURAL:$1|междууики|междууикита}}",
        "nlinks": "$1 {{PLURAL:$1|препратка|препратки}}",
        "nmembers": "$1 {{PLURAL:$1|член|члена}}",
+       "nmemberschanged": "$1 → $2 {{PLURAL:$2|член|члена}}",
        "nrevisions": "$1 {{PLURAL:$1|версия|версии}}",
        "nviews": "$1 {{PLURAL:$1|преглед|прегледа}}",
        "nimagelinks": "Използва се в $1 {{PLURAL:$1|страница|страници}}",
        "pager-older-n": "{{PLURAL:$1|по-стара 1|по-стари $1}}",
        "suppress": "Премахване от публичния архив",
        "querypage-disabled": "Тази специална страница е изключена, защото затруднява производителността на уикито.",
+       "apihelp-no-such-module": "Модул \"$1\" не беше намерен.",
        "booksources": "Източници на книги",
        "booksources-search-legend": "Търсене на информация за книга",
        "booksources-search": "Търсене",
        "listgrouprights-removegroup-self": "Може да премахва {{PLURAL:$2|група|групи}} от собствената си сметка: $1",
        "listgrouprights-addgroup-self-all": "Може да добавя всички групи към своята сметка",
        "listgrouprights-removegroup-self-all": "Може да премахва всички групи от собствената сметка",
+       "listgrouprights-namespaceprotection-header": "Ограничения на именните пространства",
        "listgrouprights-namespaceprotection-namespace": "Именно пространство",
        "trackingcategories": "Категории за проследяване",
        "trackingcategories-summary": "Тази страница съдържа списък на категории за проследяване, които се попълват автоматично от софтуера на МедияУики. Имената им могат да се променят чрез съответните системни съобщения в именното пространство {{ns:8}}.",
        "watchlist-options": "Опции на списъка за наблюдение",
        "watching": "Наблюдение…",
        "unwatching": "Спиране на наблюдение…",
-       "watcherrortext": "Възникна грешка при промяна на настройките за списъка ви за наблюдение за \"$1\".",
+       "watcherrortext": "Възникна грешка при промяна на настройките за списъка ви за наблюдение за „$1“.",
        "enotif_reset": "Отбелязване на всички страници като посетени",
        "enotif_impersonal_salutation": "Потребител на {{SITENAME}}",
        "enotif_subject_deleted": "Страницата „$1“ в {{SITENAME}} беше {{GENDER:$2|изтрита}} от $2",
        "modifiedarticleprotection": "смени нивото на защита на „[[$1]]“",
        "unprotectedarticle": "свали защитата на „[[$1]]“",
        "movedarticleprotection": "преместване на настройките за защита от „[[$2]]“ на „[[$1]]“",
-       "protect-title": "Смяна на нивото на защита на \"$1\"",
+       "protect-title": "Смяна на нивото на защита на „$1“",
        "protect-title-notallowed": "Преглеждане нивото на защита за „$1“",
        "prot_1movedto2": "„[[$1]]“ преместена като „[[$2]]“",
        "protect-badnamespace-title": "Незащитимо именно пространство",
        "import-interwiki-history": "Копиране на всички версии на страницата",
        "import-interwiki-templates": "Включване на всички шаблони",
        "import-interwiki-submit": "Внасяне",
-       "import-interwiki-namespace": "Целево именно пространство:",
-       "import-interwiki-rootpage": "Целева основна страница (незадължително):",
        "import-upload-filename": "Име на файл:",
        "import-comment": "Коментар:",
        "importtext": "Изнесете файла от изходното уики чрез „[[Special:Export|инструмента за изнасяне]]“. Съхранете го на твърдия диск на компютъра си и го качете тук.",
        "tooltip-pt-mycontris": "Списък на вашите приноси",
        "tooltip-pt-login": "Насърчаваме ви да влезете, въпреки че не е задължително.",
        "tooltip-pt-logout": "Излизане от {{SITENAME}}",
+       "tooltip-pt-createaccount": "Насърчаваме Ви да си създадете сметка и да влезете, въпреки че не е задължително.",
        "tooltip-ca-talk": "Беседа относно страницата",
        "tooltip-ca-edit": "Можете да редактирате страницата. Използвайте бутона за предварителен преглед преди да съхраните.",
        "tooltip-ca-addsection": "Започване на нов раздел",
        "tooltip-diff": "Показване на направените от вас промени по текста",
        "tooltip-compareselectedversions": "Показване на разликите между двете избрани версии на страницата",
        "tooltip-watch": "Добавяне на страницата към списъка ви за наблюдение",
+       "tooltip-watchlistedit-normal-submit": "Премахване на заглавия",
        "tooltip-watchlistedit-raw-submit": "Обновяване на списъка за наблюдение",
        "tooltip-recreate": "Възстановяване на страницата независимо, че е била изтрита",
        "tooltip-upload": "Започване на качването",
        "pageinfo-length": "Дължина на страницата (в байтове)",
        "pageinfo-article-id": "Номер на страницата",
        "pageinfo-language": "Език на съдържанието на страницата",
+       "pageinfo-content-model": "Модел на съдържанието на страницата",
        "pageinfo-robot-policy": "Индексиране от роботи",
        "pageinfo-robot-index": "Позволено",
        "pageinfo-robot-noindex": "Непозволено",
        "pageinfo-protect-cascading": "Каскадни защити, започващи от тази страница",
        "pageinfo-protect-cascading-yes": "Да",
        "pageinfo-protect-cascading-from": "Каскадни защити, започващи от",
+       "pageinfo-category-info": "Информация за категория",
+       "pageinfo-category-total": "Общ брой",
        "pageinfo-category-pages": "Брой страници",
        "pageinfo-category-subcats": "Брой подкатегории",
        "pageinfo-category-files": "Брой файлове",
        "markedaspatrollederrortext": "Необходимо е да се посочи редакция, която да бъде отбелязана като проверена.",
        "markedaspatrollederror-noautopatrol": "Не е разрешено да маркирате своите редакции като проверени.",
        "markedaspatrollednotify": "Тази промяна на $1 беше отбелязана като патрулирана.",
+       "markedaspatrollederrornotify": "Неуспешно отбелязване на редакция като патрулирана.",
        "patrol-log-page": "Дневник на патрула",
        "patrol-log-header": "Тази страница съдържа дневник на проверените версии.",
        "log-show-hide-patrol": "$1 на Дневника на патрула",
        "autosumm-blank": "Премахване на цялото съдържание на страницата",
        "autosumm-replace": "Заместване на съдържанието на страницата с „$1“",
        "autoredircomment": "Пренасочване към [[$1]]",
-       "autosumm-new": "Нова страница: $1",
+       "autosumm-new": "Нова страница: „$1“",
        "lag-warn-normal": "Промените от {{PLURAL:$1|последната $1 секунда|последните $1 секунди}} вероятно не са показани в списъка.",
        "lag-warn-high": "Поради голямото изоставане в сървърната синхронизация, промените от {{PLURAL:$1|последната $1 секунда|последните $1 секунди}} вероятно не са показани в списъка.",
        "watchlistedit-normal-title": "Редактиране на списъка за наблюдение",
        "version-entrypoints": "Адреси на входни точки",
        "version-entrypoints-header-entrypoint": "Входна точка",
        "version-entrypoints-header-url": "Адрес",
+       "version-libraries": "Инсталирани библиотеки",
+       "version-libraries-library": "Библиотека",
+       "version-libraries-version": "Версия",
        "redirect-submit": "Отваряне",
        "redirect-value": "Стойност:",
        "redirect-user": "Потребителски номер",
        "fileduplicatesearch-info": "$1 × $2 пиксела<br />Размер на файла: $3<br />MIME тип: $4",
        "fileduplicatesearch-result-1": "Файлът „$1“ няма идентично копие.",
        "fileduplicatesearch-result-n": "Файлът „$1“ има {{PLURAL:$2|едно идентично копие|$2 идентични копия}}.",
-       "fileduplicatesearch-noresults": "Не беше открит файл с име \"$1\".",
+       "fileduplicatesearch-noresults": "Не беше открит файл с име „$1“.",
        "specialpages": "Специални страници",
        "specialpages-note-top": "Легенда",
        "specialpages-note": "* Обикновени специални страници.\n* <strong class=\"mw-specialpagerestricted\">Специални страници с ограничения.</strong>",
        "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-none": "Вече не се използва",
        "tags-edit": "редактиране",
        "tags-hitcount": "$1 {{PLURAL:$1|промяна|промени}}",
+       "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-below": "Искате ли да продължите със създаването на етикета?",
+       "tags-delete-title": "Изтриване на етикет",
+       "tags-delete-explanation-initial": "На път сте да изтриете етикетът „$1“ от базата от данни.",
+       "tags-delete-reason": "Причина:",
+       "tags-delete-submit": "Необратимо изтриване на етикета",
+       "tags-delete-not-found": "Етикет „$1“ не съществува.",
+       "tags-activate-title": "Активиране на етикета",
+       "tags-activate-reason": "Причина:",
+       "tags-activate-not-found": "Етикет „$1“ не съществува.",
+       "tags-deactivate-reason": "Причина:",
+       "tags-update-no-permission": "Нямате права за добавяне или премахване на етикети от индивидуални версии или дневници.",
+       "tags-edit-revision-selected": "{{PLURAL:$1|Избрана версия|Избрани версии}} от [[:$2]]:",
+       "tags-edit-revision-legend": "Добавяне или премахване на етикети от {{PLURAL:$1|тази редакция|всичките $1 редакции}}",
+       "tags-edit-new-tags": "Нови етикети:",
+       "tags-edit-reason": "Причина:",
+       "tags-edit-revision-submit": "Прилагане на промените към {{PLURAL:$1|тази редакция|$1 редакции}}",
+       "tags-edit-nooldid-title": "Не е зададена версия",
        "comparepages": "Сравняване на страници",
        "compare-page1": "Страница 1",
        "compare-page2": "Страница 2",
        "sqlite-no-fts": "$1 без поддръжка на пълнотекстово търсене",
        "logentry-delete-delete": "$1 {{GENDER:$2|изтри}} страницата $3",
        "logentry-delete-restore": "$1 {{GENDER:$2|възстанови}} страницата $3",
-       "logentry-suppress-revision": "$1 тайно промени видимостта на {{PLURAL:$5|една версия|$5 версии}} на страницата $3: $4",
+       "logentry-delete-revision-legacy": "$1 {{GENDER:$2|промени}} видимостта на версиите на страница $3",
+       "logentry-suppress-revision": "$1 тайно {{GENDER:$2|промени}} видимостта на {{PLURAL:$5|една версия|$5 версии}} на страницата $3: $4",
        "logentry-suppress-revision-legacy": "$1 тайно {{GENDER:$2|промени}} видимостта на версиите на страница $3",
        "revdelete-content-hid": "скрито съдържание",
        "revdelete-summary-hid": "скрито резюме на редакцията",
        "logentry-rights-rights": "$1 {{GENDER:$2|промени}} потребителската група на $3 от $4 на $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|промени}} потребителската група на $3",
        "logentry-rights-autopromote": "$1 е автоматично {{GENDER:$2|повишен|повишена}} от $4 до $5",
+       "logentry-upload-upload": "$1 {{GENDER:$2|качи}} $3",
        "rightsnone": "(никакви)",
        "revdelete-summary": "резюме",
        "feedback-adding": "Добавяне на коментар към страницата...",
        "api-error-overwrite": "Не е позволено презаписването върху съществуващ файл.",
        "api-error-stashfailed": "Вътрешна грешка: Сървърът не успя да съхрани временния файл.",
        "api-error-publishfailed": "Вътрешна грешка: Сървърът не успя да съхрани временния файл.",
+       "api-error-stasherror": "Имаше грешка при качване на файла в хранилището.",
+       "api-error-stashedfilenotfound": "Скритият файл не беше открит при опита за качването му от временното хранилище.",
+       "api-error-stashfilestorage": "Имаше грешка при съхраняването на файла в хранилището.",
+       "api-error-stashnotloggedin": "Трябва да сте влезли в системата за да съхранявате файлове във временното хранилище.",
        "api-error-timeout": "Сървърът не отговори в рамките на предвиденото време.",
        "api-error-unclassified": "Възникна непозната грешка.",
-       "api-error-unknown-code": "Непозната грешка: \"$1\"",
+       "api-error-unknown-code": "Непозната грешка: „$1“",
        "api-error-unknown-error": "Вътрешна грешка: Нещо се обърка по време на качването на файла ви.",
-       "api-error-unknown-warning": "Непознато предупреждение: $1",
+       "api-error-unknown-warning": "Непознато предупреждение: „$1“",
        "api-error-unknownerror": "Неизвестна грешка: „$1“.",
        "api-error-uploaddisabled": "Достъпът за качване на файлове в това уики е прекратен.",
        "api-error-verification-error": "Файлът може би е повреден или има грешно разширение.",
        "mediastatistics-header-audio": "Аудио",
        "mediastatistics-header-video": "Видео",
        "json-error-syntax": "Синтактична грешка",
+       "headline-anchor-title": "Препратка към този раздел",
        "special-characters-group-latin": "Латиница",
        "special-characters-group-latinextended": "Латиница – разширена",
        "special-characters-group-ipa": "IPA",
index 32587a0..5b3ab20 100644 (file)
@@ -2,7 +2,8 @@
        "@metadata": {
                "authors": [
                        "Baloch Afghanistan",
-                       "Ibrahim khashrowdi"
+                       "Ibrahim khashrowdi",
+                       "Rachitrali"
                ]
        },
        "tog-underline": "لینکانی جهلگا خط کشیتین",
@@ -77,7 +78,7 @@
        "september": "سیپٹمبر",
        "october": "اکتوبر",
        "november": "نوامبر",
-       "december": "ڈ\tسمبر",
+       "december": "ڈسمبر",
        "january-gen": "جنوری",
        "february-gen": "فیبروری",
        "march-gen": "مارچ",
        "revdelete-submit": "اعمال بئ {{PLURAL:$1|نخسه|نخسه هان}} ئی سرا انتخاب بوته",
        "revdelete-success": "'''نخسه ئی ودی بوتین گو کامیابیا اپڈیٹ بوت.'''",
        "revdelete-failure": "'''نخسه ئی ودی بوتینئ اپڈیٹ بوتن امکان وجود نداریت :'''\n$1",
-       "logdelete-success": "<strong>لوگین ئی قابلیت دیست گو کامیابیا انجام بوت.</strong>",
+       "logdelete-success": "لوگین ئی قابلیت دیست گو کامیابیا انجام بوت.",
        "logdelete-failure": "'''لوگین ئی قابلیت دیست تنظیم ئه نه بیئنت:'''\n$1",
        "revdel-restore": "نمایش/نهفتن",
        "pagehist": "تاکدیمی تاریخچه",
        "notextmatches": "هیچ یک شه مقاله ئانی متن مطابقت ندارنت",
        "prevn": "{{PLURAL:$1|$1}}دیمتیری",
        "nextn": "{{PLURAL:$1|$1}}پدتیری",
+       "prev-page": "دیمتیرین تاکدیم",
+       "next-page": "دیگرین تاکدیم",
        "prevn-title": "$1 {{PLURAL:$1|نتیجهٔ|نتیجهٔ}} دیمی",
        "nextn-title": "$1 {{PLURAL:$1|نتیجهٔ|نتیجهٔ}} پدئ",
        "shown-title": "نشان داتین $1 ئی {{PLURAL:$1|نتیجه|نتیجه}} بی هر تاکدیمی تا",
        "listfiles-delete": "پاک کورتین",
        "listfiles-summary": "ای خاصین تاکدیم موچین بُرز بوته ئین فایلانه نشان ئه دنت.",
        "listfiles_search_for": "گشتین په میڈیا نام ئا:",
+       "listfiles-userdoesnotexist": "\"$1\" ئی کارمرزوکین هیساب راجیستر نه بوته.",
        "imgfile": "فایل",
        "listfiles": "فایل لیست",
        "listfiles_thumb": "ناحُننک",
        "morelinkstoimage": "ای فایلئ [[Special:WhatLinksHere/$1|دیگرین لینکانا]] بگیندیت.",
        "linkstoimage-redirect": "$1 (فایلی تغیرمسیر) $2",
        "duplicatesoffile": "جهلگی{{PLURAL:$1|فایل|فایلان}} تکرارین نخسه شه ای فایلا  {{PLURAL:$1|است|هستنت}} ([[Special:FileDuplicateSearch/$2|گیشتیرین مئلومات]]):",
+       "sharedupload": "ای ورَق بئ $1 تا اینت و مومکن اینت که دیگه پروژه ئانی تا هم ایستیپاده بیت.",
        "sharedupload-desc-here": "ای فایل بئ $1 ئی تا قرار داریت و ممکن اینت که بئ دیگه پروژه‌هانئ تا هم استفاده بیئت.\nموجودین شرح بئ [$2 فایلی دیمی شرح بئ آ جای تا]، جهلگا نشان داته بوته.",
        "filepage-nofile": "فایلی گۆ ای ناما موجود نه اینت.",
        "filepage-nofile-link": "فایلی گۆ ای ناما موجود نه اینت، اما شما ئه توانیت آیرا [$1 بُرز کنیت].",
        "import-interwiki-history": "ای تاکدیمی موچین تاریخچه ئی نخسه انتقال داته بوتنت",
        "import-interwiki-templates": "موچین تراشوانانا شامل بیئت",
        "import-interwiki-submit": "بێ تێ کورتین",
-       "import-interwiki-namespace": "نامی فضای مخصد:",
-       "import-interwiki-rootpage": "مخصدی دیمی ریشگ (اختیاری):",
        "import-upload-filename": "فایلئ نام:",
        "import-comment": "کومنیت:",
        "importstart": "تاکدیمانی بي  تئ ریتینی حالا...",
        "importnopages": "هیچ تاکدیمی په ایمپورت ئا نه اینت.",
        "importfailed": "ایمپورت شکست وارت: <nowiki>$1</nowiki>",
        "importunknownsource": "بُنریچی ئی رقم مئلوم نه اینت",
+       "importcantopen": "تاکدیمانی درون ریچی ئی ورَق پاچ نه بوت",
        "importbadinterwiki": "بدئین انتیرویکی ئی لینک",
        "importsuccess": "بي تی ریتین یا ایمپورت بوت!",
+       "import-parse-failure": "ختا بئ بُرز بوته ئین اکس ام ال ئی تجزیه یی تا",
+       "import-noarticle": "هیچ تاکدیمی په ایمپورت ئا نه اینت.",
        "import-upload": "اکس ام ال ئی دیتای بُرز کورتین",
        "importlogpage": "ایمپورت لوگ",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|نسخه|نسخه}} وارد بوته",
        "exif-ycbcrpositioning-1": "مانجین بوتگ",
        "exif-ycbcrpositioning-2": "اشتراکی",
        "exif-dc-contributor": "شراکت کنۆک ئان",
+       "exif-dc-coverage": "رسانگ ئی زمانین یا مکانین محدوده",
        "exif-dc-date": "تاریخ(ئان)",
        "exif-dc-publisher": "ناشر",
        "exif-dc-relation": "مربوتین میڈیاهان",
        "tags-deactivate-reason": "دلیل:",
        "tags-deactivate-not-allowed": "«$1» ئی تگی غیر په هال کورتین ممکن نه اینت.",
        "tags-deactivate-submit": "غیرپئال کورتین",
+       "tags-edit-existing-tags": "موجودین ٹاپه ئان:",
+       "tags-edit-existing-tags-none": "\"هیچگوجام\"",
+       "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": "دلیل:",
        "comparepages": "تاکدیمانئ مقایسه",
        "compare-page1": "تاکدیم ۱",
        "compare-page2": "تاکدیم ۲",
        "json-error-syntax": "نحوی ئین خطا",
        "json-error-inf-or-nan": "INF یا NAN ئی مقادیر یک یا گیشتیر بی مقداری که کدگذاری ئا بیئنت",
        "json-error-unsupported-type": "یک اندازه که نتوانت کد گذاری بیئت داته بوته",
-       "headline-anchor-title": "لینک بئ ای قیسمت ئا"
+       "headline-anchor-title": "لینک بئ ای قیسمت ئا",
+       "special-characters-group-latin": "لاتین",
+       "special-characters-group-latinextended": "پیشرپته ئین لاتین",
+       "special-characters-group-ipa": "آی پی ای",
+       "special-characters-group-symbols": "نشانگ ئان",
+       "special-characters-group-greek": "یونانی",
+       "special-characters-group-cyrillic": "سیریلیک",
+       "special-characters-group-arabic": "ئربی",
+       "special-characters-group-arabicextended": "پیشرپته ئین ئربی",
+       "special-characters-group-persian": "پارسی",
+       "special-characters-group-hebrew": "ئیبری",
+       "special-characters-group-bangla": "بنگالی",
+       "special-characters-group-tamil": "تامیلی",
+       "special-characters-group-telugu": "تێلوگو",
+       "special-characters-group-sinhala": "سینهالا",
+       "special-characters-group-gujarati": "گوجراتی",
+       "special-characters-group-devanagari": "دیواناگرى",
+       "special-characters-group-thai": "تایلندی",
+       "special-characters-group-lao": "لائو",
+       "special-characters-group-khmer": "خمر",
+       "special-characters-title-endash": "پاسیله خت",
+       "special-characters-title-emdash": "تچکین پاسیله خت",
+       "special-characters-title-minus": "منپی نشانگ"
 }
index cffaf52..fd06461 100644 (file)
        "import-interwiki-history": "Salin sabarataan halam raralatan gasan tungkaran ngini",
        "import-interwiki-templates": "Tamasuk samunyaan cicitakan",
        "import-interwiki-submit": "Impur",
-       "import-interwiki-namespace": "Ruang-ngaran tujuan:",
-       "import-interwiki-rootpage": "Tungkaran turunan tujuan (opsional):",
        "import-upload-filename": "Ngaran barakas:",
        "import-comment": "Kumintar:",
        "importtext": "Muhun ma-ikspur tungkaran matan asal mula wiki mamuruk [[Special:Export|sarana ikspur]].\nSimpan ngini dalam komputar Pian wan hunggah di sia.",
index 768770f..ba9e38e 100644 (file)
        "revdelete-log": "কারণ:",
        "revdelete-submit": "নির্বাচিত {{PLURAL:$1|সংশোধনে|সংশোধসমূহে}} প্রয়োগ করো",
        "revdelete-success": "'''সংশোধন দৃশ্যমানতা সফলভাবে হালনাগাদ করা হয়েছে।'''",
-       "revdelete-failure": "<strong>সংশোধনের দৃশ্যমানতা হালনাগাদ করা যায়নি:</strong>\n$1",
+       "revdelete-failure": "সংশোধনের দৃশ্যমানতা হালনাগাদ করা যায়নি:\n$1",
        "logdelete-success": "'''ঘটনা দৃশ্যমানতা সফলভাবে স্থাপন করা হয়েছে।'''",
        "logdelete-failure": "'''লগ-এর দৃশ্যমানতা নির্ধারণ সম্ভব হচ্ছে না:'''\n$1",
        "revdel-restore": "দৃশ্যমানতা পরিবর্তন করো",
        "right-move-rootuserpages": "root ব্যবহারকারীর পাতাগুলো সরিয়ে ফেলুন",
        "right-move-categorypages": "বিষয়শ্রেণী পাতাসমূহ স্থানান্তর করুন",
        "right-movefile": "ফাইল স্থানান্তর",
-       "right-suppressredirect": "পাতা স্থানান্তরের সময় মূল পাতায় রিডাইরেক্ট তৈরী করছে না",
+       "right-suppressredirect": "পাতা স্থানান্তরের সময় মূল পাতা থেকে পুনর্নির্দেশ তৈরী করছে না",
        "right-upload": "ফাইল আপলোড করুন",
        "right-reupload": "বিদ্যমান ফাইল প্রতিস্থাপন করো",
        "right-reupload-own": "কারও আপলোডকৃত ফাইল ওভাররাইট করুন",
        "emailccsubject": "আপনার বার্তার অনুলিপি $1-কে: $2",
        "emailsent": "ই-মেইল প্রেরণ করা হয়েছে",
        "emailsenttext": "আপনার ই-মেইল বার্তা প্রেরণ করা হয়েছে।",
-       "emailuserfooter": "এই ই-মেইলটি {{SITENAME}} সাইটের \"ই-মেইল করুন\" সুবিধা ব্যবহার করে $1-এর পক্ষ থেকে $2-এর নিকট পাঠানো হয়েছে।",
+       "emailuserfooter": "এই ইমেইলটি {{SITENAME}} সাইটের \"{{int:emailpage}}\" সুবিধা ব্যবহার করে $1-এর পক্ষ থেকে $2-এর নিকট পাঠানো হয়েছে।",
        "usermessage-summary": "বাদবাকি সিস্টেম বার্তা",
        "usermessage-editor": "সিস্টেম ম্যাসেঞ্জার",
        "watchlist": "নজর তালিকা",
        "rollback": "সম্পাদনা ফিরিয়ে নিন",
        "rollbacklink": "পুনর্বহাল",
        "rollbacklinkcount": "$1টি {{PLURAL:$1|সম্পাদনা}} রোলব্যাক করুন",
-       "rollbacklinkcount-morethan": "$1টির বেশি {{PLURAL:$1|সম্পাদনা|সম্পাদনাগুলো}} রোলব্যাক করুন",
+       "rollbacklinkcount-morethan": "$1টির বেশি {{PLURAL:$1|সম্পাদনা}} রোলব্যাক করুন",
        "rollbackfailed": "রোলব্যাক ব্যর্থ",
        "cantrollback": "পূর্বের সংস্করণে ফেরত যাওয়া সম্ভব হল না, সর্বশেষ সম্পাদনাকারী এই নিবন্ধটির একমাত্র লেখক।",
        "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}}]]) দ্বারা সম্পাদিত।",
        "pagemovedsub": "সরিয়ে নেওয়া হয়েছে",
        "movepage-moved": "'''\"$1\"-কে \"$2\" শিরোনামে স্থানান্তর করা হয়েছে'''",
        "movepage-moved-redirect": "একটি পুনর্নির্দেশনা তৈরি হয়েছে।",
-       "movepage-moved-noredirect": "রিডাà¦\87রà§\87à¦\95à§\8dà¦\9f তৈরীতে বাধা দেয়া হয়েছে।",
+       "movepage-moved-noredirect": "পà§\81নরà§\8dনিরà§\8dদà§\87শ তৈরীতে বাধা দেয়া হয়েছে।",
        "articleexists": "এই শিরোনামে একটি পাতা ইতোমধ্যে সৃষ্টি হয়ে গেছে, অথবা আপনি যে শিরোনামটি পছন্দ করেছেন তা গ্রহণযোগ্য নয়। দয়া করে অন্য একটি শিরোনাম দিয়ে চেষ্টা করুন।",
        "cantmove-titleprotected": "আপনি এই অবস্থানে পাতাটিকে স্থানান্তর করতে পারেন না, কারণ এই নতুন শিরোনামটি সৃষ্টি করা থেকে সুরক্ষিত।",
        "movetalk": "সংশ্লিষ্ট আলাপের পাতা সরিয়ে নাও",
        "import-interwiki-history": "এই পাতার সমস্ত ইতিহাসের সংস্করণের অনুলিপি করা হোক",
        "import-interwiki-templates": "সকল টেম্পলেট অন্তর্ভুক্ত",
        "import-interwiki-submit": "আমদানি",
-       "import-interwiki-namespace": "গন্তব্য নামস্থান:",
-       "import-interwiki-rootpage": "মূল পাতা (ঐচ্ছিক):",
+       "import-mapping-subpage": "নিচের পাতার উপপাতাসমূহ হিসাবে আমদানি করুন:",
        "import-upload-filename": "ফাইলনাম:",
        "import-comment": "মন্তব্য:",
-       "importtext": "à¦\85নà§\81à¦\97à§\8dরহ à¦\95রà§\87 à¦«à¦¾à¦\87লà¦\9fি à¦\89à§\8eস à¦\89à¦\87à¦\95ি à¦¥à§\87à¦\95à§\87 [[Special:Export|à¦\8fà¦\95à§\8dসপà§\8bরà§\8dà¦\9f à¦\87à¦\89à¦\9fিলিà¦\9fি]] à¦¬à§\8dযবহার à¦\95রà§\87 à¦\8fà¦\95à§\8dসপà§\8bরà§\8dà¦\9f করুন।\nফাইলটি আপনার কম্পিউটারে সংরক্ষণ করুন এবং এখানে আপলোড করুন।",
+       "importtext": "à¦\85নà§\81à¦\97à§\8dরহ à¦\95রà§\87 à¦«à¦¾à¦\87লà¦\9fি à¦\89à§\8eস à¦\89à¦\87à¦\95ি à¦¥à§\87à¦\95à§\87 [[Special:Export|রপà§\8dতানি à¦\87à¦\89à¦\9fিলিà¦\9fি]] à¦¬à§\8dযবহার à¦\95রà§\87 à¦°à¦ªà§\8dতানি করুন।\nফাইলটি আপনার কম্পিউটারে সংরক্ষণ করুন এবং এখানে আপলোড করুন।",
        "importstart": "পাতা আমদানি করা হচ্ছে...",
        "import-revision-count": "$1 {{PLURAL:$1|টি সংশোধন|টি সংশোধন}}",
        "importnopages": "আমদানি করার মত কোন পাতা নেই।",
        "importunknownsource": "আমদানি উৎসের ধরন অজানা",
        "importcantopen": "আমদানি ফাইল খোলা যায়নি",
        "importbadinterwiki": "খারাপ আন্তঃউইকি সংযোগ",
-       "importsuccess": "à¦\87মà§\8dপà§\8bরà§\8dà¦\9f সফল!",
+       "importsuccess": "à¦\86মদানি সফল!",
        "importnosources": "কোন আন্তঃউইকি আমদানি উৎস সংজ্ঞায়িত করা হয়নি এবং সরাসরি ইতিহাস আপলোডের ক্ষমতা নিষ্ক্রিয় করা হয়েছে।",
        "importnofile": "কোন আমদানি ফাইল আপলোড করা হয়নি।",
        "importuploaderrorsize": "আমদানি ফাইল আপলোড ব্যর্থ। ফাইলটির আকার অনুমোদিত আপলোডের আকারের চেয়ে বড়।",
        "importuploaderrorpartial": "আমদানি ফাইল আপলোড ব্যর্থ। ফাইলটি কেবল আংশিকভাবে আপলোড করা হয়েছে।",
        "importuploaderrortemp": "আমদানি ফাইলের আপলোড ব্যর্থ। একটি সাময়িক ফোল্ডার হারানো গেছে।",
        "import-parse-failure": "XML পার্স করা যায়নি",
-       "import-noarticle": "à¦\87মà§\8dপà§\8bরà§\8dà¦\9f করার মত কোন পাতা নেই!",
+       "import-noarticle": "à¦\86মদানি করার মত কোন পাতা নেই!",
        "import-nonewrevisions": "কোনো সংস্করণ আমদানী করা হয়নি।",
        "xml-error-string": "$1 যে লাইনে $2, কলামে $3 (বাইট $4): $5",
        "import-upload": "XML ডাটা আপলোড",
        "import-token-mismatch": "সেশন ডাটা হারিয়ে গিয়েছে।\nঅনুগ্রহ করে পুনরায় চেষ্টা করুন।",
        "import-invalid-interwiki": "নির্ধারিত উইকি থেকে আমদানী করা যাবে না।",
        "import-error-edit": "\"$1\" পাতাটি আমদানি করা যায়নি কারণ আপনার এটি সম্পাদনা করার অনুমতি নেই।",
-       "import-error-create": "\"$1\" à¦ªà¦¾à¦¤à¦¾à¦\9fি à¦\87মà§\8dপà§\8bরà§\8dà¦\9f করা যায়নি কারণ আপনার এটি তৈরী করার অনুমতি নেই।",
-       "import-error-interwiki": "\"$1\" à¦ªà¦¾à¦¤à¦¾à¦\9fি à¦\87মà§\8dপà§\8bরà§\8dà¦\9f à¦\95রা à¦¯à¦¾à¦¯à¦¼à¦¨à¦¿ à¦\95ারণ à¦\8fà¦\87 à¦¨à¦¾à¦®à¦\9fি à¦¬à¦¹à¦¿à¦\83সà¦\82যà§\8bà¦\97র à¦\9cনà§\8dয à¦¨à¦¿à¦°à§\8dধারিত (à¦\87নà§\8dà¦\9fারউইকি)।",
+       "import-error-create": "\"$1\" à¦ªà¦¾à¦¤à¦¾à¦\9fি à¦\86মদানি করা যায়নি কারণ আপনার এটি তৈরী করার অনুমতি নেই।",
+       "import-error-interwiki": "\"$1\" à¦ªà¦¾à¦¤à¦¾à¦\9fি à¦\86মদানি à¦\95রা à¦¯à¦¾à¦¯à¦¼à¦¨à¦¿ à¦\95ারণ à¦\8fà¦\87 à¦¨à¦¾à¦®à¦\9fি à¦¬à¦¹à¦¿à¦\83সà¦\82যà§\8bà¦\97র à¦\9cনà§\8dয à¦¨à¦¿à¦°à§\8dধারিত (à¦\86নà§\8dতà¦\83উইকি)।",
        "import-error-special": "\"$1\" পাতাটি আমদানি করা যায়নি কারণ এটি একটি বিশেষ নামস্থানকে নির্দেশ করে যেটি সম্পাদনার জন্য অনুমোদিত নয়।",
-       "import-error-invalid": "\"$1\" à¦ªà¦¾à¦¤à¦¾à¦\9fি à¦\87মà§\8dপà§\8bরà§\8dà¦\9f করা যায়নি কারণ নামটি সঠিক নয়।",
+       "import-error-invalid": "\"$1\" à¦ªà¦¾à¦¤à¦¾à¦\9fি à¦\86মদানি করা যায়নি কারণ নামটি সঠিক নয়।",
        "import-error-unserialize": "$1 পাতার $2 সংস্করণটি সিরিয়ালাইজ করা যাচ্ছে না। এই রিভিশনে $4 হিসাবে $3 কন্টেন্ট মডেলে সিরিয়ালাইজ করা আছে।",
        "import-options-wrong": "ভুল {{PLURAL:$2|অপশন|অপশনসমূহ}}: <nowiki>$1</nowiki>",
        "import-rootpage-invalid": "মূল পাতার ভুল শিরনাম দেয়া হয়েছে।",
        "version-license-not-found": "এই এক্সটেনশনের জন্য কোনো বিস্তারিত লাইসেন্স তথ্য পাওয়া যায়নি।",
        "version-credits-title": "$1-এর জন্য কৃতিত্ব",
        "version-credits-not-found": "এই এক্সটেনশনটির জন্য কোনো বিস্তারিত কৃতিত্ব তথ্য পাওয়া যায়নি।",
-       "version-poweredby-credits": "এইক উইকিটি পরিচালিত হচ্ছে '''[https://www.mediawiki.org/ মিডিয়াউইকি]'''-এর মাধ্যমে, কপিরাইট © ২০০১-$1 $2।",
+       "version-poweredby-credits": "এই উইকিটি পরিচালিত হচ্ছে <strong>[https://www.mediawiki.org/ মিডিয়াউইকি]</strong> -এর মাধ্যমে, কপিরাইট © ২০০১-$1 $2।",
        "version-poweredby-others": "অন্যান্য",
        "version-poweredby-translators": "translatewiki.net অনুবাদকগণ",
        "version-credits-summary": "[[Special:Version|মিডিয়াউইকি]] সফটওয়্যারে অবদানের জন্য আমরা এই ব্যক্তিকে স্বীকৃতি দিতে চাই।",
-       "version-license-info": "মিডিয়াউইকি এ++++কটি ফ্রি সফটওয়্যার, আপনি এটি বিতরণ করতে পারবেন এবং/অথবা সম্পদানা করতে পারবেন, এক্ষেত্রে ফ্রি সফটওয়্যার ফাউন্ডেশনের প্রকাশিত গনু জেনারেল পাবলিক লাইসেন্সের ২য় অথবা সাম্প্রতিকতম কোনো সংস্করণ মেনে চলতে হবে। \n\nসকলের উপকারের লক্ষ্যে এটি বিতরণ করা হয়ে থাকে, কিন্তু এক্ষেত্রে কোনো ওয়ারেন্টি দেয়া হয় না, এমনকি বিশেষ কোনো কার্যক্ষেত্রে ব্যবহারের জন্যও তথাকথিত ওয়ারেন্টি দেয়া হয় না। বিস্তারিত জানতে দেখুন গনু জেনারেল পাবলিক লাইসেন্স। \n\nএই সফটওয়্যারের সাথে [{{SERVER}}{{SCRIPTPATH}}/COPYING গনু জেনারেল পাবলিক লাইসেন্সের একটি কপি] থাকার কথা; যদি আপনি না পেয়ে থাকেন তাহলে অনুগ্রহ করে ফ্রি সফটওয়্যার ফাউন্ডেশনকে জানান এই ঠিকানায়, Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA অথবা [//www.gnu.org/licenses/old-licenses/gpl-2.0.html অনলাইনে দেখুন]।",
+       "version-license-info": "মিডিয়াউইকি একটি ফ্রি সফটওয়্যার, আপনি এটি বিতরণ করতে পারবেন এবং/অথবা সম্পদানা করতে পারবেন, এক্ষেত্রে ফ্রি সফটওয়্যার ফাউন্ডেশনের প্রকাশিত গনু জেনারেল পাবলিক লাইসেন্সের ২য় অথবা সাম্প্রতিকতম কোনো সংস্করণ মেনে চলতে হবে। \n\nসকলের উপকারের লক্ষ্যে এটি বিতরণ করা হয়ে থাকে, কিন্তু এক্ষেত্রে কোনো ওয়ারেন্টি দেয়া হয় না, এমনকি বিশেষ কোনো কার্যক্ষেত্রে ব্যবহারের জন্যও তথাকথিত ওয়ারেন্টি দেয়া হয় না। বিস্তারিত জানতে দেখুন গনু জেনারেল পাবলিক লাইসেন্স। \n\nএই সফটওয়্যারের সাথে [{{SERVER}}{{SCRIPTPATH}}/COPYING গনু জেনারেল পাবলিক লাইসেন্সের একটি কপি] থাকার কথা; যদি আপনি না পেয়ে থাকেন তাহলে অনুগ্রহ করে ফ্রি সফটওয়্যার ফাউন্ডেশনকে জানান এই ঠিকানায়, Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA অথবা [//www.gnu.org/licenses/old-licenses/gpl-2.0.html অনলাইনে দেখুন]।",
        "version-software": "ইনস্টলকৃত সফটওয়্যার",
        "version-software-product": "পণ্য",
        "version-software-version": "সংস্করণ",
        "tags-deactivate-reason": "কারণ:",
        "tags-deactivate-submit": "নিষ্ক্রিয়",
        "tags-edit-title": "ট্যাগ সম্পাদনা করুন",
+       "tags-edit-reason": "কারণ:",
        "comparepages": "পাতার তুলনা",
        "compare-page1": "পাতা ১",
        "compare-page2": "পাতা ২",
        "revdelete-unrestricted": "এই সীমাবদ্ধতা প্রশাসকের ক্ষেত্রে তুলে নাও",
        "logentry-block-block": "$1 {{GENDER:$4|$3}} কে $5 মেয়াদের জন্য {{GENDER:$2|বাধাদান}} করেছেন $6",
        "logentry-block-unblock": "$1 {{GENDER:$4|$3}}-এর উপর থেকে বাধা তুলে {{GENDER:$2|নিয়েছেন}}",
+       "logentry-import-interwiki": "$1 অন্য একটি উইকিতে থেকে $3 {{GENDER:$2|আমদানি করেছে}}",
        "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|স্থানান্তর}} করেছেন",
        "headline-anchor-title": "এই অনুচ্ছেদে সংযোগ",
        "special-characters-group-latin": "লাতিন",
        "special-characters-group-latinextended": "সম্প্রসারিত লাতিন",
-       "special-characters-group-ipa": "আইপিএ (IPA)",
+       "special-characters-group-ipa": "আইপিএ",
        "special-characters-group-symbols": "চিহ্নসমূহ",
        "special-characters-group-greek": "গ্রিক",
        "special-characters-group-cyrillic": "সিরিলিক",
index f14b841..c8a0982 100644 (file)
        "rightsnone": "(নেই)",
        "revdelete-summary": "সারাংশ পতানি",
        "searchsuggest-search": "বিসারা",
-       "searchsuggest-containing": "আসেতা..."
+       "searchsuggest-containing": "আসেতা...",
+       "special-characters-group-latin": "লাতিন",
+       "special-characters-group-latinextended": "সালকরিসি লাতিন",
+       "special-characters-group-ipa": "আইপিএ (IPA)",
+       "special-characters-group-symbols": "চিন্নতহানি",
+       "special-characters-group-greek": "গ্রিক",
+       "special-characters-group-cyrillic": "সিরিলিক",
+       "special-characters-group-arabic": "আরবীয়",
+       "special-characters-group-persian": "ফারসি",
+       "special-characters-group-hebrew": "হিব্রু",
+       "special-characters-group-bangla": "বাংলা",
+       "special-characters-group-telugu": "তেলেগু",
+       "special-characters-group-sinhala": "শিংহলী",
+       "special-characters-group-gujarati": "গুজরাতি",
+       "special-characters-group-thai": "থাই",
+       "special-characters-group-lao": "লাও",
+       "special-characters-group-khmer": "খেমার"
 }
index 569dbef..5ff574a 100644 (file)
        "import-interwiki-history": "Eilañ holl stummoù istor ar bajenn-mañ",
        "import-interwiki-templates": "Lakaat e-barzh an holl batromoù",
        "import-interwiki-submit": "Enporzhiañ",
-       "import-interwiki-namespace": "Esaouenn anv ar pal :",
-       "import-interwiki-rootpage": "Pennpajenn kas (war zibab)",
        "import-upload-filename": "Anv ar restr :",
        "import-comment": "Notenn :",
        "importtext": "Ezporzhiit ar restr adal ar wiki orin en ur ober gant an arc'hwel [[Special:Export|ezporzhiañ]].\nEnrollit ar bajenn war hoc'h urzhiataer ha kargit anezhi amañ.",
index 086f06a..fd77fa9 100644 (file)
        "searchrelated": "povezano",
        "searchall": "sve",
        "showingresults": "Dolje {{PLURAL:$1|je prikazan '''1''' rezultat|su prikazana '''$1''' rezultata|je prikazano '''$1''' rezultata}} počev od '''$2'''.",
+       "search-showingresults": "{{PLURAL:$4|Rezultat <strong>$1</strong> od <strong>$3</strong>|Rezultati <strong>$1 - $2</strong> od <strong>$3</strong>}}",
        "search-nonefound": "Nisu pronađeni rezultati koji odgovaraju upitu.",
        "powersearch-legend": "Napredna pretraga",
        "powersearch-ns": "Pretraga u imenskim prostorima:",
        "thumbnail_gd-library": "Nekompletna konfiguracija GD biblioteke: nedostaje funkcija $1",
        "thumbnail_image-missing": "Datoteka ne dostaje: $1",
        "import": "Uvoz stranica",
-       "importinterwiki": "Međuwiki uvoz",
+       "importinterwiki": "Uvezeno sa druge wiki",
        "import-interwiki-text": "Izaberi wiki i naslov stranice za uvoz.\nDatumi revizija i imena autora će biti sačuvani.\nSve akcije pri međuwiki uvozu će biti zapisane u [[Special:Log/import|zapisu uvoza]].",
        "import-interwiki-history": "Kopiraj sve verzije historije za ovu stranicu",
        "import-interwiki-templates": "Uključi sve šablone",
        "import-interwiki-submit": "Uvoz",
-       "import-interwiki-namespace": "Odredišni imenski prostor:",
-       "import-interwiki-rootpage": "Odredišna osnovna stranica (opcionalno):",
        "import-upload-filename": "Naziv datoteke:",
        "import-comment": "Komentar:",
        "importtext": "Molimo Vas da izvezete datoteku iz izvornog wikija koristeći [[Special:Export|alat za izvoz]].\nSačuvajte je na Vašem računaru i pošaljite ovdje.",
        "tooltip-pt-mycontris": "Spisak vašeg doprinosa",
        "tooltip-pt-login": "Predlažemo da se prijavite, ali nije obvezno.",
        "tooltip-pt-logout": "Odjava sa projekta {{SITENAME}}",
+       "tooltip-pt-createaccount": "Ohrabrujemo vas da otvorite nalog i prijavite se, međutim to nije obavezno",
        "tooltip-ca-talk": "Razgovor o sadržaju",
        "tooltip-ca-edit": "Možete uređivati ovaj članak. Molimo Vas, koristite dugme \"Prikaži izgled\" prije spašavanja izmjena.",
        "tooltip-ca-addsection": "Započnite novu sekciju.",
        "logentry-rights-rights": "$1 je {{GENDER:$2|promijenio|promijenila|promijenio}} članstvo grupe za $3 iz $4 u $5",
        "logentry-rights-rights-legacy": "$1 je {{GENDER:$2|promijenio|promijenila|promijenio}} članstvo grupe za $3",
        "logentry-rights-autopromote": "$1 {{GENDER:$1|je automatski promijenjeno članstvo|su automatski promijenjena članstva}} iz $4 u $5",
+       "logentry-upload-upload": "$1 {{GENDER:$2|uploaded}} $3",
        "rightsnone": "(nema)",
        "revdelete-summary": "sažetak",
        "feedback-adding": "Dodajem povratne informacije na stranicu...",
index 54ff806..910f0ba 100644 (file)
        "revertmerge": "Desfusiona",
        "mergelogpagetext": "A sota hi ha una llista de les fusions més recents d'una pàgina d'historial en una altra.",
        "history-title": "«$1»: Historial de revisions",
-       "difference-title": "$1: Diferència entre les revisions",
-       "difference-title-multipage": "$1 i $2: Diferència entre les pàgines",
+       "difference-title": "Diferència entre revisions de la pàgina «$1»",
+       "difference-title-multipage": "Diferència entre les pàgines «$1» i «$2»",
        "difference-multipage": "(Diferència entre pàgines)",
        "lineno": "Línia $1:",
        "compareselectedversions": "Compara les versions seleccionades",
        "import-interwiki-history": "Copia totes les versions de l'historial d'aquesta pàgina",
        "import-interwiki-templates": "Inclou totes les plantilles",
        "import-interwiki-submit": "Importa",
-       "import-interwiki-namespace": "Espai de noms de destinació:",
-       "import-interwiki-rootpage": "Pàgina arrel de destí (opcional):",
        "import-upload-filename": "Nom de fitxer:",
        "import-comment": "Comentari:",
        "importtext": "Exporteu el fitxer des del wiki d'origen utilitzant l'[[Special:Export|eina d'exportació]].\nDeseu-lo al vostre ordinador i carregueu-ne una còpia ací.",
        "tags-update-add-not-allowed-one": "No es permet afegir manualment l'etiqueta «$1».",
        "tags-edit-title": "Modifica les etiquetes",
        "tags-edit-manage-link": "Gestiona les etiquetes",
+       "tags-edit-existing-tags": "Etiquetes existents:",
+       "tags-edit-new-tags": "Etiquetes noves:",
        "tags-edit-reason": "Motiu:",
        "comparepages": "Comparar pàgines",
        "compare-page1": "Pàgina 1",
index dc2ee15..29ab958 100644 (file)
@@ -23,7 +23,7 @@
        "tog-editsectiononrightclick": "Нисде дакъа шозза бакъехьар дахка тӀетаӀийча оцу кортан (JavaScript)",
        "tog-watchcreations": "ТӀетоха ас кхоьллина агӀонаш тергаме могӀам чу",
        "tog-watchdefault": "ТӀетоха ас нисйина агӀонаш тергаме могӀам чу",
-       "tog-watchmoves": "ТӀетоха ас цӀераш хийцина агӀонаш тергаме могӀам чу",
+       "tog-watchmoves": "ТӀетоха ас цӀерш хийцина агӀонаш тергаме могӀам чу",
        "tog-watchdeletion": "ТӀетоха ас дӀаяьхна агӀонаш тергаме могӀанан чу",
        "tog-watchrollback": "Аса нисдар юхудаькхина агӀо сан тергаме могӀанан тӀетуху",
        "tog-minordefault": "Къастам бе нисйиначарн хlумцадеш кегийра долушсанна",
        "qbfind": "Лахар",
        "qbbrowse": "Хьажар",
        "qbedit": "Нисъе",
-       "qbpageoptions": "Агlо нисйар",
+       "qbpageoptions": "АгӀона гӀирс нисбар",
        "qbmyoptions": "Хьан нисдарш",
        "faq": "СиХХ",
        "faqpage": "Project:СиХХ",
        "editinginterface": "<strong>Тергам бе:</strong> Ахьа таеш ю интерфейсан йоза долу агӀо программин латторан.\nЦуна бина хийцам хьокху Википедин кхечу декъашхошна гур бу.",
        "translateinterface": "ХӀокху хааман гоч тӀетоха я хийца дехар до лелае локализацин сайт MediaWiki [//translatewiki.net/ translatewiki.net].",
        "cascadeprotected": "АгӀо хийцам ца байта гӀоралла дина ю {{PLURAL:$1|хӀокху агӀона|хӀокху агӀонийн}} юкъа йогӀуш хилар бахьнехь:\n$2",
-       "namespaceprotected": "ХӀан бакъо яц анна цӀераш чохь тадарш да «$1».",
+       "namespaceprotected": "ХӀан бакъо яц анна цӀерш чохь тадарш да «$1».",
        "customcssprotected": "Хьан бакъо яц хӀара CSS-агӀо тая, иза кхечу декъашхочун гӀерс болу дера.",
        "customjsprotected": "Хьан бакъо яц хӀара JavaScript-агӀо тая, иза кхечу декъашхочун гӀерс болу дера.",
        "mycustomcssprotected": "Хьан бакъо яц хӀара CSS агӀо тая.",
        "userlogin-helplink2": "Системин чудахаран гӀодар",
        "userlogin-loggedin": "Хьо {{GENDER:$1|$1}} цӀарца чохь ву/ю.\nЛахара форманца кхин цӀарца чугӀо.",
        "userlogin-createanother": "Кхолла декъашхочун кхин дӀаяздар",
-       "createacct-emailrequired": "ЭлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\87тан адрес",
-       "createacct-emailoptional": "ЭлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\87тан адрес (ца яздича мега)",
-       "createacct-email-ph": "Ð\94Ó\80аÑ\8fзде Ñ\8dлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\87тан адрес",
-       "createacct-another-email-ph": "Ð\94Ó\80аÑ\8fзде Ñ\8dлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\87тан адрес",
+       "createacct-emailrequired": "ЭлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\88тан адрес",
+       "createacct-emailoptional": "ЭлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\88тан адрес (ца яздича мега)",
+       "createacct-email-ph": "Ð\94Ó\80аÑ\8fзде Ñ\85Ñ\8cайн Ñ\8dлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\88тан адрес",
+       "createacct-another-email-ph": "Ð\94Ó\80аÑ\8fзде Ñ\8dлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\88тан адрес",
        "createaccountmail": "Лела йе цахууш нисйина хана пароль, кхин язйинчу электронан адрес тӀе яийта и.",
        "createacct-realname": "Хьан цӀе (ца язйича мега)",
        "createaccountreason": "Бахьна:",
        "noname": "Ахьа магийтина йолу декъашхочун цӀе билгал йина яц.",
        "loginsuccesstitle": "Хьан пароль тӀеэца, марша догӀила Википеди чу!",
        "loginsuccess": "Хlинца ахьа болх бó оцу цlарца $1.",
-       "nosuchuser": "Иштта $1 цӀе йолуш декъашхочун дӀаяздар дац.\nДекъашхой цӀераш хаалуш ю дӀаяздарца элпаш.\nНийса юьй хьажа цӀе я [[Special:UserLogin/signup|дӀаяздар кхолла керла]].",
+       "nosuchuser": "Иштта $1 цӀе йолуш декъашхочун дӀаяздар дац.\nДекъашхой цӀерш хаалуш ю дӀаяздарца элпаш.\nНийса юьй хьажа цӀе я [[Special:UserLogin/signup|дӀаяздар кхолла керла]].",
        "nosuchusershort": "Ишта «$1» цӀе йолу декъашхо вац/яц. Хьажа цӀе нийса язйина юй.",
        "nouserspecified": "Ахьа декъашхочун цӀе билгал ян езаш ю.",
        "login-userblocked": "ХӀара декъашхо блоктоьхна ву/ю. Системин чувала/яла магийна дац.",
        "passwordremindertitle": "Декъашхочун {{grammar:genitive|{{SITENAME}}}}  пароль дагайаийтар",
        "passwordremindertext": "Цхьам (ахь хила мега IP-адрес $1 тӀера) керла пароль кхоллар дехна {{grammar:genitive|{{SITENAME}}}} ($4) чохь. Декъашхочун $2\nкхоьллина керла хана пароль: $3. Иза дехар ахь динехь,\nсистемин чугӀой хийца пароль.\nХьан керла пароль белх беш хира ю $5 {{PLURAL:$5|дийнахь}}.\n\nХьой дехар дийна дацахь хӀума маде Ӏад бита хӀара хаам.",
        "noemail": "ЦӀе $1 йолу декъашхочун электронан адрес яздина дац.",
-       "noemailcreate": "Ð\90Ñ\85Ñ\8cа Ð½Ð¸Ð¹Ñ\81а Ñ\8dлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\87тан адрес дӀаяздан деза",
+       "noemailcreate": "Ð\90Ñ\85Ñ\8cа Ð½Ð¸Ð¹Ñ\81а Ñ\8dлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\88тан адрес дӀаяздан деза",
        "passwordsent": "Керла пароль декъашхочун $1 электронан адрес тӀе дӀахьажина. Дехар до, керла пароль еъча юху системин чугӀо.",
        "blocked-mailpassword": "Хьан IP-адрес ца тадарш дан магийна дац, цуьндела пароль меттахӀотош йолу функци блоктоьхна ю.",
        "eauthentsent": "ДӀаяздинчу электронан адрес тӀе хаам баийтина.\nДаиман хаамаш баийта хааман чохь де бохург дан деза адрес хьай хилар бакъдеш.",
        "throttled-mailpassword": "Пароль дага йоуьйту функци {{PLURAL:$1|тӀехьара $1 сахьтехь}} лелина.\nЗулам цахилийта $1 {{PLURAL:$1|сахьтан чохь}} цӀа бен функци лело йиш яц.",
        "mailerror": "Кехат дохьуьйтуш гӀалат ду: $1",
        "acct_creation_throttle_hit": "Де-буьйса хена чохь хьа IP-адрес тӀера {{PLURAL:$1|кхоьллина $1 декъашхочун дӀаяздар|кхоьллина $1 декъашхочун дӀаяздарш}} оьцу хана юкъахь кхин дукха дӀаяздарш кхолла магийна дац.\nЦундела и IP-адрес лелочарна кхин керла дӀаяздарш кхолла цало.",
-       "emailauthenticated": "Ð¥Ñ\8cан Ñ\8dлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\87тан адрес бакъдина $2 $3.",
-       "emailnotauthenticated": "Ð¥Ñ\8cан Ñ\8dлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\87тан адрес хӀинца а бакъдина дац.\nХаамаш кхоьхьуьйтура бац.",
-       "noemailprefs": "ЭлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\87Ñ\82ан Ð°Ð´Ñ\80еÑ\81 Ñ\8fздина Ð´Ð°Ñ\86, Ñ\8dл. Ð¿Ð¾Ñ\87тан белхан функцеш дӀаяйина ю.",
-       "emailconfirmlink": "Ð\91акÑ\8aде Ñ\85Ñ\8cай Ñ\8dлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\87тан адрес",
-       "invalidemailaddress": "ЭлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\87тан адрес тӀелаца йиш яц, цуна формат нийса цахилар бахьнехь.\nДехар до, язъе нийса электронан адрес я и меттиг есса йита.",
-       "cannotchangeemail": "Ð¥Ó\80окÑ\85Ñ\83 Ð´ÐµÐºÑ\8aаÑ\88Ñ\85оÑ\87Ñ\83н Ð´Ó\80аÑ\8fздаÑ\80Ñ\86а Ð´Ð¾Ð»Ñ\83 Ñ\8dлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\87тан адресаш хуьйцийла дац хӀокху вики чохь",
+       "emailauthenticated": "Ð¥Ñ\8cан Ñ\8dлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\88тан адрес бакъдина $2 $3.",
+       "emailnotauthenticated": "Ð¥Ñ\8cан Ñ\8dлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\88тан адрес хӀинца а бакъдина дац.\nХаамаш кхоьхьуьйтура бац.",
+       "noemailprefs": "ЭлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\88Ñ\82ан Ð°Ð´Ñ\80еÑ\81 Ñ\8fздина Ð´Ð°Ñ\86, Ñ\8dл. Ð¿Ð¾Ñ\88тан белхан функцеш дӀаяйина ю.",
+       "emailconfirmlink": "Ð\91акÑ\8aде Ñ\85Ñ\8cай Ñ\8dлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\88тан адрес",
+       "invalidemailaddress": "ЭлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\88тан адрес тӀелаца йиш яц, цуна формат нийса цахилар бахьнехь.\nДехар до, язъе нийса электронан адрес я и меттиг есса йита.",
+       "cannotchangeemail": "Ð¥Ó\80окÑ\85Ñ\83 Ð´ÐµÐºÑ\8aаÑ\88Ñ\85оÑ\87Ñ\83н Ð´Ó\80аÑ\8fздаÑ\80Ñ\86а Ð´Ð¾Ð»Ñ\83 Ñ\8dлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\88тан адресаш хуьйцийла дац хӀокху вики чохь",
        "emaildisabled": "ХӀокху сайтан таро яц электронан почте хаамаш бахьийта.",
        "accountcreated": "Декъашхочун дӀаяздар кхоьллина",
        "accountcreatedtext": "Кхоьллина декъашхочун [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|дийцаре.]]) дӀаяздар.",
        "createaccount-title": "{{SITENAME}}: декъашхочун дӀаяздар кхоллар",
-       "createaccount-text": "{{SITENAME}} ($4) Ð¿Ñ\80оекÑ\82еÑ\85Ñ\8c Ñ\86Ñ\85Ñ\8cам Ñ\85Ñ\8cан Ñ\8dлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\87тан адрес яздина хӀара «$2» декъашхочун дӀаяздар кхоьллина. \n\nДекъашхочун пароль — «$3». Ахьа дан дезарг сайтан чу гӀой пароль хийца.\n\nДекъашхочун дӀаяздар цахууш кхоьллинехь хӀума а ма де.",
+       "createaccount-text": "{{SITENAME}} ($4) Ð¿Ñ\80оекÑ\82еÑ\85Ñ\8c Ñ\86Ñ\85Ñ\8cам Ñ\85Ñ\8cан Ñ\8dлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\88тан адрес яздина хӀара «$2» декъашхочун дӀаяздар кхоьллина. \n\nДекъашхочун пароль — «$3». Ахьа дан дезарг сайтан чу гӀой пароль хийца.\n\nДекъашхочун дӀаяздар цахууш кхоьллинехь хӀума а ма де.",
        "login-throttled": "Хьо дукха гӀиртира.\nДехар до, собар де $1 юха гӀортале.",
        "login-abort-generic": "Сестемин довзийта тарцаделира",
        "loginlanguagelabel": "Мотт: $1",
        "passwordreset-text-many": "{{PLURAL:$1|Пароль кхосса юза лахара цхьа меттиг.}}",
        "passwordreset-legend": "Пароль кхоссар",
        "passwordreset-disabled": "ХӀокху вики чохь пароль кхоссар дӀадайина ду.",
-       "passwordreset-emaildisabled": "ЭлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\87тан функцеш хӀокху вики чохь дӀаяйина ю.",
+       "passwordreset-emaildisabled": "ЭлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\88тан функцеш хӀокху вики чохь дӀаяйина ю.",
        "passwordreset-username": "Декъашхочун цӀе:",
        "passwordreset-domain": "Домен:",
        "passwordreset-capture": "Хьажа беанчу хааме?",
        "passwordreset-capture-help": "Ахьа хӀара билгало хӀотта яхь хьона гур бу декъашхочо баийта чохь хана пароль йолу хаам.",
-       "passwordreset-email": "ЭлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\87тан адрес:",
+       "passwordreset-email": "ЭлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\88тан адрес:",
        "passwordreset-emailtitle": "{{SITENAME}}: декъашхочун дӀаяздарх лаьцна хаам",
        "passwordreset-emailtext-ip": "{{SITENAME}} ($4) проектехь цхьам я ахьа хӀокху IP-адрес $1 тӀера хьа декъашхочун пароль кхоссар дехна,\nоьцу электронан адресца дихкина ду {{PLURAL:$3|1хӀара декъашхочун дӀаяздар|хӀара декъашхочун дӀаяздар}}:\n\n$2\n\n{{PLURAL:$3|ХӀара хана пароль|ХӀара хана паролаш}} лелар ю {{PLURAL:$5|$5 дийнахь}}.\nСистемин чугӀой харжа керла пароль. \nХьой пароль кхоссар дехна дацахь я хьалхалера пароль дага еънехь хӀума цадеш Ӏад битта хӀара хаам хьа йиш ю шира пароль лелаян.",
        "passwordreset-emailtext-user": "{{SITENAME}} ($4) проектера декъашхочо $1 хьа декъашхочун пароль кхоссар дехна,\nоьцу электронан адресца дихкина ду {{PLURAL:$3|1хӀара декъашхочун дӀаяздар|хӀара декъашхочун дӀаяздар}}:\n\n$2\n\n{{PLURAL:$3|ХӀара хана пароль|ХӀара хана паролаш}} лелар ю {{PLURAL:$5|$5 дийнахь}}.\nСистемин чугӀой харжа керла пароль. \nХьой пароль кхоссар дехна дацахь я хьалхалера пароль дага еънехь хӀума цадеш Ӏад битта хӀара хаам хьа йиш ю шира пароль лелаян.",
        "passwordreset-emailsent": "Электронан хаам баийтина кхоьссинчу паролах лаьцна хаам чохь болуш.",
        "passwordreset-emailsent-capture": "Электронан хаам баийтина кхоьссинчу паролах лаьцна хаам чохь болуш. \nцуна йозане хьажа йиш ю лахахь.",
        "passwordreset-emailerror-capture": "Пароль кхоссаран хаам чохь болуш электронан кехат кхоьллина, цуна йоза хьажа йиш ю лахахь, амма иза {{GENDER:$2|декъашхочунга}} дӀадахьийта тар цаделира бахьнехь: $1",
-       "changeemail": "ХийÑ\86а Ñ\8dлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\87Ñ\82а",
-       "changeemail-text": "Юза Ñ\85Ó\80аÑ\80а Ñ\84оÑ\80ма Ñ\85Ñ\8cайн Ñ\8dлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\87тан адрес хуьйцуш. Ахьа хийцар бакъдан язъян еза пароль.",
+       "changeemail": "ХийÑ\86а Ñ\8dлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\88Ñ\82",
+       "changeemail-text": "Юза Ñ\85Ó\80аÑ\80а Ñ\84оÑ\80ма Ñ\85Ñ\8cайн Ñ\8dлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\88тан адрес хуьйцуш. Ахьа хийцар бакъдан язъян еза пароль.",
        "changeemail-no-info": "ХӀара агӀо лело системин чугӀо.",
-       "changeemail-oldemail": "Ð\9aаÑ\80аÑ\80а Ñ\8dлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\87тан адрес:",
-       "changeemail-newemail": "ЭлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\87тан керла адрес:",
+       "changeemail-oldemail": "Ð\9aаÑ\80аÑ\80а Ñ\8dлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\88тан адрес:",
+       "changeemail-newemail": "ЭлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\88тан керла адрес:",
        "changeemail-none": "(яц)",
        "changeemail-password": "Хьан пароль «{{SITENAME}}» проектан:",
        "changeemail-submit": "Хийца email",
        "missingcommentheader": "'''Дагадаийтар.''' Ахьа хӀокху къамелан дӀахьедар/корта билгал бина бац. Кнопка «{{int:savearticle}}» юху тӀетаӀича хийцамах лаьцна хӀума доцуш Ӏалашбира бу.",
        "summary-preview": "Цуьнах лаьцна хирду:",
        "subject-preview": "Коьрта могӀа хира бу:",
+       "previewerrortext": "Хьан хийцамашка хьалха хьажа гӀертачу хенахь гӀалат даьлла.",
        "blockedtitle": "Декъашхочун блоктоьхана",
-       "blockedtext": "'''Ð¥Ñ\8cан Ð´ÐµÐºÑ\8aаÑ\88Ñ\85оÑ\87Ñ\83н Ð´Ó\80аÑ\8fздаÑ\80 Ñ\8f IP-адÑ\80еÑ\81 Ð±Ð»Ð¾ÐºÑ\82оÑ\8cÑ\85на Ð´Ñ\83.'''\n\nÐ\91локÑ\82оÑ\8cÑ\85на ÐºÑ\83Ñ\8cйгалÑ\85оÑ\87о $1.\nÐ\91илгалдина Ð±Ð°Ñ\85Ñ\8cна: Â«''$2''».\n\n* Ð\91локÑ\82оÑ\85аÑ\80 Ð´Ð¾Ð»Ð°Ð´ÐµÐ»Ð»Ð°: $8\n* Ð\91локÑ\82оÑ\85аÑ\80 Ñ\87екÑ\85долÑ\83: $6\n* Ð\91локÑ\82оÑ\85аÑ\80ан Ó\80алаÑ\88о: $7\n\nÐ¥Ñ\8cа Ð¹Ð¸Ñ\88 Ñ\8e $1 Ð´ÐµÐºÑ\8aаÑ\88Ñ\85оÑ\87Ñ\83Ñ\8cнга Ð´ÐµÑ\85аÑ\80дан Ñ\8f ÐºÑ\85еÑ\87Ñ\83 Ð¼Ñ\83Ñ\8cлÑ\85а [[{{MediaWiki:Grouppage-sysop}}|кÑ\83Ñ\8cйгалÑ\85оÑ\87Ñ\83Ñ\8cнга]].\nТеÑ\80гам Ð±Ðµ, Ñ\85Ñ\8cа Ñ\82аÑ\80о Ñ\8fÑ\86 Â«Ð´ÐµÐºÑ\8aаÑ\88Ñ\85оÑ\87Ñ\83нга ÐºÐµÑ\85аÑ\82» Ð¾Ð»Ñ\83 Ñ\84Ñ\83нкÑ\86и Ð»ÐµÐ»Ð°Ñ\8fн, Ñ\85Ñ\8cан [[Special:Preferences|гÓ\80иÑ\80Ñ\81 Ð½Ð¸Ñ\81баÑ\80 Ñ\87оÑ\85Ñ\8c]] Ð½Ð¸Ð¹Ñ\81а Ñ\8dлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\87тан адрес яздина дацахь, я кехаташ кхехӀитарна а блоктоьхна елахь.\nХьан IP-адрес — $3, блоктохаран идентификатор — $5.\nДехар до, хьайн хаам чохь билгалде и.",
+       "blockedtext": "'''Ð¥Ñ\8cан Ð´ÐµÐºÑ\8aаÑ\88Ñ\85оÑ\87Ñ\83н Ð´Ó\80аÑ\8fздаÑ\80 Ñ\8f IP-адÑ\80еÑ\81 Ð±Ð»Ð¾ÐºÑ\82оÑ\8cÑ\85на Ð´Ñ\83.'''\n\nÐ\91локÑ\82оÑ\8cÑ\85на ÐºÑ\83Ñ\8cйгалÑ\85оÑ\87о $1.\nÐ\91илгалдина Ð±Ð°Ñ\85Ñ\8cна: Â«''$2''».\n\n* Ð\91локÑ\82оÑ\85аÑ\80 Ð´Ð¾Ð»Ð°Ð´ÐµÐ»Ð»Ð°: $8\n* Ð\91локÑ\82оÑ\85аÑ\80 Ñ\87екÑ\85долÑ\83: $6\n* Ð\91локÑ\82оÑ\85аÑ\80ан Ó\80алаÑ\88о: $7\n\nÐ¥Ñ\8cа Ð¹Ð¸Ñ\88 Ñ\8e $1 Ð´ÐµÐºÑ\8aаÑ\88Ñ\85оÑ\87Ñ\83Ñ\8cнга Ð´ÐµÑ\85аÑ\80дан Ñ\8f ÐºÑ\85еÑ\87Ñ\83 Ð¼Ñ\83Ñ\8cлÑ\85а [[{{MediaWiki:Grouppage-sysop}}|кÑ\83Ñ\8cйгалÑ\85оÑ\87Ñ\83Ñ\8cнга]].\nТеÑ\80гам Ð±Ðµ, Ñ\85Ñ\8cа Ñ\82аÑ\80о Ñ\8fÑ\86 Â«Ð´ÐµÐºÑ\8aаÑ\88Ñ\85оÑ\87Ñ\83нга ÐºÐµÑ\85аÑ\82» Ð¾Ð»Ñ\83 Ñ\84Ñ\83нкÑ\86и Ð»ÐµÐ»Ð°Ñ\8fн, Ñ\85Ñ\8cан [[Special:Preferences|гÓ\80иÑ\80Ñ\81 Ð½Ð¸Ñ\81баÑ\80 Ñ\87оÑ\85Ñ\8c]] Ð½Ð¸Ð¹Ñ\81а Ñ\8dлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\88тан адрес яздина дацахь, я кехаташ кхехӀитарна а блоктоьхна елахь.\nХьан IP-адрес — $3, блоктохаран идентификатор — $5.\nДехар до, хьайн хаам чохь билгалде и.",
        "blockednoreason": "бахьана билгалдина дац",
        "whitelistedittext": "Ахьа да деза $1 агӀона хийцамаш бан.",
        "nosuchsectiontitle": "Дакъа каро йиш яц.",
        "history-feed-title": "Хийцаман истори",
        "history-feed-description": "Википедин чохь хӀокху агӀона хийцаман истори",
        "history-feed-item-nocomment": "$1 оцу $2",
+       "history-edit-tags": "Хаьржинчу версийн тегаш хийца",
        "rev-deleted-comment": "(нисдарах лаьцна хаам дӀабаьккхина)",
        "rev-deleted-user": "(авторан цӏе дӏаяйина)",
        "rev-deleted-event": "(дӀаяздар дӀаяьккхина)",
        "rev-delundel": "гайта/къайла",
        "rev-showdeleted": "гайта",
        "revisiondelete": "ДӀаяха / меттахӀотае агӀона версеш",
-       "revdelete-nooldid-title": "Билгалйина яц Ӏалашонан верси",
-       "revdelete-nooldid-text": "Ахьа хӀара функци кхочушъян билгалйина яц Ӏалашонан верси (я версеш).",
+       "revdelete-nooldid-title": "Ӏалашонан верси билгалйина яц",
+       "revdelete-nooldid-text": "Ахьа хӀара функци кхочушъян Ӏалашонан верси билгалйина яц (я версеш), билгалйина верси йоцуш ю я хьо карара верси къайлаяккха гӀерта.",
        "revdelete-no-file": "Иштта файл яц.",
        "revdelete-show-file-confirm": "Бакъалла лаьий хьуна дӀаяьккхина файлан версега хьажа «<nowiki>$1</nowiki>» $2 тӀера, $3?",
        "revdelete-show-file-submit": "ХӀаъ",
-       "revdelete-selected-text": "{{PLURAL:$1|Файлан Ñ\85аÑ\8cÑ\80жина Ð²ÐµÑ\80Ñ\81и|Файлан Ñ\85аьржина версеш}} [[:$2]]:",
+       "revdelete-selected-text": "{{PLURAL:$1|ХаÑ\8cÑ\80жина Ð²ÐµÑ\80Ñ\81и|Ð¥аьржина версеш}} [[:$2]]:",
        "revdelete-selected-file": "{{PLURAL:$1|Файлан хаьржина верси|Файлан хаьржина версеш}} [[:$2]]:",
        "logdelete-selected": "Тептар чура {{PLURAL:$1|хаьржина дӀаяздар|хаьржина дӀаяздарш}}:",
        "revdelete-text-text": "ДӀаяьхна версеш агӀонан истори чохь хьалха санна гуш хира ю, амма чулацаман цхьадолу дакъош декъашхошна тӀекхочехь хира дац.",
        "revdelete-edit-reasonlist": "Бахьанин могӀам нисбар",
        "revdelete-offender": "АгӀона версин автор:",
        "suppressionlog": "Хьулдаран тептар",
-       "mergehistory": "Нисдарин истори цхьаьнатохар",
-       "mergehistory-box": "Шин агӀона нисдарин истори цхьаьнатохар:",
+       "mergehistory": "Ð\9dиÑ\81даÑ\80ийн Ð¸Ñ\81Ñ\82оÑ\80и Ñ\86Ñ\85Ñ\8cаÑ\8cнаÑ\82оÑ\85аÑ\80",
+       "mergehistory-box": "Шин Ð°Ð³Ó\80она Ð½Ð¸Ñ\81даÑ\80ийн Ð¸Ñ\81Ñ\82оÑ\80и Ñ\86Ñ\85Ñ\8cаÑ\8cнаÑ\82оÑ\85аÑ\80:",
        "mergehistory-from": "Дуьххьарлера агӀоно",
        "mergehistory-into": "Ӏалашонан агӀо:",
-       "mergehistory-list": "Цхьаьнатухуш долу нисдарин истори",
+       "mergehistory-list": "ЦÑ\85Ñ\8cаÑ\8cнаÑ\82Ñ\83Ñ\85Ñ\83Ñ\88 Ð´Ð¾Ð»Ñ\83 Ð½Ð¸Ñ\81даÑ\80ийн Ð¸Ñ\81Ñ\82оÑ\80и",
        "mergehistory-go": "Гайта цхьаьнатухуш долу нисдарш",
        "mergehistory-submit": "Цхьаьнатоха нисдарш",
        "mergehistory-empty": "Цхьаьнатоха нисдарш цакарий.",
        "difference-multipage": "(АгӀонийн башхалла)",
        "lineno": "МогӀа $1:",
        "compareselectedversions": "Хаьржина версешка хьажар",
-       "showhideselectedversions": "Ð\93айÑ\82а/кÑ\8aайлаÑ\8fÑ\85а Ñ\85аÑ\8cÑ\80жина Ð±Ð°Ñ\88Ñ\85онаш",
+       "showhideselectedversions": "Ð\93айÑ\82а/кÑ\8aайлаÑ\8fÑ\85а Ñ\85аÑ\8cÑ\80жина Ð²ÐµÑ\80Ñ\81еш",
        "editundo": "цаоьшу",
        "diff-empty": "(башхалла яц)",
        "diff-multi-sameuser": "(ца {{PLURAL:$1|гайтина юккъера цхьа верси|гайтина юккъера цхьа версеш}} оьцу декъашхочун)",
        "diff-multi-manyusers": "({{PLURAL:$1|гайтина яц $1 юккъера верси, йина|не показаны $1 юккъера версеш, йина}} {{PLURAL:$2|$2 декъашхочо|$2 декъашхоша}})",
        "searchresults": "Карийнарш",
        "searchresults-title": "Лахар «$1»",
-       "titlematches": "АгӀонийн цӀераш цхьаьнанисялар",
+       "titlematches": "АгӀонийн цӀерш цхьаьнанисялар",
        "textmatches": "АгӀонийн йоза цхьаьнанисдалар",
        "notextmatches": "АгӀонаш чура йозанашца цхьатерра йогӀуш яц",
        "prevn": "хьалхарнаш {{PLURAL:$1|$1}}",
        "prefs-watchlist-token": "Тергаме могӀанан токен:",
        "prefs-misc": "Кхин гlирсаш",
        "prefs-resetpass": "Хийца пароль",
-       "prefs-changeemail": "ХийÑ\86а Ñ\8dлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\87Ñ\82а",
-       "prefs-setemail": "ЭлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\87тан адрес дӀахӀоттор",
-       "prefs-email": "ЭлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\87тан параметраш",
+       "prefs-changeemail": "ХийÑ\86а Ñ\8dлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\88Ñ\82",
+       "prefs-setemail": "ЭлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\88тан адрес дӀахӀоттор",
+       "prefs-email": "ЭлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\88тан параметраш",
        "prefs-rendering": "Арахьара хатl",
        "saveprefs": "Ӏалашдан",
        "restoreprefs": "МеттахӀоттабе гӀирс Iад битарца",
        "timezoneregion-europe": "Европа",
        "timezoneregion-indian": "Индин океан",
        "timezoneregion-pacific": "Тийна океан",
-       "allowemail": "Ð\9cагийÑ\82а Ð´ÐµÐºÑ\8aаÑ\88Ñ\85оÑ\88на Ñ\85Ñ\8cайга Ñ\8dлекÑ\82Ñ\80они Ð¿Ð¾Ñ\87техула кехат кхехьийта",
+       "allowemail": "Ð\9cагийÑ\82а Ð´ÐµÐºÑ\8aаÑ\88Ñ\85оÑ\88на Ñ\85Ñ\8cайга Ñ\8dлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\88техула кехат кхехьийта",
        "prefs-searchoptions": "Лахар",
        "prefs-namespaces": "ЦӀерийн ана",
        "default": "Iад йитарца",
        "prefs-custom-js": "Долахь йолу JS",
        "prefs-common-css-js": "Юкъара CSS/JS массо кеч даран темийн:",
        "prefs-reset-intro": "ХӀара агӀо лело мега ахьа нисбина гӀирс Ӏад битарца юха бокхуш.\nХӀара дешдерг кхочушъ динчул  тӀехьа хьан йиш хир-яц и юха меттахӀотто.",
-       "prefs-emailconfirm-label": "ЭлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\87Ñ\82а бакъ яр:",
-       "youremail": "ЭлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\87Ñ\82а:",
+       "prefs-emailconfirm-label": "ЭлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\88Ñ\82 бакъ яр:",
+       "youremail": "ЭлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\88Ñ\82:",
        "username": "{{GENDER:$1|Декъашхочун цӀе}}:",
        "prefs-memberingroups": "{{GENDER:$1|Тобана|Тобаншан}} {{PLURAL:$2|декъашхо|декъашхой}}:",
        "prefs-registration": "ДӀаяздар кхолийна хан:",
        "gender-female": "сте",
        "prefs-help-gender": "ТӀехь доцург: и хаам лелош бу цхьайолу хаамаш чохь декъашхочун пол гучуйоккхуш.\nИ хаам массарна гуш хир бу.",
        "email": "Email",
-       "prefs-help-email": "ЭлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\87тан адрес цахӀоттийча а хӀумма дац, амма иза оьшар ю, нагахь хьуна хьай пароль йицлахь.",
+       "prefs-help-email": "ЭлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\88тан адрес цахӀоттийча а хӀумма дац, амма иза оьшар ю, нагахь хьуна хьай пароль йицлахь.",
        "prefs-help-email-others": "Кхин дӀа цо кхечу декъашхошна йиш хуьлуьйту хьога электронан кехат даийта хьан агӀона чохь йолу хьажориган гӀоьнца.",
-       "prefs-help-email-required": "ЭлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\87тан адрес яздан деза.",
+       "prefs-help-email-required": "ЭлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\88тан адрес яздан деза.",
        "prefs-info": "Коьрта хаам",
        "prefs-i18n": "Юкъардекъа мотт",
        "prefs-signature": "КуьгтаӀор",
        "right-createtalk": "Дийцаре агӀонаш кхоллар",
        "right-createaccount": "декъашхошна керла дӀаяздарш кхоллар",
        "right-minoredit": "«къезиг хийцам» аьлла билгало хӀоттор",
-       "right-move": "АгӀонийн цӀераш хийцар",
-       "right-move-subpages": "АгӀонийн цӀераш хийцар цера бухара агӀонашцан",
-       "right-move-rootuserpages": "декъашхочун ораман агӀонийн цӀераш хийцар",
-       "right-move-categorypages": "Категорийн агӀонийн цӀераш хийцар",
+       "right-move": "АгӀонийн цӀерш хийцар",
+       "right-move-subpages": "АгӀонийн цӀерш хийцар цера бухара агӀонашцан",
+       "right-move-rootuserpages": "декъашхочун ораман агӀонийн цӀерш хийцар",
+       "right-move-categorypages": "Категорийн агӀонийн цӀерш хийцар",
        "right-movefile": "Файлийн цӀе хийцар",
        "right-suppressredirect": "агӀона цӀе хуьйцуш ширчу цӀарах ма кхолла дӀасахьажорг",
        "right-upload": "Файлаш чуйаьхар",
        "rightslog": "Декъашхочун бакъона тéптар",
        "rightslogtext": "Декъашхойн бакъонаш хийцар долу тептар.",
        "action-read": "хӀара агӀо ешар",
-       "action-edit": "нисйа хlара агlо",
+       "action-edit": "хӀара агӀо таяр",
        "action-createpage": "агӀонаш кхолла",
        "action-createtalk": "дийцаре агӀонаш кхоллар",
        "action-createaccount": "хӀара декъашхочун дӀаяздар кхоллар",
        "action-minoredit": "жима нисдар сана билгало",
        "action-move": "хӀокху агӀон цӀе хийца",
        "action-move-subpages": "хӀокху агӀона цӀе хийцар цуна массо бухара агӀонийн а",
-       "action-move-rootuserpages": "декъашхочун ораман агӀонийн цӀераш хийцар",
-       "action-move-categorypages": "категорийн агӀонийн цӀераш хийцар",
+       "action-move-rootuserpages": "декъашхочун ораман агӀонийн цӀерш хийцар",
+       "action-move-categorypages": "категорийн агӀонийн цӀерш хийцар",
        "action-movefile": "хӀокху файлан цӀе хийца",
        "action-upload": "чуяккха хӀара файл",
        "action-reupload": "йолуш йолу файлан тӀехула дӀаязъяр",
        "mostimages": "Массарел дуккха лелайо файлаш",
        "mostinterwikis": "Дуккха юкъарвики хьажоргаш тӀе тоьхна йолу агӀонаш",
        "mostrevisions": "Сих сиха нисйина йолу агӀонаш",
-       "prefixindex": "Хьалха агӀонийн цӀераш хӀотто еза",
-       "prefixindex-namespace": "Хьалха агӀонийн цӀераш хӀотто еза («{{ns:$1}}»)",
+       "prefixindex": "Хьалха агӀонийн цӀерш хӀотто еза",
+       "prefixindex-namespace": "Хьалха агӀонийн цӀерш хӀотто еза («{{ns:$1}}»)",
        "prefixindex-strip": "Хиламийн могӀам чура префикс къайлаяккха",
        "shortpages": "Боца яззамаш",
        "longpages": "Беха яззамаш",
        "protectedpages-reason": "Бахьна",
        "protectedpages-unknown-timestamp": "Хууш дац",
        "protectedpages-unknown-performer": "Хууш доцу декъашхо",
-       "protectedtitles": "ГIаролла дина цIераш",
+       "protectedtitles": "ГӀаролла дина цӀерш",
        "listusers": "Декъашхойн могӀам",
        "listusers-editsonly": "Цхаъ мукъане а хийцам бина декъашхой гайта",
        "listusers-creationsort": "Кхоьллина хене хьаьжжина нисъяр",
        "specialloguserlabel": "Декъашхо:",
        "speciallogtitlelabel": "Ӏалашо (цӀе я декъашхо):",
        "log": "Тéптарш",
-       "all-logs-page": "Деригге тléкхочучéхь долу тéптарш",
+       "all-logs-page": "Дерриге тӀекхочучехь долу тептарш",
        "alllogstext": "Массо тéптар могӀам. {{SITENAME}}.\nШуьга харжалур бу хилам оцу тептаре хьаьжжина, декъашхочун цӀе (дӀаяздар диц а цадеш) я цо хьейина агӀонаш (ишта дӀаяздар а диц цадеш).",
        "logempty": "Тептарш чохь хӀокху агӀона дӀаяздарш дац.",
        "log-title-wildcard": "ХӀокху символашца болалуш болу кортанаш карабе",
        "allpagessubmit": "Кхочушдé",
        "allpagesprefix": "Лаха агӀонаш, дӀайолалуш йолу:",
        "allpagesbadtitle": "Цамагош йолу агӀон цӀе. Коьрта могӀан юкъах ю юкъарвики меттанашан юкъе тӀечӀагӀйина йолу хьаьрк йа магийна доцу оцу коьрта моӀанца символаш йа кхин.",
-       "allpages-bad-ns": "{{SITENAME}} кху чохь ана цӀераш яц «$1».",
+       "allpages-bad-ns": "{{SITENAME}} кху чохь ана цӀерш яц «$1».",
        "allpages-hide-redirects": "Къайлаяха дӀасахьажийнарш",
        "cachedspecial-viewing-cached-ttl": "Хьо хьоьжу агӀона верси кэш чура ю, иза карлаяьккхина хила мега $1 хьалха.",
        "cachedspecial-refresh-now": "Хьажа тӀехьарчу версега.",
        "listgrouprights-namespaceprotection-namespace": "ЦӀерийн ана",
        "listgrouprights-namespaceprotection-restrictedto": "Декъашхочун хийцамаш бан таро хуьлуьйту бакъонаш",
        "trackingcategories": "Хьожуш йолу категореш",
-       "trackingcategories-summary": "ХӀокху агӀонгахь ю хьожуш йолу категореш, MediaWikiс тӀеюзаш ю уьш. {{ns:8}} цӀерийн меттигера системин хаам хийцина цера цӀераш хийца йиш ю.",
+       "trackingcategories-summary": "ХӀокху агӀонгахь ю хьожуш йолу категореш, MediaWikiс тӀеюзаш ю уьш. {{ns:8}} цӀерийн меттигера системин хаам хийцина цера цӀерш хийца йиш ю.",
        "trackingcategories-msg": "Категореш зер",
        "trackingcategories-name": "Хааман цӀе",
        "trackingcategories-desc": "Категорин чутухуш йолчун хила деза хьал",
        "trackingcategories-nodesc": "Цунах лаьцна хӀума дац.",
        "trackingcategories-disabled": "Категори дӀаяйина ю",
        "mailnologin": "ДӀаяхьийта адрес дац",
-       "mailnologintext": "ЭлекÑ\82Ñ\80онан ÐºÐµÑ\85аÑ\82аÑ\88 ÐºÑ\85еÑ\85Ñ\8cийÑ\82а Ð¹Ð¸Ñ\88 Ñ\85илийÑ\82а [[Special:UserLogin|Ñ\81иÑ\81Ñ\82емин Ñ\87Ñ\83гÓ\80о]] ÐºÑ\85ин Ð´ÐµÐºÑ\8aаÑ\88Ñ\85оÑ\88ка Ñ\85аамаÑ\88 ÐºÑ\85еÑ\85Ñ\8cийÑ\82а Ñ\85Ñ\8cа [[Special:Preferences|гÓ\80иÑ\80Ñ\81а Ñ\87оÑ\85Ñ\8c]] Ð±Ð°ÐºÑ\8aалла Ð´Ð¾Ð»Ñ\83 Ñ\8dлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\87тан адрес хила деза.",
+       "mailnologintext": "ЭлекÑ\82Ñ\80онан ÐºÐµÑ\85аÑ\82аÑ\88 ÐºÑ\85еÑ\85Ñ\8cийÑ\82а Ð¹Ð¸Ñ\88 Ñ\85илийÑ\82а [[Special:UserLogin|Ñ\81иÑ\81Ñ\82емин Ñ\87Ñ\83гÓ\80о]] ÐºÑ\85ин Ð´ÐµÐºÑ\8aаÑ\88Ñ\85оÑ\88ка Ñ\85аамаÑ\88 ÐºÑ\85еÑ\85Ñ\8cийÑ\82а Ñ\85Ñ\8cа [[Special:Preferences|гÓ\80иÑ\80Ñ\81а Ñ\87оÑ\85Ñ\8c]] Ð±Ð°ÐºÑ\8aалла Ð´Ð¾Ð»Ñ\83 Ñ\8dлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\88тан адрес хила деза.",
        "emailuser": "Декъашхочун хааман кехат",
        "emailuser-title-target": "{{GENDER:$1|декъашхочунга}} электронан хаам базбар",
        "emailuser-title-notarget": "Декъашхочунга кехат яздар",
        "emailpage": "Декъашхочунга кехат яздар",
        "emailpagetext": "ХӀокху агӀона гӀоьнца йиш ю {{GENDER:$1|декъашхочун}} электронан почте хаам бахьийта.\nХьоьга жоп лур ду ахьа [[Special:Preferences|хьайн гӀирса чу]] дӀаяздина долу адрес тӀе.",
        "defemailsubject": "Хаам {{grammar:genitive|{{SITENAME}}}} чура бу",
-       "usermaildisabled": "Ð\94екÑ\8aаÑ\88Ñ\85оÑ\87Ñ\83н Ñ\8dлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\87Ñ\82а дӀаяйина ю",
-       "noemailtitle": "ЭлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\87тан адрес дац",
+       "usermaildisabled": "Ð\94екÑ\8aаÑ\88Ñ\85оÑ\87Ñ\83н Ñ\8dлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\88Ñ\82 дӀаяйина ю",
+       "noemailtitle": "ЭлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\88тан адрес дац",
        "emailusername": "Декъашхочун цӀе:",
        "emailusernamesubmit": "ДӀадахьийта",
        "email-legend": "{{grammar:genitive|{{SITENAME}}}} кхечу декъашхочунга кехат дахьийтар",
        "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л. Ð¿Ð¾Ñ\87Ñ\82а: $PAGEEDITOR_EMAIL\nвики: $PAGEEDITOR_WIKI\nХьо хьайн цӀарца хӀокху агӀон чц ца гӀаш, оьцуна кхин хийцамаш бича хьуна хаам бира бац. Кхин хьа йиш ю и опци массо агӀонашна дӀаяйа.\nХааман система {{grammar:genitive|{{SITENAME}}}}\n\n--\nХааман хийцам бар\n{{canonicalurl:{{#special:Preferences}}}}\n\nХьайн тергаме могӀам нисбар\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nХьайн тергаме могӀам чура агӀонаш дӀаяха\n$UNWATCHURL\n\nТхоьга зӀе а гӀо а\n$HELPPAGE",
+       "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Хьо хьайн цӀарца хӀокху агӀон чц ца гӀаш, оьцуна кхин хийцамаш бича хьуна хаам бира бац. Кхин хьа йиш ю и опци массо агӀонашна дӀаяйа.\nХааман система {{grammar:genitive|{{SITENAME}}}}\n\n--\nХааман хийцам бар\n{{canonicalurl:{{#special:Preferences}}}}\n\nХьайн тергаме могӀам нисбар\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nХьайн тергаме могӀам чура агӀонаш дӀаяха\n$UNWATCHURL\n\nТхоьга зӀе а гӀо а\n$HELPPAGE",
        "changed": "хийцина",
        "deletepage": "ДӀаяккха агӀо",
        "confirm": "Бакъдан",
        "unlockdbsuccesssub": "Хаамийн базан тӀера блокдӀаяьккхина",
        "lockedbyandtime": "($1 $2 $3)",
        "move-page": "$1 — цӀе хийцар",
-       "move-page-legend": "ЦӀe хийца яр",
+       "move-page-legend": "ЦӀе хийцар",
        "movepagetext": "Бухахь йолу форманца агӀон цӀе хийцало. Цул совнах цуьна хийцаман тептар кхоьчу метте доккха. Хьалхалера цӀарахь хиръю керла кхоьллина агӀонан хьажорг.\n\nХьовсалаш [[Special:DoubleRedirects|шалха]] а [[Special:BrokenRedirects|йохна хьажоргаш]] юй техь аьлла.\n\nШу жоьпехь ду хьажоргаш нийса некъ гойтуш хиларан.\n\nТидам бе хьалхалера агӀон цӀе ‘’’хийцалур яц’’’ иштта цӀе йолу агӀо йолуш елахь. Юкъардаккхар: йолуш йолу агӀо кхоьчухьа хьажорг елахь, я еса елахь а, цуьна хийцаме истори яцахь а.\n\nИ бохург ду шун агӀонан цӀе юха а хьалха хиллачун тӀе хийца йиш ю, амма йолуш йолу агӀо дӀаяккха йиш яц.\n\n'''ДӀАХЬЕДАР!'''\n\nЦӀе хийцар бахьнехь гӀаръяьлла агӀонашна дукха дагахь боцу хийцамаш хила тарло. Цундела цӀе хийцале шеш хила тарлучу тӀехьонашах кхета аьлла тешна хила.",
        "movepagetext-noredirectfixer": "Бухахь йолу форманца агӀон цӀе хийцало. Цул совнах цуьна хийцаман тептар кхоьчу метте доккха. Хьалхалера цӀарахь хиръю керла кхоьллина агӀонан хьажорг.\n\nХьовсалаш [[Special:DoubleRedirects|шалха]] а [[Special:BrokenRedirects|йохна хьажоргаш]] юй техь аьлла.\n\nШу жоьпехь ду хьажоргаш нийса некъ гойтуш хиларан.\n\nТидам бе хьалхалера агӀон цӀе ‘’’хийцалур яц’’’ иштта цӀе йолу агӀо йолуш елахь. Юкъардаккхар: йолуш йолу агӀо кхоьчухьа хьажорг елахь, я еса елахь а, цуьна хийцаме истори яцахь а.\n\nИ бохург ду шун агӀонан цӀе юха а хьалха хиллачун тӀе хийца йиш ю, амма йолуш йолу агӀо дӀаяккха йиш яц.\n\n'''ДӀАХЬЕДАР!'''\n\nЦӀе хийцар бахьнехь гӀаръяьлла агӀонашна дукха дагахь боцу хийцамаш хила тарло. Цундела цӀе хийцале шеш хила тарлучу тӀехьонашах кхета аьлла тешна хила.",
        "movepagetalktext": "ТӀе хӀоьттина йолу дийцаре агӀо ишта цӀе хийцина хира ю, '''цхьа йолу ханчохь, маца:'''\n\n*Йаьсса йоцу дийцаре агӀо йолуш ю оцу цӀарца йа\n*Ахьа къастаман харжам цабиняхь а къастам хӀотточехь.\n\nИшта чу ханчохь, ахьа дехьа яккха йезар ю йа куьйга хӀоттайар, нагахь иза хьашт йалахь.",
        "movecategorypage-warning": "<strong>ДӀахьедар:</strong> Хьо категорин агӀон цӀе хийца гӀерта. Дехар до, терго йе, хӀокху агӀона бен цӀе хуьйцур яц, шира чу категори чура массо агӀонаш керла категори чу йохур <em>яц</em>.",
        "movenologintext": "АгӀона цӀе хийца [[Special:UserLogin|системин чугӀо]].",
        "movenotallowed": "Хьан бакъо яц керла агӀонаш кхолла.",
-       "movenotallowedfile": "Хьан файлийн цӀераш хийца бакъо яц.",
-       "cant-move-user-page": "Хьан бакъо яц декъашхойн коьрта агӀонийн цӀераш хийца.",
+       "movenotallowedfile": "Хьан файлийн цӀерш хийца бакъо яц.",
+       "cant-move-user-page": "Хьан бакъо яц декъашхойн коьрта агӀонийн цӀерш хийца.",
        "cant-move-to-user-page": "Хьан бакъо яц агӀона цӀе декъашхочун агӀон тӀе хийца (бухара агӀон тӀе хийца мега).",
-       "cant-move-category-page": "Хьан категорийн цӀераш хийца бакъо яц.",
-       "cant-move-to-category-page": "Хьан категорийн цӀераш хийца бакъо яц.",
+       "cant-move-category-page": "Хьан категорийн цӀерш хийца бакъо яц.",
+       "cant-move-to-category-page": "Хьан категорийн цӀерш хийца бакъо яц.",
        "newtitle": "Керла цӀе",
        "move-watch": "Латайé хӀара агӀо тергаме могӀанан юкъахь",
        "movepagebtn": "АгӀон цӀе хийца",
        "movepage-moved-noredirect": "ДӀасхьажорг кхоллар дохина.",
        "articleexists": "ХӀарасанна цӀе йолу агӀо йолуш ю йа ахьа гойтуш йолу цӀе магош яц.\nДехар до, харжа кхин цӀе.",
        "movetalk": "Цуьнца йогӀуш йолу дийцаре агӀон цӀе хийцар",
-       "move-subpages": "ЦӀераш хийца бухара агӀонийн ($1 кхаччалц)",
+       "move-subpages": "ЦӀерш хийца бухара агӀонийн ($1 кхаччалц)",
        "move-talk-subpages": "ЦӀе хийца бухара агӀонийн а агӀонийн дийцаре а ($1  кхаччалц)",
        "movepage-page-exists": "Агӏо $1 йолуш ю цундела и ша юху дӏаязъян йиш яц.",
        "movepage-page-moved": "АгӀона $1 цӀе хийцина → $2.",
-       "movelogpage": "ЦӀераш хийцаран тептар",
+       "movelogpage": "ЦӀерш хийцаран тептар",
        "movelogpagetext": "Лахахьа гойтуш ю цӀе хийцина агӀонаш.",
        "movesubpage": "{{PLURAL:$1|1=Бухара агӀо|Бухара агӀонаш}}",
        "movesubpagetext": "ХӀокху агӀона $1 {{PLURAL:$1|1=бухара агӀо ю|бухара агӀонаш ю}}.",
        "immobile-source-page": "ХӀокху агӏона цӏе хийца йиш яц.",
        "bad-target-model": "Йиш яц хийца $1 оцу $2: цхьаьна ца догӀу моделин хаамаш.",
        "imagenocrossnamespace": "Кхечу цӀерийн меттигийн чура цӀе файлан тилла йиш яц",
-       "nonfile-cannot-move-to-file": "АгӀонийн цӀераш хийца йиш яц",
+       "nonfile-cannot-move-to-file": "АгӀонийн цӀерш файлан тайпа хийца йиш яц",
        "imagetypemismatch": "Файлан керла шоръелла оцунна тайпанца йогӀуш яц",
        "imageinvalidfilename": "Файлан цӀе гӀалате ю",
+       "fix-double-redirects": "Хьалхара цӀе йолу дӀасахьажорг нисъян",
        "move-leave-redirect": "Ӏадйита дӀасахьажораг",
        "protectedpagemovewarning": "'''ДӀахьедар.''' ХӀара агӀо гӀаролла йина ю; цӀе хийца я нисйа а бакъо йолуш куьйгалхой бе бац.\nЛахахьа тептаро балийна тӀаьхьаралера дӀаязбина хаам:",
        "semiprotectedpagemovewarning": "'''ДӀахьедо.''' ХӀара агӀо гӀаролла йина ю; дӀабазбиначу декъашхошка бе цӀе хийцалуш яц.\nЛахахьа тептаро балийна тӀаьхьаралера дӀаязбина хаам:",
        "import-interwiki-history": "ХӀокху агӀона ерриг хийцаман истори копи ян",
        "import-interwiki-templates": "Юкъайихка массо кепаш",
        "import-interwiki-submit": "Импорт ян",
-       "import-interwiki-namespace": "Коьрта цӀерийн ана:",
-       "import-interwiki-rootpage": "Коьрта агӀо (тӀехь дац):",
        "import-upload-filename": "Файлан цӀе:",
        "import-comment": "Билгалдаккхар:",
        "importstart": "АгӀонаш импорт яр…",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|верси импорт йина|версеш импорт йина}}",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|верси импорт йина|версеш импорт йина}} $2 чура",
        "javascripttest": "JavaScript хьажар",
-       "tooltip-pt-userpage": "Декъашхочуьна агlо",
+       "tooltip-pt-userpage": "Декъашхочун агӀо",
        "tooltip-pt-mytalk": "Сан дийцаре агlо",
        "tooltip-pt-preferences": "Хьан гlирс нисбар",
        "tooltip-pt-watchlist": "Ахьа тергам бо агӀонийн хийцаман могӀам",
        "tooltip-ca-nstab-media": "Медиа-файл",
        "tooltip-ca-nstab-special": "ХӀара белхан агӀо ю, хӀара тая луш яц",
        "tooltip-ca-nstab-project": "Кхолламан дакъа",
-       "tooltip-ca-nstab-image": "Ð¥lÑ\83ман Ð°Ð³lо",
+       "tooltip-ca-nstab-image": "Файлан Ð°Ð³Ó\80о",
        "tooltip-ca-nstab-mediawiki": "Хааман агlо MediaWiki",
-       "tooltip-ca-nstab-template": "Куцкепа агlо",
+       "tooltip-ca-nstab-template": "Кепан агӀо",
        "tooltip-ca-nstab-help": "ГӀоьна агӀо",
        "tooltip-ca-nstab-category": "Категорешан агӀо",
        "tooltip-minoredit": "Къастам бé хӀокху хийцамна кӀеззиг болуш санна",
        "tooltip-diff": "Гайта долуш долу йозанах бина болу хийцам.",
        "tooltip-compareselectedversions": "ХӀокху агӀона шина хаьржина версийн башхалле хьажар.",
        "tooltip-watch": "ТӀетоха хӀара агӀо сан тергаме могӀанан юкъа",
-       "tooltip-watchlistedit-normal-submit": "Билгалйина цӀераш дӀаяха",
+       "tooltip-watchlistedit-normal-submit": "Билгалйина цӀерш дӀаяха",
        "tooltip-watchlistedit-raw-submit": "Тергаме могӀам карлабаккха",
        "tooltip-recreate": "АгӀо дӀаяьккхина хиларе ца хьоьжуш меттахӀоттае агӀо",
        "tooltip-upload": "Доладе чуяккхар",
        "exif-urgency-other": "Декъашхочо билгалйина приоритет ($1)",
        "namespacesall": "массо",
        "monthsall": "массо",
-       "confirmemail": "ЭлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\87тан адрес бакъдар",
-       "confirmemail_noemail": "Ð\90Ñ\85Ñ\8cа Ð½Ð¸Ð¹Ñ\81а Ñ\8dлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\87тан адрес яздина дац [[Special:Preferences|гӀирсан чохь]].",
+       "confirmemail": "ЭлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\88тан адрес бакъдар",
+       "confirmemail_noemail": "Ð\90Ñ\85Ñ\8cа Ð½Ð¸Ð¹Ñ\81а Ñ\8dлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\88тан адрес яздина дац [[Special:Preferences|гӀирсан чохь]].",
        "confirmrecreate": "Декъашхочо [[User:$1|$1]] ([[User talk:$1|дийцаре]]) хӀара агӀо дӀаяьккхина, ахьа иза тая йолийча, дӀаяккхарна бахьна:\n: ''$2''\nДехар до, тешал де, хьо иза агӀо меттахӀотто лууш ву/ю але.",
        "confirmrecreate-noreason": "Декъашхочо [[User:$1|$1]] ([[User talk:$1|дийцаре]]) хӀара агӀо дӀаяьккхина, ахьа иза тая йолийча. Дехар до, тешал де, хьо иза агӀо меттахӀотто лууш ву/ю але.",
        "recreate": "Юха кхолла",
        "descending_abbrev": "йина",
        "table_pager_next": "ТӀаьхьа йогӀу агӀо",
        "table_pager_prev": "Хьалха йоьду агӀо",
-       "table_pager_first": "Ð\94Ñ\83Ñ\8cÑ\85Ñ\85Ñ\8cаÑ\80алеÑ\80а Ð°Ð³lо",
-       "table_pager_last": "Тlаьххьаралера агlо",
+       "table_pager_first": "Ð¥Ñ\8cалÑ\85аÑ\80а Ð°Ð³Ó\80о",
+       "table_pager_last": "ТӀаьххьра агӀо",
        "table_pager_limit": "Гайта $1 хlумнаш агlон тlаьхь",
        "table_pager_limit_label": "АгӀона чохь гойтуш ю оццул:",
        "table_pager_limit_submit": "Кхочушдé",
        "watchlistedit-normal-done": "Хьан тергаме могӀам чура {{PLURAL:$1|дӀадаьккхина|дӀадяьхна}} $1 {{PLURAL:$1|дӀаяздар|дӀаяздарш}}:",
        "watchlistedit-raw-title": "Тергаме могӀам йоза санна нисбар",
        "watchlistedit-raw-legend": "Тергаме могӀам нисбар",
-       "watchlistedit-raw-explain": "Лахахь гойтуш ю хьа тергаме могӀанийн юкъахь йолу агӀонаш. Хьан йиш ю могӀан хийцам ба, оьцу чура цӀераш тӀетухуш а дӀайохкуш а.\nХийцамаш бина баьлчи тӀетаӀе кнопка «{{int:Watchlistedit-raw-submit}}».\nХьа кхин йиш ю [[Special:EditWatchlist|лело стандартни тадар]].",
+       "watchlistedit-raw-explain": "Лахахь гойтуш ю хьа тергаме могӀанийн юкъахь йолу агӀонаш. Хьан йиш ю могӀан хийцам ба, оьцу чура цӀерш тӀетухуш а дӀайохкуш а.\nХийцамаш бина баьлчи тӀетаӀе кнопка «{{int:Watchlistedit-raw-submit}}».\nХьа кхин йиш ю [[Special:EditWatchlist|лело стандартни тадар]].",
        "watchlistedit-raw-titles": "ДӀаяздарш:",
        "watchlistedit-raw-submit": "МогӀам Ӏалашбар",
        "watchlistedit-raw-done": "Хьан тергаман могӀам Ӏалашбина",
        "specialpages-group-users": "Декъашхой а бакъонаш",
        "specialpages-group-highuse": "Уггаре дукха лелайо агӀонаш",
        "specialpages-group-pages": "АгӀонийн могӀанаш",
-       "specialpages-group-pagetools": "Ð\93Ó\80иÑ\80Ñ\81аÑ\88 Ð¾Ñ\86Ñ\83 Ð°Ð³Ó\80онийн",
+       "specialpages-group-pagetools": "Ð\93Ó\80иÑ\80Ñ\81аÑ\88 Ð°Ð³Ó\80онаÑ\88на",
        "specialpages-group-wiki": "Хаамаш а гӀирсаш а",
        "specialpages-group-redirects": "ДӀасахьажош йолу белхан агӀонаш",
        "specialpages-group-spam": "Спаман дуьхьала гӀирсаш",
-       "blankpage": "Ð\99аÑ\8cÑ\81Ñ\81а Ð°Ð³lо",
+       "blankpage": "Ð\95Ñ\81а Ð°Ð³Ó\80о",
        "tags": "Болш болу хийцаман къастам",
        "tag-filter": "Къастам [[Special:Tags|хьажар]]:",
        "tag-filter-submit": "Литта",
        "tags-deactivate-reason": "Бахьна:",
        "tags-deactivate-submit": "ДӀаяйа",
        "tags-edit-title": "Тегаш таян",
+       "tags-edit-manage-link": "Тегашна урхалладар",
+       "tags-edit-revision-selected": "{{PLURAL:$1|Хаьржина верси|Хаьржина версеш}} [[:$2]]:",
+       "tags-edit-revision-legend": "ТӀетоха я дӀаяха тегаш {{PLURAL:$1|this revision|all $1 revisions}} чура",
+       "tags-edit-logentry-legend": "ТӀетоха я дӀаяха тегаш {{PLURAL:$1|this log entry|all $1 log entries}} чура",
        "tags-edit-existing-tags": "Йолуш йолу билгалонаш:",
        "tags-edit-existing-tags-none": "''ХӀахӀа''",
        "tags-edit-new-tags": "Керла билгалонаш:",
+       "tags-edit-add": "ТӀетоха хӀара билгалонаш:",
+       "tags-edit-remove": "ДӀаяха хӀара билгалонаш:",
+       "tags-edit-remove-all-tags": "(дӀаяха массо билгалонаш)",
+       "tags-edit-chosen-placeholder": "Харжа цхьаъ я массийта тег",
        "tags-edit-reason": "Бахьна:",
+       "tags-edit-nooldid-title": "Ӏалашонан верси билгалйина яц",
        "comparepages": "АгӀонаш юстар",
        "compare-page1": "Дуьххьаралера агӀо",
        "compare-page2": "ШолгӀа агӀо",
        "logentry-upload-revert": "$1 {{GENDER:$2|чуяьккхина}} $3",
        "log-name-managetags": "Билгалонашан урхалладаран тептар",
        "logentry-managetags-create": "$1 {{GENDER:$2|Кхоьллина}} билгало «$4»",
+       "log-name-tag": "Билгалонийн тептар",
        "rightsnone": "(яц)",
        "revdelete-summary": "хийцамах лаьцна",
        "feedback-adding": "АгӀона хетарг тӀетохар...",
index 2eecb5c..051c7de 100644 (file)
        "permalink": "بەستەری ھەمیشەیی",
        "print": "چاپ",
        "view": "بینین",
+       "view-foreign": "لە $1دا بیبینە",
        "edit": "دەستکاری",
        "create": "دروستکردن",
        "editthispage": "دەستکاری ئەم پەڕەیە بکە‌",
        "mycustomjsprotected": "دەسەڵاتی دەستکارییکردنی ئەم پەڕەی JavaScript ـەت نییە.",
        "myprivateinfoprotected": "دەسەڵاتی دەستکارییکردنی زانیارییە تایبەتییەکانی خۆتت نییە.",
        "mypreferencesprotected": "دەسەڵاتی دەستکارییکردنی هەڵبژاردنەکانی خۆتت نییە.",
-       "ns-specialprotected": "تۆ ناتوانی لاپەڕە تایبەتەکان دەستکاریی بکەی.",
+       "ns-specialprotected": "پەڕە تایبەتەکان دەستکاری ناکرێن.",
        "titleprotected": "ئەم سەرناوە پارێزراوە لە دروستکران لە لایەن [[User:$1|$1]].\nھۆکاری ئەمە بریتیە لە \"''$2''\".",
        "invalidtitle-knownnamespace": "سەردێڕی نادروست بە بۆشایی ناوی «$2» و دەقی «$3»",
        "invalidtitle-unknownnamespace": "سەردێڕی هەڵە لەگەڵ ناوەبۆشایی نەناسراوی ژمارە $1 و دەقی \"$2\"",
        "preview": "پێشبینین",
        "showpreview": "پێشبینین نیشان بدە",
        "showdiff": "گۆڕانکارییەکان نیشان بدە",
-       "anoneditwarning": "'''ھۆشیار بە:''' نەچوویتە ژوورەوە.\nناونیشانی IPی تۆ لە مێژووی دەستکارییەکانی ئەم پەڕەیەدا تۆماردەکرێت.",
+       "anoneditwarning": "<strong>ھۆشیار بە:</strong> نەڕۆیشتووتەتە ژوورەوە. ھەر دەستکارییەک بکەیت ناونیشانی IPیەکەت بۆ ھەموو کەسێک دیار دەبێت. بەڵام ئەگەر <strong>[$1 بچیتە ژوورەوە]</strong> یان <strong>[$2 ھەژمارێک دروست بکەیت]</strong>، دەستکارییەکانت بە ناوی بەکارھێنەرییەکەتەوە بڵاو دەبێتەوە و لە چەند قازانجی تریشی ھەیە.",
        "anonpreviewwarning": "«نەڕۆشتوویتە ژوورەوە. پاشەکەوتکردن، ئەدرەسی IPەکەت لە مێژووی دەستکاریی ئەم پەڕە تۆمار دەکات.»",
        "missingsummary": "'''وە بیر خستنەوە:''' پوختەیەکت نەنووسیوە بۆ چۆنیەتی گۆڕانکارییەکەت.\nئەگەر جارێکی تر پاشکەوت کردن لێبدەی، بێ پوختە تۆمار دەکرێ.",
        "missingcommenttext": "تکایە لە خوارەوە شرۆڤەیەک بنووسە.",
        "userrights-unchangeable-col": "ئەو گرووپانەی ناتوانی بیگۆڕی",
        "group": "گرووپ:",
        "group-user": "بەکارھێنەران",
-       "group-autoconfirmed": "بەکارھێنەرانی پەسندکراوی خۆگەڕ",
+       "group-autoconfirmed": "بەکارھێنەرە خۆبەخۆ پەسندکراوەکان",
        "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": "بۆت",
        "group-sysop-member": "{{GENDER:$1|بەڕێوەبەر}}",
        "group-bureaucrat-member": "{{GENDER:$1|بیوروکرات}}",
        "group-suppress-member": "{{GENDER:$1|چاودێر}}",
        "grouppage-user": "{{ns:project}}:بەکارھێنەران",
-       "grouppage-autoconfirmed": "{{ns:project}}:بەکارھێنەرانی پەسندکراوی خۆگەڕ",
+       "grouppage-autoconfirmed": "{{ns:project}}:بەکارھێنەرە خۆبەخۆ پەسندکراوەکان",
        "grouppage-bot": "{{ns:project}}:بۆت",
        "grouppage-sysop": "{{ns:project}}:بەڕێوەبەران",
        "grouppage-bureaucrat": "{{ns:project}}:بیوروکراتەکان",
        "action-deleterevision": "سڕینەوەی ئەم پێداچوونەوەیە",
        "action-deletedhistory": "دیتنی مێژووی سڕاوەی ئەم پەڕەیە",
        "action-browsearchive": "گەران لە نێو لاپەڕە سڕاوەکان",
-       "action-undelete": "گەڕانەوەی ئەم لاپەڕە",
+       "action-undelete": "گەڕاندنەوەی ئەم پەڕەیە",
        "action-suppressrevision": "چاوپێداخشان و هاردنوەی ئەم لاپەڕە شاراوە",
        "action-suppressionlog": "دیتنی ئەم لۆگە ئەهلیە",
        "action-block": "بەربەست کردنی ئەم بەکارهێنەرە بۆ دەستکاری‌کردن",
        "rcshowhideanons": "بەکارھێنەرە نەناسراوەکان $1",
        "rcshowhideanons-show": "نیشان بدە",
        "rcshowhideanons-hide": "بشارەوە",
-       "rcshowhidepatr": "گۆرانکارییە پاس دراوەکان $1",
+       "rcshowhidepatr": "دەستکارییە پشکێنراوەکان $1",
        "rcshowhidepatr-show": "نیشان بدە",
        "rcshowhidepatr-hide": "بیشارەوە",
        "rcshowhidemine": "دەستکارییەکانم $1",
        "hide": "بشارەوە",
        "show": "نیشان بدە",
        "minoreditletter": "ب",
-       "newpageletter": "ن",
-       "boteditletter": "بۆ",
+       "newpageletter": "نوێ",
+       "boteditletter": "بۆت",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|بەکارھێنەر}}ی چاودێر]",
        "rc_categories": "بەرتەسک‌کردنەوە بە هاوپۆلەکان (به «|» جیای بکەوە‌)",
        "rc_categories_any": "هەرکام",
        "protectedpages-page": "پەڕە",
        "protectedpages-params": "پارامەترەکانی پاراستن",
        "protectedpages-reason": "ھۆکار",
-       "protectedtitles": "سەردێڕە پارێزراوەکان",
+       "protectedtitles": "سەرناوە پارێزراوەکان",
        "protectedtitlesempty": "ھیچ سەرناوێک بەم سنوورانەوە ئێستا نەپارێزراوە.",
        "listusers": "پێرستی بەکارھێنەران",
        "listusers-editsonly": "تەنیا ئەو بەکارھێنەرانە نیشان بدە کە دەستکارییان کردووە",
        "suppress": "چاودێری",
        "booksources": "سەرچاوەکانی کتێب",
        "booksources-search-legend": "بۆ سەرچاوەی کتێب بگەڕێ",
+       "booksources-search": "بگەڕێ",
        "booksources-text": "لە خوارەوە لیستێک لە بەستەر بۆ ماڵپەڕهایەک کە کتێبی نوێ و بەکارهێنراو دەفرۆشێت و لەوانەیە لەوێ زانیاریی زیاترت دەست‌کەوێت سەبارەت بەو کتێبانەی لە دووی دەگەڕیت:",
        "booksources-invalid-isbn": "ISBN دراو لەوە ناچی بەکار بێت، سەرنج بدە لە کاتی کۆپی کردن لە سەرچاوە تووشی هەڵە نوبوبێت.",
        "specialloguserlabel": "بەجێھێنەر:",
        "listusers-submit": "نیشانیبدە",
        "listusers-noresult": "ھیچ بەکارھێنەرێک نەدۆزرایەوە.",
        "listusers-blocked": "(بەربەست کراوە)",
-       "activeusers": "پێرستی بەکارھێنەرانی چالاک",
+       "activeusers": "پێرستی بەکارھێنەرە چالاکەکان",
        "activeusers-intro": "ئەمە لیستێکی ئەو بەکارھێنەرانەیە کە لە  $1 {{PLURAL:$1|ڕۆژ|ڕۆژ}}ی ڕابردوودا بە جۆرێک چالاکییەکیان ھەبووە.",
        "activeusers-count": "$1 {{PLURAL:$1|کردەوە}} لە دوایین {{PLURAL:$3|ڕۆژ|$3 ڕۆژ}}دا",
        "activeusers-from": "نیشاندانی بەکارھێنەران بە دەستپێکردن لە:",
        "ipusubmit": "لابردنی ئەم بەربەستە",
        "unblocked": "[[User:$1|$1]] لە بەربەست دەرهێنرا",
        "unblocked-id": "بەربەستی $1 لابرا",
-       "blocklist": "بەکارھێنەرانی بەربەسراو",
+       "blocklist": "بەکارھێنەرە بەربەستکراوەکان",
        "ipblocklist": "بەکارھێنەرە بەربەستکراوەکان",
        "ipblocklist-legend": "دۆزینەوەی بەکارهێنەرێکی بەربەست‌کراو",
        "blocklist-userblocks": "ھەژمارە بەربەستکراوەکان بشارەوە",
        "proxyblockreason": "ناونیشانی ئای‌پی تۆ بەربەست‌کراوە لەبەر ئەوەی پرۆکسیەکی کراوەیە.\nتکایە پەیوەندی بکە بە دابینکەری خزمەتی ئینتەرنەتی خۆت یان پاڵپشتی تەکنیکی و ئاگادریان کەوە لەو کێشە ئەمنیە گرینگە.",
        "sorbsreason": "ناونیشانی ئای‌پی تۆ لە DNSBLدا کە {{SITENAME}} کەڵکی لێ‌وەر دەگرێ، وەک پرۆکسیەکی کراوە لیست کراوە.",
        "sorbs_create_account_reason": "ناونیشانی ئای‌پی تۆ لە DNSBLدا کە {{SITENAME}} کەڵکی لێ‌وەر دەگرێ، وەک پرۆکسیەکی کراوە لیست کراوە.\nبۆیە ناتوانی هەژمارە درووست‌بکەی.",
-       "ipbblocked": "ناتوانی بەکارھێنەرانی تر بەربەست بکەی یان بکەیەوە، چون خۆت بەربەست کراوی.",
+       "ipbblocked": "ناتوانی بەکارھێنەرانی تر بەربەست بکەیت یان بکەیتەوە، چونکوو خۆت بەربەست کراوی.",
        "lockdb": "داخستنی بنکەدراوە",
        "unlockdb": "کردنەوەی بنکەدراوە",
        "lockdbtext": "داخستنی بنکەدراوە ئەبێتە هۆی ڕاگرتنی توانای هەموو بەکارهێنەران بۆ دەستکاری لاپەڕەکان، گۆڕانی هەڵبژاردەکانیان، دەستکاری لیستی چاودێرییەکانیان و هەموو ئەموو ئەو شتانە وا پێویستی بە گۆرانکاری لە بنکەدراوە هەیە.\nتکایە ئەرخەیان بە ئەمە هەر ئەوەیە کە دەتەوێ بیکەی و دوای چاکسازیەکەت لەیادت بێ کە بنکەدراوەکە بکەیتەوە.",
        "delete_and_move_confirm": "بەڵێ، پەڕەکە بسڕەوه",
        "delete_and_move_reason": "سڕایەوە بۆ کردنەوەی ڕیگە بۆ گواستنەوە لە «[[$1]]»ەوە",
        "selfmove": "سەردێڕەکانی سەرچاوە و مەبەست یەکێکن؛\nناکرێ لاپەڕەیەک بۆ سەر خۆی‌ بگوازرێتەوە.",
-       "immobile-source-namespace": "گواستنەوەی لاپەڕە لە بۆشایی‌ناو \"$1\" ناکرێت.",
+       "immobile-source-namespace": "پەڕەکان لە بۆشاییی ناوی \"$1\"دا ناگوێزرێنەوە.",
        "immobile-target-namespace": "گواستنەوەی لاپەڕە بۆناو بۆشایی‌ناو \"$1\" ناکرێت.",
        "immobile-target-namespace-iw": "بەستەرێکی نێوان‌ویکی ئامانجێکی گونجاو نیە بۆ گواستنەوەی لاپەڕە.",
        "immobile-source-page": "ئەمە لاپەڕە بۆ گواستنەوە نابێت.",
        "import-interwiki-history": "هەموو مێژووی پێداچوونەوەکانی ئەم پەڕەیە کۆپی بکە",
        "import-interwiki-templates": "ھەموو داڕێژەکان لەخۆبگرێتەوە",
        "import-interwiki-submit": "هاوردە بکە",
-       "import-interwiki-namespace": "بۆشاییی ناوی مەبەست:",
-       "import-interwiki-rootpage": "پەڕەی بنەڕەتیی مەبەست (دڵخوازانە):",
        "import-upload-filename": "ناوی پەڕگە‌:",
        "import-comment": "بۆچوون:",
        "importtext": "تکایە پەڕگەکە لە ویکی سەرچاوەوە بە کەڵک وەرگرتن لە [[Special:Export|ئامێری ھەناردن]] ھەناردە بکە.\nلەسەر کۆمپیۆتەرەکەت پاشەکەوتی بکە و لێرە باری بكە.",
        "spamprotectionmatch": "ئەم دەقە ئەوەیە کە پاڵێوی سپامەکە دەبزوێنێ: $1",
        "spambot_username": "خاوێنکردنەوەی سپامی میدیاویکی",
        "spam_reverting": "گەڕانەوە بۆ دوایین پێداچوونەوە کە بەستەری لەخۆگرتووە بۆ $1",
+       "simpleantispam-label": "پشکنینی دژەھەرزە.\nئەمە پڕ <strong>مەکەرەوە</strong>!",
        "pageinfo-title": "زانیاری بۆ «$1»",
        "pageinfo-header-basic": "زانیاریی سەرەتایی",
        "pageinfo-header-edits": "مێژووی دەستکاری",
        "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-imagelength": "بەرزی",
+       "exif-orientation": "ئاڕاستە",
        "exif-ycbcrpositioning": "شوێنی Y و C",
        "exif-datetime": "ڕێکەوتی و کاتی گۆڕانی پەڕگە",
        "exif-imagedescription": "ناونیشانی وێنە",
+       "exif-make": "بەرھەمھێنەری کامێرا",
        "exif-model": "جۆری کامێرا",
        "exif-software": "نەرمەواڵەی بەکارهاتوو",
        "exif-artist": "نووسەر",
        "exif-pixelxdimension": "بەرزی وێنە",
        "exif-usercomment": "بۆچوونەکانی بەکارهێنەر",
        "exif-relatedsoundfile": "فایلی ده‌نگی لێکچوو",
+       "exif-datetimedigitized": "ڕێکەوت و کاتی بە دیجیتاڵی کردن",
        "exif-exposuretime-format": "$1 چرکە ($2)",
        "exif-fnumber": "ڕێژەی ئێف",
        "exif-lightsource": "سەرچاوەی ڕووناکی",
        "tag-filter-submit": "پاڵاوتن",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|تاگ|تاگەکان}}]]: $2)",
        "tags-title": "تاگەکان",
-       "tags-intro": "ئÛ\95Ù\85 Ù\84اپÛ\95Ú\95Û\95 Ø¦Û\95Ù\88 ØªØ§Ú¯Ø§Ù\86Û\95Û\8c Ù\84Û\8cست Ø¯Û\95کات Ú©Û\95 Ù\84Û\95Ù\88اÙ\86Û\95Û\8cÛ\95 Ù\86Û\95رÙ\85اÙ\85Û\8eر Ø¯Û\95ستکارÛ\8cÛ\95Ú©Û\8c Ø¨Û\86 Ù\86Û\8cشاÙ\86 Ø¨Ú©Ø§Øª Ù\88 Ù\85Û\95بÛ\95ستÛ\8c Ù\86Û\8cشاÙ\86 Ø¨Ø¯ات.",
+       "tags-intro": "ئÛ\95Ù\85 Ù¾Û\95Ú\95Û\95Û\8cÛ\95 Ù¾Û\8eرستÛ\8c Ù\86اÙ\88 Ù\88 Ù\85اÙ\86اÛ\8c Ø¦Û\95Ù\88 ØªØ§Ú¯Ø§Ù\86Û\95Û\8cÛ\95 Ú©Û\95 Ù\86Û\95رÙ\85اÙ\85Û\8eر Ù\84Û\95Ù\88اÙ\86Û\95Û\8cÛ\95 Ø¯Û\95ستکارÛ\8cÛ\8cÛ\95Ú©Û\8c Ù¾Û\8eÙ\88Û\95 Ø¯Û\8cارÛ\8c Ø¨Ú©ات.",
        "tags-tag": "ناوی تاگ",
-       "tags-display-header": "دÛ\8cÙ\85Û\95Ù\86 Ù\84Û\95سÛ\95ر Ù\84Û\8cستÛ\95کاÙ\86Û\8c Ú¯Û\86Ú\95اÙ\86",
-       "tags-description-header": "Ù¾Û\8eÙ\86اسÛ\95Û\8c ØªÛ\95Ù\88اÙ\88Û\8c Ù\85Û\95بÛ\95ست",
+       "tags-display-header": "دÛ\95رکÛ\95Ù\88تÙ\86Û\8c Ù\84Û\95 Ù¾Û\8eرستÛ\95کاÙ\86Û\8c Ú¯Û\86Ú\95اÙ\86کارÛ\8c",
+       "tags-description-header": "Ù\88Û\95سÙ\81Û\8c Ù\85اÙ\86اکÛ\95Û\8c Ø¨Û\95 ØªÛ\95Ù\88اÙ\88Û\8c",
        "tags-hitcount-header": "گۆڕانکاریە تاگ‌کراوەکان",
        "tags-active-yes": "بەڵێ",
        "tags-active-no": "نا",
index ca5bf07..f44d81f 100644 (file)
        "no-null-revision": "Nepodařilo se vytvořit novou prázdnou revizi stránky „$1“",
        "badtitle": "Neplatný název",
        "badtitletext": "Požadovaný název stránky byl neplatný, prázdný nebo obsahoval nesprávnou předponu mezijazykového či interwiki odkazu. Možná obsahoval znaky, které v názvu nejsou dovoleny.",
+       "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": "Název obsahuje interwiki odkaz",
+       "title-invalid-talk-namespace": "Požadovaný název stránky odkazuje na diskusní stránku, která neexistuje.",
+       "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 bajtů.",
+       "title-invalid-leading-colon": "Požadovaný název stránku 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.",
        "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 zamknul uživatel [[User:$1|$1]] s odůvodněním <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“",
        "import-interwiki-history": "Zkopírovat všechny historické verze této stránky",
        "import-interwiki-templates": "Zahrnout všechny šablony",
        "import-interwiki-submit": "Importovat",
-       "import-interwiki-namespace": "Cílový jmenný prostor:",
-       "import-interwiki-rootpage": "Cílová kořenová stránka (nepovinné):",
+       "import-mapping-default": "Importovat do implicitních umístění",
+       "import-mapping-namespace": "Importovat do jmenného prostoru:",
+       "import-mapping-subpage": "Importovat jako podstránky následující stránky:",
        "import-upload-filename": "Jméno souboru:",
        "import-comment": "Zdůvodnění:",
        "importtext": "Prosím exportujte soubor ze zdrojové wiki pomocí [[Special:Export|exportního nástroje]].\nUložte jej na svůj disk a nahrajte ho sem.",
        "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": "<strong>Změny byly úspěšně aplikovány.</strong>",
-       "tags-edit-failure": "<strong>Změny se nepodařilo provést:</strong>\n$1",
+       "tags-edit-success": "Změny byly úspěšně 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.",
        "tags-edit-none-selected": "Vyberte prosím nejméně jednu značku, kterou chcete přidat či odebrat.",
index 642e832..958a504 100644 (file)
        "faqpage": "Project:ЫйХу",
        "variants": "Вариантсем",
        "errorpagetitle": "Йăнăш",
-       "returnto": "$1 Ñ\81Ñ\82Ñ\80аниÑ\86Ä\83на Ñ\82авÑ\80Ä\83н.",
-       "tagline": "{{GRAMMAR:genitive|{{SITENAME}}}}ри материал",
+       "returnto": "$1 таврăн.",
+       "tagline": "{{SITENAME}}",
        "help": "Пулăшу",
        "search": "Шырамалли",
        "searchbutton": "Шыра",
        "create": "Çĕннине ту",
        "editthispage": "Страницăна тӳрлетесси",
        "create-this-page": "Ку страницăна хатĕрле",
-       "delete": "Кăларса пăрахасси",
+       "delete": "Кăларса пăрах",
        "deletethispage": "Хурат ăна",
        "undelete_short": "$1 тӳрлетӳсене каялла тавăр",
        "protect": "хӳтĕле",
        "jumptonavigation": "навигаци",
        "jumptosearch": "шырамалли",
        "aboutsite": "{{SITENAME}} çинчен",
-       "aboutpage": "Project:çинчен",
+       "aboutpage": "Project:Википеди çинчен",
        "copyright": "Ку ăшлăх $1 килĕшӳллĕн сарăлать.",
        "copyrightpage": "{{ns:project}}:Автор прависем",
        "currentevents": "Хыпарсем",
        "createacct-realname": "Чăн-чăн ят (пулсан)",
        "createacct-submit": "Аккаунт ту",
        "createacct-benefit-body1": "{{PLURAL:$1|тӳрлетни|тӳрлетнисем}}",
-       "createacct-benefit-body2": "{{PLURAL:$1|страница|страницасем}}",
+       "createacct-benefit-body2": "{{PLURAL:$1|страницă|страницăсем}}",
        "badretype": "Эсир кăтартнă парольсем пĕр пек мар.",
        "userexists": "Эсир усă курас теекен ята йышăннă. Тархасшăн, урăх ят суйласа илĕр.",
        "loginerror": "Хутшăнакана палласа илеймерĕмĕр",
        "editing": "$1 тӳрлетни",
        "creating": "$1 туни",
        "editingsection": "$1 тӳрлетни (статья пайĕ)",
-       "editingcomment": "$1 тӳрлетни (кӗске анлантарӑвӗ)",
+       "editingcomment": "$1 тӳрлетни (çĕнĕ пай)",
        "editconflict": "Тӳрлетнĕ вăхăтра тавлашу тухрĕ: $1",
        "yourtext": "Сирĕн текст",
        "storedversion": "Астуса хăварнă верси",
        "search-result-size": "$1 ({{PLURAL:$2|1 сăмах|$2 сăмах}})",
        "search-category": "(категори $1)",
        "search-interwiki-caption": "Тăван проектсем",
+       "search-interwiki-more": "(тата)",
        "search-relatedarticle": "Çыхăнă",
        "searchrelated": "çыхăнă",
        "showingresults": "Аяларах эсир <strong>$2</strong> пуçласа кăтартнă <strong>$1</strong> йĕркене куратăр.",
        "recentchanges": "Улшăнусем",
        "recentchanges-legend": "Çĕнĕ улшăнусен ĕнерлевĕ",
        "recentchanges-label-bot": "Ку улшăнăва бот тунă",
-       "recentchanges-legend-newpage": "$1 — çĕнĕ страница",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (пăхăр [[Special:NewPages|çĕнĕ страницăсен списокĕ]])",
        "recentchanges-legend-plusminus": "(<em>±123</em>)",
        "rclistfrom": "Юлашки улшăнусене $3 $2 вăхăтран пуçласа кăтартнă",
        "rcshowhideminor": "пĕчĕк тӳрлетнисене $1",
+       "rcshowhideminor-show": "кăтартмалла",
+       "rcshowhideminor-hide": "кăтартмалла мар",
        "rcshowhidebots": "ботсене $1",
-       "rcshowhidebots-show": "Кăтарт",
+       "rcshowhidebots-show": "кăтартмалла",
+       "rcshowhidebots-hide": "кăтартмалла мар",
        "rcshowhideliu": "сайта кĕнисене $1",
-       "rcshowhideanons": "ячĕсене палăртманскерсене $1",
+       "rcshowhideliu-show": "кăтартмалла",
+       "rcshowhideliu-hide": "кăтартмалла мар",
+       "rcshowhideanons": "Паллă маррисене $1",
+       "rcshowhideanons-show": "кăтартмалла",
+       "rcshowhideanons-hide": "кăтартмалла мар",
        "rcshowhidepatr": "тĕрĕсленĕ тӳрлетӳсене $1",
+       "rcshowhidepatr-show": "кăтартмалла",
+       "rcshowhidepatr-hide": "кăтартмалла мар",
        "rcshowhidemine": "хăвăн тӳрлетнисене $1",
+       "rcshowhidemine-show": "кăтартмалла",
+       "rcshowhidemine-hide": "кăтартмалла мар",
        "rclinks": "Юлашки $2 кун хушшинче тунă $1 улшăнусене кăтартмалла<br />$3",
        "diff": "танл.",
        "hist": "ист",
        "show": "Кăтартмалла",
        "minoreditletter": "п",
        "newpageletter": "Ç",
+       "boteditletter": "б",
+       "unpatrolledletter": "!",
        "rc_categories_any": "Кашни",
        "newsectionsummary": "/* $1 */ Çĕнĕ тема",
        "recentchangeslinked": "Çыхăннă улшăнусем",
        "nbytes": "$1 {{PLURAL:$1|байт|байтсем}}",
        "ncategories": "$1 {{PLURAL:$1|категори|категорисем}}",
        "nlinks": "$1 {{PLURAL:$1|1=каçă|каçă}}",
+       "nmembers": "$1 {{PLURAL:$1|тĕл|тĕлте}}",
        "nviews": "$1 {{PLURAL:$1|пăхни|пăхнисем}}",
        "specialpage-empty": "Ку страница пушă",
        "lonelypages": "Тăлăх страницăсем",
        "import": "Страницăсене импортласси",
        "importinterwiki": "Вики хушшинчи импорт",
        "import-interwiki-submit": "Импортирла",
-       "import-interwiki-namespace": "Страницăсене çак ят уçлăхне вырнаçтар:",
        "import-upload-filename": "Файл ячĕ:",
        "importnopages": "Импортламалли страницăсем çук.",
        "importnofile": "Импортламалли файла тиемен",
        "tooltip-watch": "Çак страницăна пăхса тăмаллисем шутне хуш",
        "tooltip-summary": "Кĕскĕн ăнлантарса парăр",
        "anonymous": "{{GRAMMAR:genitive|{{SITENAME}}}} анонимлă хутшăнакансем",
-       "lastmodifiedatby": "Ку страницăна юлашки хут $2, $1 вăхăтра $3 хутшăнакан улăштарнă.",
+       "siteuser": "{{SITENAME}} усă куракан $1",
+       "lastmodifiedatby": "Ку страницăна юлашки хут $2, $1 вăхăтра $3 улăштарнă.",
        "othercontribs": "$1 ĕçĕ çинче никĕсленнĕ.",
        "others": "ыттисем",
+       "siteusers": "{{SITENAME}} {{PLURAL:$2|усă куракан|усă куракансем}} $1",
        "creditspage": "Пархатарлăх",
        "spambot_username": "MediaWiki спамран тасатни",
        "pageinfo-title": "\"$1\" çинчен",
index d4c32c8..0611617 100644 (file)
        "import-interwiki-history": "Copïer yr holl fersiynau yn hanes y dudalen hon",
        "import-interwiki-templates": "Cynhwyser pob nodyn",
        "import-interwiki-submit": "Mewnforio",
-       "import-interwiki-namespace": "Parth y cyrchir ato:",
-       "import-interwiki-rootpage": "Tudalen wraidd y cyrchfan (dewisol):",
        "import-upload-filename": "Enw'r ffeil:",
        "import-comment": "Sylw:",
        "importtext": "Allforiwch y ffeil o'r wici gwreiddiol trwy ddefnyddio'r [[Special:Export|nodwedd allforio]]. Rhowch hi ar gadw ar eich cyfrifiadur, ac wedyn ei huwchlwytho fan hyn.",
index 6f3ab07..d936714 100644 (file)
        "searcharticle": "Gå til",
        "history": "Historik",
        "history_short": "Historik",
-       "updatedmarker": "opdateret siden sidste besøg",
+       "updatedmarker": "opdateret siden seneste besøg",
        "printableversion": "Udskriftsvenlig udgave",
        "permalink": "Permanent henvisning",
        "print": "Udskriv",
        "toolbox": "Værktøjer",
        "userpage": "Se brugersiden",
        "projectpage": "Se projektsiden",
-       "imagepage": "Se filsiden",
+       "imagepage": "Se filside",
        "mediawikipage": "Vise indholdsside",
        "templatepage": "Vise skabelonside",
        "viewhelppage": "Vise hjælpeside",
        "jumptonavigation": "Navigation",
        "jumptosearch": "Søgning",
        "view-pool-error": "Beklager, men serverne er i øjeblikket overbelastede.\nFor mange brugere prøver at se denne side.\nVent et øjeblik, før du prøver at besøge denne side igen.\n\n$1",
+       "generic-pool-error": "Beklager, men serverne er i øjeblikket overbelastede.\nFor mange brugere prøver at se denne side.\nVent et øjeblik før du prøver at besøge denne side igen.",
        "pool-timeout": "Timeout mens man venter på låsningen",
        "pool-queuefull": "Pool køen er fuld",
        "pool-errorunknown": "Ukendt fejl",
+       "poolcounter-usage-error": "Brugsfejl: $1",
        "aboutsite": "Om {{SITENAME}}",
        "aboutpage": "Project:Om",
        "copyright": "Indholdet er udgivet under $1 medmindre andet er angivet.",
        "readonly_lag": "Databasen er automatisk blevet låst mens slave database serverne synkronisere med master databasen",
        "internalerror": "Intern fejl",
        "internalerror_info": "Intern fejl: $1",
+       "internalerror-fatal-exception": "Alvorlig undtagelse af typen \"$1\"",
        "filecopyerror": "Kunne ikke kopiere filen \"$1\" til \"$2\".",
        "filerenameerror": "Kunne ikke omdøbe filen \"$1\" til \"$2\".",
        "filedeleteerror": "Kunne ikke slette filen \"$1\".",
        "badtitletext": "Den ønskede sides titel var ikke tilladt, tom eller siden er forkert henvist fra {{SITENAME}} på et andet sprog.\nDen kan indeholde et eller flere tegn, som ikke må anvendes i titler.",
        "perfcached": "Følgende data er gemt i cachen, der muligvis ikke er helt opdateret. Der gemmes højst {{PLURAL:$1|ét resultat|$1 resultater}} i cachen.",
        "perfcachedts": "Disse data stammer fra cachen, som senest blev opdateret $1. Der gemmes højst {{PLURAL:$4|ét resultat|$4 resultater}} i cachen.",
-       "querypage-no-updates": "'''Opdateringer til denne side er deaktiveret for øjeblikket. Dataene bliver indtil videre ikke fornyet.'''",
+       "querypage-no-updates": "Opdateringer til denne side er deaktiveret for øjeblikket. Dataene bliver indtil videre ikke fornyet.",
        "viewsource": "Vis kildetekst",
        "viewsource-title": "Se kildekoden til $1",
        "actionthrottled": "Begrænsning af handling",
        "viewsourcetext": "Du kan se og kopiere kildekoden til siden:",
        "viewyourtext": "Du kan se og kopiere kildekoden for '''dine redigeringer''' til denne side:",
        "protectedinterface": "Denne side indeholder teksten i brugergrænsefladen til softwaren på denne wiki, og er beskyttet for at forhindre misbrug.\nHvis du vil tilføje eller ændre oversættelser for alle wiki-websteder, så brug venligst [//translatewiki.net/ translatewiki.net], projektet for oversættelse af MediaWiki.",
-       "editinginterface": "'''Advarsel:''' Du redigerer en side som bruges i programmets grænseflade. Ændringer på denne side vil påvirke udseendet af grænsefladen for andre brugere af denne wiki.\nFor at tilføje eller ændre oversættelser på alle wikier bedes du benytte [//translatewiki.net/ translatewiki.net], projektet for oversættelse af MediaWiki.",
+       "editinginterface": "<strong>Advarsel:</strong> Du redigerer en side, som bruges til at give interface-tekst til softwaren.\nÆndringer på denne side vil påvirke udseendet af brugergrænsefladen for andre brugere på denne wiki.",
+       "translateinterface": "For at tilføje eller ændre oversættelser for alle wikier, skal du bruge [//translatewiki.net/ translatewiki.net], der er MediaWikis lokaliseringsprojekt.",
        "cascadeprotected": "Denne side er skrivebeskyttet, da den er indeholdt i nedenstående {{PLURAL:$1|side|sider}}, som er skrivebeskyttet med tilvalg af \"nedarvende sidebeskyttelse\":\n$2",
        "namespaceprotected": "Du har ikke rettigheder til at redigere sider i $1-navnerummet.",
        "customcssprotected": "Du har ikke tilladelse til at redigere denne CSS-side, da den indeholder en anden brugers personlige indstillinger.",
        "invalidtitle-knownnamespace": "Ugyldig titel med navnerummet \"$2\" og teksten \"$3\"",
        "invalidtitle-unknownnamespace": "Ugyldig titel med ukendt navnerum nummer $1 og tekst \"$2\"",
        "exception-nologin": "Ikke logget på",
-       "exception-nologin-text": "Du skal [[Special:Userlogin|logge på]] for at få adgang til denne side eller handling.",
+       "exception-nologin-text": "Du skal logge på for at få adgang til denne side eller handling.",
        "exception-nologin-text-manual": "Du skal $1 for at få adgang til denne side eller handling.",
        "virus-badscanner": "Konfigurationsfejl: ukendt virus-scanner: ''$1''",
        "virus-scanfailed": "virus-scan fejlede med fejlkode $1",
        "loginerror": "Logon mislykket",
        "createacct-error": "Fejl ved kontooprettelse",
        "createaccounterror": "Kunne ikke oprette brugerkonto: $1",
-       "nocookiesnew": "Din brugerkonto er nu oprettet, men du er ikke logget på. {{SITENAME}} bruger cookies til at logge brugere på. Du har slået cookies fra. Vær venlig at slå cookies til, og derefter kan du logge på med dit nye brugernavn og adgangskode.",
+       "nocookiesnew": "Din brugerkonto er nu oprettet, men du er ikke logget på. {{SITENAME}} bruger cookies til at logge brugere på.\nDu har slået cookies fra. \nVær venlig at slå cookies til og log derefter på med dit nye brugernavn og adgangskode.",
        "nocookieslogin": "{{SITENAME}} bruger cookies til at logge brugere på. Du har slået cookies fra. Slå dem venligst til og prøv igen.",
        "nocookiesfornew": "Denne brugerkonto er ikke oprettet, da vi ikke kunne bekræfte dens kilde.\nSørg for, at du har aktivereret cookies, genindlæs siden og prøv igen.",
        "noname": "Du har ikke angivet et gyldigt brugernavn.",
        "createaccount-text": "Nogen har oprettet en konto for din e-mailadresse på {{SITENAME}} ($4) med navnet \"$2\". Adgangskoden er \"$3\".\nDu opfordres til at logge på og ændre adgangskoden med det samme.\n\nDu kan ignorere denne besked hvis kontoen blev oprettet ved en fejl.",
        "login-throttled": "Du har forsøgt at logge på for mange gange.\nVent venligst $1, før du prøver igen.",
        "login-abort-generic": "Det lykkedes dig ikke at logge på - afbrudt",
+       "login-migrated-generic": "Din konto er blevet globaliseret, og dit brugernavn eksisterer ikke længere på denne wiki.",
        "loginlanguagelabel": "Sprog: $1",
        "suspicious-userlogout": "Din anmodning om at logge af blev nægtet, fordi det ser ud som den blev sendt af en ødelagt browser eller caching proxy.",
        "createacct-another-realname-tip": "Angivelse af rigtigt navn er valgfrit.\nHvis du vælger at oplyse dit navn, vil det blive brugt til at tilskrive dig dit arbejde.",
        "resetpass-submit-cancel": "Annuller",
        "resetpass-wrong-oldpass": "Ugyldig midlertidig eller gældende adgangskode.\nDu har muligvis allerede skiftet din adgangskode eller anmodet om en ny midlertidig kode.",
        "resetpass-recycled": "Vær venlig at ændre din adgangskode til noget andet end din nuværende adgangskode.",
-       "resetpass-temp-emailed": "Du loggede på med en midlertidig kode tilsendt på e-mail.\nFor at afslutte indlogning, skal du oprette en nyt adgangskode:",
+       "resetpass-temp-emailed": "Du loggede på med en midlertidig kode tilsendt på e-mail.\nFor at afslutte indlogning skal du angive en ny adgangskode her:",
        "resetpass-temp-password": "Midlertidig adgangskode",
        "resetpass-abort-generic": "Ændring af adgangskode er blevet afbrudt af en udvidelse",
        "resetpass-expired": "Din adgangskode er udløbet. Angiv en ny adgangskode for at logge på.",
        "media_tip": "Henvisning til fil",
        "sig_tip": "Din signatur med tidsstempel",
        "hr_tip": "Horisontal linje (brug den sparsomt)",
-       "summary": "Beskrivelse:",
+       "summary": "Sammenfatning:",
        "subject": "Emne/overskrift:",
        "minoredit": "Dette er en mindre ændring",
        "watchthis": "Overvåg denne side",
        "showpreview": "Forhåndsvisning",
        "showdiff": "Vis ændringer",
        "blankarticle": "<strong>Advarsel:</strong> Siden du opretter er tom.\nHvis du klikker på \"{{int:savearticle}}\" igen, vil siden blive oprettet uden indhold.",
-       "anoneditwarning": "'''Advarsel:''' Du er ikke logget på. I stedet for brugernavn vises din IP-adresse i versionshistorikken.",
+       "anoneditwarning": "<strong>Advarsel:</strong> Du er ikke logget på. Din IP-adresse vil blive offentligt tilgængelig, hvis du foretager nogen ændringer. Hvis du <strong>[$1 logger på]</strong> eller <strong>[$2 opretter en konto]</strong> vil dine redigeringer blive tilskrevet dit brugernavn, og du vil få flere andre fordele.",
        "anonpreviewwarning": "''Du er ikke logget på. Hvis du gemmer, registreres din IP-adresse i versionshistorikken.''",
        "missingsummary": "'''Bemærk:''' Du har ikke angivet en redigeringsbeskrivelse. Hvis du igen trykker på \"{{int:savearticle}}\", gemmes ændringerne uden en beskrivelse.",
+       "selfredirect": "<strong>Advarsel:</strong> Du er ved at omdirigere denne side til sig selv.\nDu kan have angivet det forkerte mål for omdirigeringen, eller du kan være ved at redigere den forkerte side.\nHvis du klikker på \"{{int:savearticle}}\" igen, vil omdirigeringen blive oprettet uanset dette.",
        "missingcommenttext": "Skriv venligst en kommentar nedenfor.",
        "missingcommentheader": "'''Bemærk:''' Du har ikke angivet en overskrift/emne for denne kommentar. Hvis du trykker \"{{int:savearticle}}\" én gang til, gemmes dine ændringer uden overskrift/emne.",
        "summary-preview": "Forhåndsvisning af beskrivelsen:",
        "subject-preview": "Forhåndsvisning af emnet:",
+       "previewerrortext": "Der opstod en fejl under forsøget på at lave en forhåndsvisning af dine ændringer.",
        "blockedtitle": "Du eller din IP-adresse er blokeret",
        "blockedtext": "'''Dit brugernavn eller din IP-adresse er blevet blokeret.'''\n\nBlokeringen er foretaget af $1.\nDen anførte grund er ''$2''.\n\nBlokeringen starter: $8\nBlokeringen udløber: $6\nBlokeringen er rettet mod: $7\n\nDu kan kontakte $1 eller en af de andre [[{{MediaWiki:Grouppage-sysop}}|administratorer]] for at diskutere blokeringen.\nDu kan ikke bruge funktionen 'e-mail til denne bruger' medmindre der er angivet en gyldig e-mailadresse i dine\n[[Special:Preferences|kontoindstillinger]], og du ikke er blevet blokeret fra at bruge den.\n\nDin nuværende IP-adresse er $3, og blokerings-id er #$5.\nAngiv venligst alle ovenstående detaljer ved henvendelser om blokeringen.",
        "autoblockedtext": "Din IP-adresse er blevet blokeret automatisk fordi den blev brugt af en anden bruger som er blevet blokeret af $1.\nBegrundelsen for det er:\n\n:''$2''\n\n* Blokeringsperiodens start: $8\n* Blokeringen udløber: $6\n* Blokeringen er ment for: $7\n\nDu kan kontakte $1 eller en af de andre [[{{MediaWiki:Grouppage-sysop}}|administratorer]] for at diskutere blokeringen.\n\nBemærk at du ikke kan bruge funktionen \"e-mail til denne bruger\" medmindre du har en gyldig e-mailadresse registreret i din [[Special:Preferences|brugerindstilling]], og du ikke er blevet blokeret fra at bruge den.\n\nDin nuværende IP-adresse er $3, og blokerings-id'et er #$5.\nAngiv venligst alle de ovenstående detaljer ved eventuelle henvendelser.",
        "prevn": "forrige {{PLURAL:$1|$1}}",
        "nextn": "næste {{PLURAL:$1|$1}}",
        "prevn-title": "Forrige $1 {{PLURAL:$1|resultat|resultater}}",
-       "nextn-title": "Næste $1 {{PLURAL:$1|resultat|resultater}}",
+       "nextn-title": "Næste {{PLURAL:$1|resultat|$1 resultater}}",
        "shown-title": "Vis $1 {{PLURAL:$1|resultat|resultater}} per side",
        "viewprevnext": "Vis ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-exists": "'''Der er en side med navnet \"[[:$1]]\" på denne wiki'''",
        "searchrelated": "relateret",
        "searchall": "alle",
        "showingresults": "Nedenfor vises <b>$1</b> {{PLURAL:$1|resultat|resultater}} startende med nummer <b>$2</b>.",
+       "search-showingresults": "{{PLURAL:$4|Resultat <strong>$1</strong> af <strong>$3</strong>|Resultat <strong>$1 - $2</strong> af <strong>$3</strong>}}",
        "search-nonefound": "Søgningen gav ingen resultater.",
        "powersearch-legend": "Avanceret søgning",
        "powersearch-ns": "Søg i navnerummene:",
        "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.",
-       "rclistfrom": "Vis nye ændringer startende fra $3 $2",
+       "rclistfrom": "Vis nye ændringer startende fra den $3 kl. $2",
        "rcshowhideminor": "$1 mindre ændringer",
        "rcshowhideminor-show": "Vis",
        "rcshowhideminor-hide": "Skjul",
        "recentchangeslinked": "Relaterede ændringer",
        "recentchangeslinked-feed": "Relaterede ændringer",
        "recentchangeslinked-toolbox": "Relaterede ændringer",
-       "recentchangeslinked-title": "Ændringer der relaterer til $1",
-       "recentchangeslinked-summary": "Denne specialside viser de seneste ændringer på de sider der henvises til. Sider på din overvågningsliste er vist med '''fed''' skrift.",
-       "recentchangeslinked-page": "Side:",
+       "recentchangeslinked-title": "Ændringer der relaterer til \"$1\"",
+       "recentchangeslinked-summary": "Dette er en liste over de seneste ændringer af sider, der linkes til fra en bestemt side (eller medlemmer af en bestemt kategori).\nSider på [[Special:Watchlist|din overvågningsliste]] er vist med '''fed''' skrift.",
+       "recentchangeslinked-page": "Sidenavn:",
        "recentchangeslinked-to": "Vis ændringer i sider der henviser til den angivne side i stedet",
        "upload": "Læg en fil op",
        "uploadbtn": "Læg en fil op",
        "duplicatesoffile": "Følgende {{PLURAL:$1|fil er en dublet|filer er dubletter}} af denne fil ([[Special:FileDuplicateSearch/$2|flere detaljer]]):",
        "sharedupload": "Denne fil er fra $1 og kan bruges af andre projekter.",
        "sharedupload-desc-there": "Denne fil er fra $1 og kan bruges på andre projekter.\nSe [$2 filbeskrivelsessiden] for nærmere information.",
-       "sharedupload-desc-here": "Denne fil er fra $1 og kan bruges på andre projekter.\nIndholdet på dens [$2 filbeskrivelsesside] er vist herunder.",
+       "sharedupload-desc-here": "Denne fil er fra $1 og kan bruges på andre projekter.\nIndholdet på dens [$2 filbeskrivelsesside] der er vist herunder.",
        "sharedupload-desc-edit": "Denne fil er fra $1 og kan bruges af andre projekter.\nMåske vil du redigere beskrivelsen på dens [$2 filbeskrivelsesside] der.",
        "sharedupload-desc-create": "Denne fil er fra $1 og kan bruges af andre projekter.\nMåske vil du redigere beskrivelsen på dens [$2 filbeskrivelsesside] der.",
        "filepage-nofile": "Der er ingen fil med det navn.",
        "import-interwiki-history": "Importer alle versioner af denne side",
        "import-interwiki-templates": "Inkluder alle skabeloner",
        "import-interwiki-submit": "Importer",
-       "import-interwiki-namespace": "Importer til navnerum:",
-       "import-interwiki-rootpage": "Destinationens stamside (valgfri):",
        "import-upload-filename": "Filnavn:",
        "import-comment": "Kommentar:",
        "importtext": "Eksportér filen fra kilde-wiki'en ved hjælp af [[Special:Export|eksporterings værktøjet]], gem den på din harddisk og upload den her.",
        "tooltip-pt-anonuserpage": "Brugersiden for den ip-adresse du redigerer som",
        "tooltip-pt-mytalk": "Din diskussionsside",
        "tooltip-pt-anontalk": "Diskussion om redigeringer fra denne ip-adresse",
-       "tooltip-pt-preferences": "Mine indstillinger",
+       "tooltip-pt-preferences": "Dine indstillinger",
        "tooltip-pt-watchlist": "Listen over sider du overvåger for ændringer.",
        "tooltip-pt-mycontris": "Liste over dine bidrag",
        "tooltip-pt-login": "Du opfordres til at logge på, men det er ikke obligatorisk.",
        "tooltip-search": "Søg på {{SITENAME}}",
        "tooltip-search-go": "Vis en side med præcis dette navn, hvis den findes",
        "tooltip-search-fulltext": "Søg efter sider der indeholder denne tekst",
-       "tooltip-p-logo": "Forsiden",
+       "tooltip-p-logo": "Besøg forsiden",
        "tooltip-n-mainpage": "Besøg forsiden",
        "tooltip-n-mainpage-description": "Besøg forsiden",
        "tooltip-n-portal": "Om projektet, hvad du kan gøre, hvor tingene findes",
        "tooltip-n-currentevents": "Find baggrundsinformation om aktuelle begivenheder",
        "tooltip-n-recentchanges": "Listen over de seneste ændringer i wikien.",
        "tooltip-n-randompage": "Gå til en tilfældig side",
-       "tooltip-n-help": "Hvordan gør jeg ...",
+       "tooltip-n-help": "Stedet hvor du finder hjælp",
        "tooltip-t-whatlinkshere": "Liste med alle sider som henviser hertil",
        "tooltip-t-recentchangeslinked": "Seneste ændringer i sider som denne side henviser til",
        "tooltip-feed-rss": "RSS-feed for denne side",
        "tooltip-t-specialpages": "Liste over alle specialsider",
        "tooltip-t-print": "Printervenlig udgave af denne side",
        "tooltip-t-permalink": "Permanent henvisning til denne version af denne side",
-       "tooltip-ca-nstab-main": "Se indholdet",
+       "tooltip-ca-nstab-main": "Se indholdssiden",
        "tooltip-ca-nstab-user": "Se brugersiden",
        "tooltip-ca-nstab-media": "Se mediasiden",
        "tooltip-ca-nstab-special": "Dette er en specialside; man kan ikke redigere sådanne sider",
        "tags": "Tags til sideversioner",
        "tag-filter": "[[Special:Tags|Tag]]filter:",
        "tag-filter-submit": "Filtrér",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tag|Tags}}]]: $2)",
        "tags-title": "Tags",
        "tags-intro": "Denne side oplister de tags som programmet kan mærke en redigering med, og deres betydning.",
        "tags-tag": "Tagnavn",
index 0c668e9..d3de755 100644 (file)
                        "לערי ריינהארט",
                        "✓",
                        "XenonX3",
-                       "Brackenheim"
+                       "Brackenheim",
+                       "Robby",
+                       "Andreasburmeister"
                ]
        },
        "tog-underline": "Links unterstreichen:",
        "tog-hideminor": "Kleine Änderungen in den „Letzten Änderungen“ ausblenden",
        "tog-hidepatrolled": "Kontrollierte Änderungen in den „Letzten Änderungen“ ausblenden",
        "tog-newpageshidepatrolled": "Kontrollierte Seiten bei den „Neuen Seiten“ ausblenden",
-       "tog-extendwatchlist": "Alle, und nicht nur die aktuellsten Änderungen in der Beobachtungsliste anzeigen",
+       "tog-extendwatchlist": "In der Beobachtungsliste alle Änderungen anzeigen, nicht nur die aktuellsten",
        "tog-usenewrc": "Änderungen auf „Letzte Änderungen“ und der Beobachtungsliste nach Seite gruppieren",
        "tog-numberheadings": "Überschriften automatisch nummerieren",
        "tog-showtoolbar": "Bearbeiten-Werkzeugleiste anzeigen",
        "no-null-revision": "Die neue Nullversion für die Seite „$1“ konnte nicht erstellt werden",
        "badtitle": "Ungültiger Titel",
        "badtitletext": "Der Titel der angeforderten Seite ist ungültig, leer oder ein ungültiger Sprachlink von einem anderen Wiki.",
+       "title-invalid-empty": "Der angeforderte Seitentitel ist leer oder enthält nur den Namen eines Namensraums.",
+       "title-invalid-utf8": "Der angeforderte Seitentitel enthält eine ungültige UTF-8-Sequenz.",
+       "title-invalid-interwiki": "Der Titel enthält einen Interwiki-Link",
+       "title-invalid-talk-namespace": "Der angeforderte Seitentitel bezieht sich auf eine Diskussionsseite, die nicht existieren kann.",
+       "title-invalid-characters": "Der angeforderte Seitentitel enthält ungültige Zeichen: „$1“.",
+       "title-invalid-relative": "Der Titel hat einen relativen Pfad. Relative Seitentitel (./, ../) sind ungültig, da sie durch Webbrowser oft unerreichbar sind.",
+       "title-invalid-magic-tilde": "Der angeforderte Seitentitel enthält eine ungültige Magische-Tilden-Sequenz (<nowiki>~~~</nowiki>).",
+       "title-invalid-too-long": "Der angeforderte Seitentitel ist zu lang. Er darf nicht länger als $1 Bytes in UTF-8-Kodierung sein.",
+       "title-invalid-leading-colon": "Der angeforderte Seitentitel enthält am Anfang einen ungültigen Doppelpunkt.",
        "perfcached": "Die folgenden Daten stammen aus dem Cache und sind möglicherweise nicht aktuell. Maximal {{PLURAL:$1|ein Ergebnis ist|$1 Ergebnisse sind}} im Cache verfügbar.",
        "perfcachedts": "Diese Daten stammen aus dem Cache. Der Zeitpunkt der letzten Aktualisierung: $2, $3 Uhr. Maximal {{PLURAL:$4|ein Ergebnis ist|$4 Ergebnisse sind}} im Cache verfügbar.",
        "querypage-no-updates": "Die Aktualisierungsfunktion dieser Seite ist zurzeit deaktiviert.\nDie Daten werden bis auf Weiteres nicht erneuert.",
        "passwordreset-capture-help": "Wenn du dieses Kästchen ankreuzt, wird die E-Mail-Nachricht mit dem temporären Passwort sowohl dir angezeigt als auch dem Benutzer zugesandt.",
        "passwordreset-email": "E-Mail-Adresse:",
        "passwordreset-emailtitle": "Benutzerkontoinformationen auf {{SITENAME}}",
-       "passwordreset-emailtext-ip": "Jemand mit der IP-Adresse $1, wahrscheinlich du selbst, hat eine Zurücksetzung deines\nPassworts bei {{SITENAME}} angefordert ($4). {{PLURAL:$3|Das folgende Benutzerkonto ist|Die folgenden Benutzerkonten sind}}\nmit dieser E-Mail-Adresse verknüpft:\n\n$2\n\n{{PLURAL:$3|Dieses temporäre Passwort läuft|Diese temporären Passwörter laufen}} innerhalb von {{PLURAL:$5|einem Tag|$5 Tagen}} ab.\nDu solltest dich anmelden und ein neues Passwort vergeben. Falls jemand anderes diese\nAnfrage getätigt hat oder du dich wieder an dein ursprüngliches Passwort erinnern kannst und es nicht länger\nändern möchtest, kannst du diese Nachricht ignorieren und weiterhin dein altes\nPasswort benutzen.",
+       "passwordreset-emailtext-ip": "Jemand mit der IP-Adresse $1, wahrscheinlich du selbst, hat eine Zurücksetzung deines Passworts bei {{SITENAME}} angefordert ($4). {{PLURAL:$3|Das folgende Benutzerkonto ist|Die folgenden Benutzerkonten sind}} mit dieser E-Mail-Adresse verknüpft:\n\n$2\n\n{{PLURAL:$3|Dieses temporäre Passwort läuft|Diese temporären Passwörter laufen}} innerhalb von {{PLURAL:$5|einem Tag|$5 Tagen}} ab.\nDu solltest dich anmelden und ein neues Passwort vergeben. Falls jemand anderes diese Anfrage getätigt hat oder du dich wieder an dein ursprüngliches Passwort erinnern kannst und es nicht länger ändern möchtest, kannst du diese Nachricht ignorieren und weiterhin dein altes Passwort benutzen.",
        "passwordreset-emailtext-user": "Benutzer $1 bei {{SITENAME}} hat eine Zurücksetzung deines Passworts bei {{SITENAME}} angefordert ($4). {{PLURAL:$3|Das folgende Benutzerkonto ist|Die folgenden Benutzerkonten sind}} mit dieser E-Mail-Adresse verknüpft:\n\n$2\n\n{{PLURAL:$3|Dieses temporäre Passwort läuft|Diese temporären Passwörter laufen}} innerhalb von {{PLURAL:$5|einem Tag|$5 Tagen}} ab. Du solltest dich anmelden und ein neues Passwort vergeben. Falls jemand anderes diese Anfrage getätigt hat oder du dich wieder an dein ursprüngliches Passwort erinnern kannst und es nicht ändern möchtest, kannst du diese Nachricht ignorieren und weiterhin dein altes Passwort benutzen.",
        "passwordreset-emailelement": "Benutzername: $1\nTemporäres Passwort: $2",
        "passwordreset-emailsent": "Eine Passwortzurücksetzungs-E-Mail wurde versandt.",
        "import-interwiki-history": "Alle Versionen dieser Seite importieren",
        "import-interwiki-templates": "Alle Vorlagen einschließen",
        "import-interwiki-submit": "Importieren",
-       "import-interwiki-namespace": "Zielnamensraum:",
-       "import-interwiki-rootpage": "Zielstammseite (optional):",
+       "import-mapping-default": "Zu den Standard-Speicherorten importieren",
+       "import-mapping-namespace": "In einen Namensraum importieren:",
+       "import-mapping-subpage": "Als Unterseiten der folgenden Seite importieren:",
        "import-upload-filename": "Dateiname:",
        "import-comment": "Grund:",
        "importtext": "Bitte die Datei über die Spezialseite [[Special:Export|Exportfunktion]] aus dem Quellwiki exportieren.\nDiese auf dem lokalen Rechner speichern und danach hier hochladen.",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|Version|Versionen}} importiert",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|Version|Versionen}} von $2 importiert",
        "javascripttest": "JavaScript-Test",
-       "javascripttest-pagetext-noframework": "Diese Seite ist JavaSkript-Tests vorbehalten.",
+       "javascripttest-pagetext-noframework": "Diese Seite ist JavaScript-Tests vorbehalten.",
        "javascripttest-pagetext-unknownframework": "Unbekanntes Framework „$1“.",
        "javascripttest-pagetext-unknownaction": "Unbekannte Aktion „$1“.",
        "javascripttest-pagetext-frameworks": "Bitte wähle eine der folgenden Prüfumgebungen aus: $1",
        "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": "<strong>Die Änderungen wurden erfolgreich angewandt.</strong>",
-       "tags-edit-failure": "<strong>Die Änderungen konnten nicht angewandt werden:</strong>\n$1",
+       "tags-edit-success": "Die Änderungen wurden erfolgreich 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.",
        "tags-edit-none-selected": "Bitte wähle mindestens eine hinzuzufügende oder zu entfernende Markierung aus.",
index e4f40e8..ef3efcf 100644 (file)
        "otherlanguages": "Zıwananê binan de",
        "redirectedfrom": "(Pele da $1 ra heteneyê)",
        "redirectpagesub": "Pela berdışi",
+       "redirectto": "Beno hetê:",
        "lastmodifiedat": "Ena pele tewr peyên roca $2, $1 de biya rocaniye.",
        "viewcount": "Ena pele {{PLURAL:$1|rae|$1 rey}} vêniya.",
        "protectedpage": "Pela pawıtiye",
        "preview": "Verqayt",
        "showpreview": "Verqayti bımocne",
        "showdiff": "Vurnayışan bımocne",
-       "anoneditwarning": "İqaz!: Şıma be hesabê xo nêkewtê cı. \nAdresê şımaê IP tarixê vırnayışê na pele de do qeyd bo.",
+       "anoneditwarning": "<strong>İqaz:</strong> Şıma be hesabê xo nêkewtê cı. \nAdresê şımayê IP tarixê vırnayışê na pele de do qeyd bo. Eke şıma <strong>[$1 cıkewê]</strong> ya zi <strong>[$2 hesab vırazê]</strong>, vurnayışê şıma be zewbina kare ra nameyê şıma rê bar beno.",
        "anonpreviewwarning": "\"Şıma be hesabê xo nêkewtê cı. Eke qeyd kerê, adresê şımaê IP tarixê vırnayışê na pele de do qeyd bo.\"",
        "missingsummary": "'''DİQET:''' Şıma jû xulasa nênuşte.\nEke şıma \"{{int:savearticle}}\" reyna bıtıknê, vırnayışê şıma bê xulasa qeyd beno.",
        "missingcommenttext": "Cêr de jû fıkır bınusên, şıma rê zehmet.",
        "currentrev": "Çımraviyarnayışo rocane",
        "currentrev-asof": "Revizyonanê peniyan, tarixê $1",
        "revisionasof": "Verziyonê roca $1ine",
-       "revision-info": "Vıraştena cı karber $2 ra rewizyona $1",
+       "revision-info": "Vurnayışo ke $1 de terefê {{GENDER:$6|$2}}$7 ra biyo",
        "previousrevision": "← Çımraviyarnayışo kıhanêr",
        "nextrevision": "Rewizyono newên →",
        "currentrevisionlink": "Tewr halê rocaniye bımocne",
        "searchall": "pêro",
        "showingresults": "#<strong>$2</strong> netican ra {{PLURAL:$1|<strong>1</strong> netice cêr dero|<strong>$1</strong> neticey cêr derê}}.",
        "showingresultsinrange": "{{PLURAL:$1|<strong>1</strong> netice|<strong>$1</strong> neticey}} be mabeynê #<strong>$2</strong> ra be #<strong>$3</strong> cêr asenê.",
+       "search-showingresults": "{{PLURAL:$4|Netice <strong>$1</strong> be <strong>$3</strong>|Neticeyi <strong>$1 - $2</strong> be <strong>$3</strong>}}",
        "search-nonefound": "Zey perskerdışê şıma netice nêvêniya.",
        "powersearch-legend": "Cıgeyrayışo hera",
        "powersearch-ns": "Cayanê nameyan de cıgeyrayış:",
        "import-interwiki-history": "Qeydanê pele pêrune kopya ke",
        "import-interwiki-templates": "Şablonan pêro zerre ke",
        "import-interwiki-submit": "Zerre ke",
-       "import-interwiki-namespace": "Hedefê cayê nameyi:",
-       "import-interwiki-rootpage": "Hedef pelaya reçi (opsiyonel):",
        "import-upload-filename": "Nameyê dosyayi:",
        "import-comment": "Mışewre:",
        "importtext": "Kerem ke dosyay, çımeyê wiki ra pê [[Special:Export|kırıştışê teberdayişi]] bıdê teber, Komputerê xo de qeyd kerê u bar kerê tiya.",
        "logentry-rights-rights": "$1 qandê $3 rê ezayiya grube $4 ra $5 {{GENDER:$2|vuriye}}",
        "logentry-rights-rights-legacy": "$1 qandê $3 rê ezayiya grube {{GENDER:$2|vuriye}}",
        "logentry-rights-autopromote": "$1 otomatikmen $4 ra $5 {{GENDER:$2|terfi bi}}",
+       "logentry-upload-upload": "$1 {{GENDER:$2|bar kerd}} $3",
        "rightsnone": "(çıniyo)",
        "revdelete-summary": "kılmvatışê vuriyayişi",
        "feedback-adding": "Pela rê peyxeberdar defêno...",
index 295db5a..feab412 100644 (file)
        "import-interwiki-history": "Importěruj wšykne wersije toś togo boka",
        "import-interwiki-templates": "Wše pśedłogi zapśěgnuś",
        "import-interwiki-submit": "Importěrowaś",
-       "import-interwiki-namespace": "Celowy mjenjowy rum:",
-       "import-interwiki-rootpage": "Celowy kórjenjowy bok (opcionalny):",
        "import-upload-filename": "Datajowe mě:",
        "import-comment": "Komentar:",
        "importtext": "Eksportěruj pšosym dataju ze žredlowego wikija z pomocu [[Special:Export|eksporteje funkcije]]. Składuj ju na swójom licadle a nagraj ju sem.",
index e788f0d..ac0a415 100644 (file)
        "history-feed-description": "Stòria 'd la pàgina in sém a cól sî ché",
        "history-feed-item-nocomment": "$1 al $2",
        "history-feed-empty": "La pàgina serchêda l'an gh'é mìa; la pré èser stēda scanşlêda dal sît o gh'é stê cambiê nòm. Verifichêr cun [[Special:Search|pàgina 'd sèirca]] se gh'é dal pàgini nōvi.",
+       "history-edit-tags": "Mudéfica 'l j etichèti dal versiòun sgnêdi",
        "rev-deleted-comment": "(argumèint ed la mudéfica armôs)",
        "rev-deleted-user": "(nòm utèint armôs)",
        "rev-deleted-event": "(particulêr dal log armôs)",
        "revdelete-unsuppress": "Tó via i lémit al revisiòun armési",
        "revdelete-log": "Mutîv:",
        "revdelete-submit": "Drōva {{PLURAL:$1|int la revisiòun sernîda|int al revisiòun sernîdi}}",
-       "revdelete-success": "<strong>Vésta ed la revisòun arnuvêda int al môd gióst.</strong>",
-       "revdelete-failure": "<strong>La vésta 'd la versiòun l'an pōl mìa èser arnuvêda:</strong>\n$1",
-       "logdelete-success": "<strong>Vésta dal fât impustêda int al môd gióst.</strong>",
-       "logdelete-failure": "<strong>La vésta dal fât l'an pōl mìa èser impustêda:</strong>\n$1",
+       "revdelete-success": "Vésta ed la revisòun arnuvêda int al môd gióst.",
+       "revdelete-failure": "La vésta 'd la versiòun l'an pōl mìa èser arnuvêda:\n$1",
+       "logdelete-success": "Vésta dal fât impustêda int al môd gióst.",
+       "logdelete-failure": "La vésta dal fât l'an pōl mìa èser impustêda:\n$1",
        "revdel-restore": "Câmbia la vidûda.",
        "pagehist": "Stòria 'd la pàgina",
        "deletedhist": "Stòria scanşlêda",
        "right-sendemail": "Spidés pôsta eletrônica a êter utèint",
        "right-passwordreset": "A vèd i mesâg 'd arnōv ed la cêva 'ed ingrès",
        "right-managechangetags": "Fà e tó via i [[Special:Tags|tag]] dal databêş",
+       "right-applychangetags": "Tâca dal [[Special:Tags|tichèti]] al tō mudéfichi",
+       "right-changetags": "Zûta e tó via [[Special:Tags|tichèti]] precîşi só versiòun ónichi o vōş ed regéster",
        "newuserlogpage": "Utèint nōv",
        "newuserlogpagetext": "Ché sòt a gh' é la lésta di nōv utèint.",
        "rightslog": "Diré ed j utèint",
        "action-editmyprivateinfo": "mudéfica al tō infurmasiòun personêli",
        "action-editcontentmodel": "câmbia al mudèl dèinter a 'na pàgina",
        "action-managechangetags": "fà e tó via i tag dal databêş",
+       "action-applychangetags": "tachêr dal tichèti al tō mudéfichi",
+       "action-changetags": "zuntêr o tōr via tichèti precîşi só versiòun ónichi o vōş ed regéster",
        "nchanges": "$1\n{{PLURAL:$1|mudéfica|mudéfichi}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|da l'ûltma vîşita}}",
        "enhancedrc-history": "stòria",
        "backend-fail-backup": "An n'é mìa pusébil fêr 'na côpia 'd sicurèsa dal file $1.",
        "backend-fail-notexists": "Al file $1 al gh'é mìa.",
        "backend-fail-hashes": "An n'é mìa pusébil utgnîr la divisiòun di file per cunfrûnt.",
+       "backend-fail-notsame": "A gh'é bèle un file mìa cumpâgn a \"$1\"",
+       "backend-fail-invalidpath": "\"$1\" an n'é mìa un percōrs vâlid per archiviêr.",
+       "backend-fail-delete": "An n'é mìa pusébil scanşlêr al file \"$1\".",
+       "backend-fail-describe": "Imposébil mudifichêr al j infurmasiòun dal file \"$1\".",
+       "backend-fail-alreadyexists": "Al file \"$1\" al gh'é bèle.",
+       "backend-fail-store": "Impusébil mèter in memôria al file \"$1\" in \"$2\".",
+       "backend-fail-copy": "An n'é mìa pusébil cupiêr al file \"$1\" in \"$2\".",
+       "backend-fail-move": "An n'é mìa pusébil spustêr al file \"$1\" in \"$2\".",
+       "backend-fail-opentemp": "L'é impusébil arvîr un file pruvişôri.",
+       "backend-fail-writetemp": "L'é impusébil fêr al file pruvişôri.",
+       "backend-fail-closetemp": "L'é impusébil sarêr un file pruvişôri.",
+       "backend-fail-read": "An n'é mìa pusébil lēzer al file \"$1\".",
+       "backend-fail-create": "An n'é mìa pusébil fêr al file \"$1\".",
+       "backend-fail-maxsize": "L'é impusébil fêr al file \"$1\" perché l'é pió grôs ed {{PLURAL:$2|un|$2}} byte.",
+       "backend-fail-readonly": "Al prugrâma 'd memôria \"$1\" adèsa a 's pōl sōl lēzer. La ragiòun dêda l'é: \"$2\".",
+       "backend-fail-synced": "Al file \"$1\" l'é in un stêt mìa lôgich cun al sistēma 'd la memôria intêrna.",
+       "backend-fail-connect": "Impusébil coleghêres al sistēma 'd memôria \"$1\".",
+       "backend-fail-internal": "É sucès un erōr mìa cgnusû int al sistēma  ed memôria \"$1\".",
+       "backend-fail-contenttype": "Impusébil stabilîr al gèner di file 'd archiviêr in \"$1\".",
+       "backend-fail-batchsize": "Al sistēma 'd memōria l'à dê  un totêl ed \"$1\" 'd {{PLURAL:$1|operazione|operasiòun}} 'd archévi; al lémit l' é 'd \"$2\"  'd {{PLURAL:$2|operazione|operasiòun}}.",
+       "backend-fail-usable": "Impusébil lēzer o scréver al file \"$1\" a câşva ed dirét insuficînt o a mânca l'indirés al  sistēma di file/spâsi insuficînt.",
+       "filejournal-fail-dbconnect": "Impusébil coleghêres al database e da l'é mandêrel al terminêl ed memōria \"$1\".",
+       "filejournal-fail-dbquery": "Impusébil arnuvêr al database e da l'é mandêrel al terminêl ed memōria \"$1\".",
+       "lockmanager-notlocked": "Impusébil şbluchêr \"$1\"; an n'é mìa bluchê.",
+       "lockmanager-fail-closelock": "Impusébil sarêr al file 'd blôch per \"$1\"",
+       "lockmanager-fail-deletelock": "Impusébil eliminêr al file 'd blôch per \"$1\"",
+       "lockmanager-fail-acquirelock": "Impusébil utgnîr blôch per \"$1\".",
+       "lockmanager-fail-openlock": "Impusébil arvîr al file 'd blôch per \"$1\".",
+       "lockmanager-fail-releaselock": "Impusébil liberêr al blôch per \"$1\".",
+       "lockmanager-fail-db-bucket": "Impusébil coleghêr i databes ed blôch necesâri int al recipiĵnt $1.",
+       "lockmanager-fail-db-release": "Impusébil tōr via i blôch al database $1.",
+       "lockmanager-fail-svr-acquire": "Impusébil avèir blôch dal servèint $1.",
+       "lockmanager-fail-svr-release": "Impusébil tōr via i blôch al servèint $1.",
+       "zip-file-open-error": "É sucès un erōr mèinter a s'arvîva al file per i cuntròl ZIP.",
+       "zip-wrong-format": "Al file sgnê an n'é mìa un file ZIP.",
+       "zip-bad": "Al file l'é un file ZIP ruvinê opór an pōl mìa lēzer. An pōl mìa èser controlê bèin per la sicurèsa.",
        "license": "Licèinsa:",
        "license-header": "Licèinsa",
        "nolicense": "Nisóna licèinsa sgnêda",
index 62ca344..20dc740 100644 (file)
        "history-feed-description": "Ιστορικό αναθεωρήσεων για αυτή τη σελίδα στο wiki",
        "history-feed-item-nocomment": "$1 στις $2",
        "history-feed-empty": "Η ζητούμενη σελίδα δεν υπάρχει.\nΜπορεί να έχει διαγραφεί από το wiki, ή να μετονομάστηκε.\nΔοκιμάστε [[Special:Search|να αναζητήσετε στο wiki]] για σχετικές νέες σελίδες.",
-       "rev-deleted-comment": "(σχόλιο αφαιρέθηκε)",
+       "rev-deleted-comment": "(η σύνοψη επεξεργασίας αφαιρέθηκε)",
        "rev-deleted-user": "(όνομα χρήστη αφαιρέθηκε)",
        "rev-deleted-event": "(οι λεπτομέρειες καταγραφής αφαιρέθηκαν)",
        "rev-deleted-user-contribs": "[όνομα χρήστη ή διεύθυνση ΙΡ έχουν αφαιρεθεί - η επεξεργασία έχει αποκρυφθεί από τις συνεισφορές]",
        "rev-suppressed-unhide-diff": "Μια από τις εκδόσεις αυτής της διαφοράς έχει '''κατασταλεί'''.\nΛεπτομέρειες μπορούν να βρεθούν στο [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} αρχείο καταστολών].\nΜπορείτε ακόμα [$1 να δείτε αυτή τη διαφορά] αν θέλετε να συνεχίσετε.",
        "rev-deleted-diff-view": "Μια από τις εκδόσεις αυτής της διαφοράς έχει '''διαγραφεί'''.\nΜπορείτε να δείτε αυτή τη διαφορά. Λεπτομέρειες μπορούν να βρεθούν στο [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} αρχείο διαγραφών].",
        "rev-suppressed-diff-view": "Μια από τις εκδόσεις αυτής της διαφοράς έχει '''κατασταλεί'''.\nMπορείτε να δείτε αυτή την διαφορά. Λεπτομέρειες μπορούν να βρεθούν στο [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} αρχείο καταστολών].",
-       "rev-delundel": "εμÏ\86άνιÏ\83η/αÏ\80Ï\8cκÏ\81Ï\85Ï\88η",
+       "rev-delundel": "αλλαγή Î¿Ï\81αÏ\84Ï\8cÏ\84ηÏ\84αÏ\82",
        "rev-showdeleted": "εμφάνιση",
        "revisiondelete": "Διαγραφή/επαναφορά αναθεωρήσεων",
        "revdelete-nooldid-title": "Άκυρη έκδοση-στόχος",
        "revdelete-text-others": "Άλλοι διαχειριστές θα εξακολουθεί να είναι σε θέση να αποκτήσουν πρόσβαση στο κρυφό περιεχόμενο και για να αναιρέσουν τη διαγραφή, εκτός αν τίθενται πρόσθετοι περιορισμοί.",
        "revdelete-confirm": "Παρακαλούμε επιβεβαιώστε ότι σκοπεύετε να το κάνετε αυτό, ότι αντιλαμβάνεσθε τις συνέπειες, και ότι το κάνετε σύμφωνα με την [[{{MediaWiki:Policy-url}}|πολιτική]].",
        "revdelete-suppress-text": "Η καταστολή μπορεί να χρησιμοποιηθεί <strong> μόνο </strong> για τις ακόλουθες περιπτώσεις:\n* Ενδεχόμενη συκοφαντική δυσφήμιση\n* Ακατάλληλες προσωπικές πληροφορίες\n*: <em>διευθύνσεις κατοικίας και αριθμοί τηλεφώνου, αριθμοί ταυτότητας, κλπ. </em>",
-       "revdelete-legend": "Î\98έÏ\83Ï\84ε Ï\80εÏ\81ιοÏ\81ιÏ\83μοÏ\8dÏ\82 ορατότητας",
+       "revdelete-legend": "Î\9fÏ\81ιÏ\83μÏ\8cÏ\82 Ï\80εÏ\81ιοÏ\81ιÏ\83μÏ\8eν ορατότητας",
        "revdelete-hide-text": "Κείμενο αναθεώρησης",
        "revdelete-hide-image": "Κρύψε περιεχόμενο αρχείου",
        "revdelete-hide-name": "Απόκρυψη στόχου και παραμέτρων",
        "revdelete-suppress": "Απόκρυψε δεδομένα από διαχειριστές όπως και από άλλους",
        "revdelete-unsuppress": "Αφαίρεσε περιορισμούς στις αποκατεστημένες αναθεωρήσεις",
        "revdelete-log": "Αιτία:",
-       "revdelete-submit": "Î\95Ï\86άÏ\81μοÏ\83ε {{PLURAL:$1|στην επιλεγμένη αναθεώρηση|στις επιλεγμένες αναθεωρήσεις}}",
+       "revdelete-submit": "Î\95Ï\86αÏ\81μογή {{PLURAL:$1|στην επιλεγμένη αναθεώρηση|στις επιλεγμένες αναθεωρήσεις}}",
        "revdelete-success": "'''Η ορατότητα έκδοσης ενημερώθηκε επιτυχώς.'''",
        "revdelete-failure": "'''Η ορατότητα της επεξεργασίας δεν ήταν δυνατόν να ενημερωθεί:''' $1",
        "logdelete-success": "'''Η ορατότητα γεγονότος τέθηκε επιτυχώς.'''",
        "difference-title-multipage": "Διαφορά μεταξύ των σελίδων \"$1\" και \"$2\"",
        "difference-multipage": "(Διαφορές μεταξύ των σελίδων)",
        "lineno": "Γραμμή $1:",
-       "compareselectedversions": "ΣÏ\8dγκÏ\81ιÏ\83η Ï\84Ï\89ν ÎµÏ\80ιλεγμένÏ\89ν ÎµÎºÎ´Ï\8cσεων",
-       "showhideselectedversions": "Î\95μÏ\86άνιÏ\83η/αÏ\80Ï\8cκÏ\81Ï\85Ï\88η Ï\84Ï\89ν ÎµÏ\80ιλεγμένÏ\89ν ÎµÎºÎ´Î¿Ï\87Ï\8eν",
+       "compareselectedversions": "ΣÏ\8dγκÏ\81ιÏ\83η Ï\84Ï\89ν ÎµÏ\80ιλεγμένÏ\89ν Î±Î½Î±Î¸ÎµÏ\89Ï\81ήσεων",
+       "showhideselectedversions": "Î\91λλαγή Î¿Ï\81αÏ\84Ï\8cÏ\84ηÏ\84αÏ\82 Ï\84Ï\89ν ÎµÏ\80ιλεγμένÏ\89ν Î±Î½Î±Î¸ÎµÏ\89Ï\81ήÏ\83εÏ\89ν",
        "editundo": "αναίρεση",
        "diff-empty": "(Καμία διαφορά)",
        "diff-multi-sameuser": "({{PLURAL:$1|Μία ενδιάμεση αναθεώρηση|$1 ενδιάμεσες αναθεωρήσεις}} από τον ίδιο χρήστη δεν εμφανίζεται)",
        "group": "Ομάδα:",
        "group-user": "Χρήστες",
        "group-autoconfirmed": "Αυτοεπιβεβαιωμένοι χρήστες",
-       "group-bot": "Bots",
+       "group-bot": "Ρομπότ",
        "group-sysop": "Διαχειριστές",
        "group-bureaucrat": "Γραφειοκράτες",
        "group-suppress": "Παρατηρητές",
        "group-all": "(όλοι)",
-       "group-user-member": "χρήστης",
-       "group-autoconfirmed-member": "αυτοεπιβεβαιωμένος χρήστης",
+       "group-user-member": "{{GENDER:$1|χρήστης|χρήστρια}}",
+       "group-autoconfirmed-member": "{{GENDER:$1|αυτοεπιβεβαιωμένος χρήστης|αυτοεπιβεβαιωμένη χρήστρια}}",
        "group-bot-member": "ρομπότ",
-       "group-sysop-member": "διαχειριστές",
-       "group-bureaucrat-member": "γραφειοκράτης",
-       "group-suppress-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}}:Αυτόματα επιβεβαιωμένοι χρήστες",
        "grouppage-bot": "{{ns:project}}:Bots",
        "right-delete": "Διαγραφή σελίδων",
        "right-bigdelete": "Διαγραφή σελίδων με εκτεταμένο ιστορικό",
        "right-deletelogentry": "Διαγραφή και επαναφορά διαγραφής συγκεκριμένων καταχωρήσεων στη λίστα καταγραφών",
-       "right-deleterevision": "Î\94ιαγÏ\81αÏ\86ή ÎºÎ±Î¹ ÎµÏ\80αναÏ\86οÏ\81ά Ï\83Ï\85γκεκÏ\81ιμένÏ\89ν ÎµÎºÎ´Ï\8cσεων σελίδων",
+       "right-deleterevision": "Î\94ιαγÏ\81αÏ\86ή ÎºÎ±Î¹ ÎµÏ\80αναÏ\86οÏ\81ά Ï\83Ï\85γκεκÏ\81ιμένÏ\89ν Î±Î½Î±Î¸ÎµÏ\89Ï\81ήσεων σελίδων",
        "right-deletedhistory": "Προβολή διαγραμμένων εκδόσεων του ιστορικού, χωρίς το σχετικό κείμενο",
        "right-deletedtext": "Εμφάνιση διεγραμμένου κειμένου και αλλαγών ανάμεσα στις διεγραμμένες εκδόσεις",
        "right-browsearchive": "Αναζήτηση στις διαγραμμένες σελίδες",
        "right-undelete": "Ανάκληση διαγραφής μίας σελίδας",
-       "right-suppressrevision": "Προβολή, απόκρυψη και επανεμφάνιση συγκεκριμένων αναθεωρήσεων σελίδων από κάθε χρήστη",
+       "right-suppressrevision": "Προβολή, απόκρυψη και επανεμφάνιση από οποιονδήποτε χρήστη συγκεκριμένων αναθεωρήσεων σελίδων",
        "right-viewsuppressed": "Προβολή αναθεωρήσεων κρυμμένων από κάθε χρήστη",
        "right-suppressionlog": "Προβολή ιδιωτικών καταγραφών",
        "right-block": "Φραγή άλλων χρηστών από την επεξεργασία",
        "alllogstext": "Εποπτική εμφάνιση όλων των ενεργειών φόρτωσης αρχείων, διαγραφής, προστασίας, φραγής και όλων των καταγραφών των διαχειριστών στο αρχείο γεγονότων του {{SITENAME}}. Μπορείτε να περιορίσετε τα αποτελέσματα που εμφανίζονται επιλέγοντας συγκεκριμένο είδος γεγονότων, όνομα χρήστη ή τη σελίδα που επηρεάστηκε.",
        "logempty": "Δεν υπάρχουν στοιχεία που να ταιριάζουν στο αρχείο καταγραφών.",
        "log-title-wildcard": "Αναζήτησε τίτλους που αρχίζουν με αυτό το κείμενο",
-       "showhideselectedlogentries": "Î\95μÏ\86άνιÏ\83η/αÏ\80Ï\8cκÏ\81Ï\85Ï\88η ÎµÏ\80ιλεγμένÏ\89ν ÎºÎ±Ï\84αÏ\87Ï\89Ï\81ήÏ\83εÏ\89ν Ï\83Ï\84η Î»Î¯Ï\83Ï\84α ÎºÎ±Ï\84αγÏ\81αÏ\86Ï\8eν",
+       "showhideselectedlogentries": "Î\91λλαγή Î¿Ï\81αÏ\84Ï\8cÏ\84ηÏ\84αÏ\82 Ï\84Ï\89ν ÎµÏ\80ιλεγμένÏ\89ν ÎºÎ±Ï\84αÏ\87Ï\89Ï\81ήÏ\83εÏ\89ν Ï\83Ï\84ο Î±Ï\81Ï\87είο ÎºÎ±Ï\84αγÏ\81αÏ\86ήÏ\82 Ï\83Ï\85μβάνÏ\84Ï\89ν",
        "allpages": "Όλες οι σελίδες",
        "nextpage": "Επόμενη σελίδα ($1)",
        "prevpage": "Προηγούμενη σελίδα ($1)",
        "import-interwiki-history": "Αντιγραφή όλων των εκδόσεων του ιστορικού για αυτή τη σελίδα",
        "import-interwiki-templates": "Συμπερίληψη όλων των προτύπων",
        "import-interwiki-submit": "Εισαγωγή",
-       "import-interwiki-namespace": "Προορισμός στον ονοματοχώρο:",
-       "import-interwiki-rootpage": "Ριζική σελίδα προορισμού (προαιρετικό):",
        "import-upload-filename": "Όνομα αρχείου:",
        "import-comment": "Σχόλιο:",
        "importtext": "Παρακαλούμε εξαγάγετε το αρχείο από το πηγαίο wiki (χρησιμοποιώντας το [[Special:Export|εργαλείο εξαγωγής]]). \nΑποθηκεύστε το στον υπολογιστή σας και ανεβάστε το εδώ.",
        "sqlite-no-fts": "$1 χωρίς την υποστήριξη αναζήτησης πλήρους κειμένου",
        "logentry-delete-delete": "{{GENDER:$1|Ο|Η}} $1 διέγραψε τη σελίδα $3",
        "logentry-delete-restore": "Ο/Η $1 αποκατέστησε τη σελίδα $3",
-       "logentry-delete-event": " $1 {{GENDER:$1|άλλαξε}} την ορατότητα σε {{PLURAL:$5|ένα γεγονός καταγραφής|$5 γεγονότα καταγραφής}} στο $3: $4",
-       "logentry-delete-revision": "$1 {{GENDER:$2|άλλαξε}} την ορατότητα για {{PLURAL:$5|μία έκδοση|$5 εκδόσεις}} στη σελίδα $3: $4",
+       "logentry-delete-event": "{{GENDER:$2|Ο|Η}} $1 άλλαξε την ορατότητα {{PLURAL:$5|ενός καταγραφόμενου συμβάντος|$5 καταγραφόμενων συμβάντων}} στο $3: $4",
+       "logentry-delete-revision": "{{GENDER:$2|Ο|Η}} $1 άλλαξε την ορατότητα {{PLURAL:$5|μίας αναθεώρησης|$5 αναθεωρήσεων}} στη σελίδα $3: $4",
        "logentry-delete-event-legacy": "{{GENDER:$2|Ο|Η}} $1 άλλαξε την ορατότητα των καταγραφόμενων συμβάντων στη σελίδα $3",
-       "logentry-delete-revision-legacy": "$1 {{GENDER:$2|άλλαξε}} την  ορατότητα των αναθεωρήσεων στη σελίδα $3",
+       "logentry-delete-revision-legacy": "{{GENDER:$2|Ο|Η}} $1 άλλαξε την ορατότητα των αναθεωρήσεων στη σελίδα $3",
        "logentry-suppress-delete": "$1 {{GENDER:$2|διέγραψε}} τη σελίδα $3",
        "logentry-suppress-event": "{{Gender:$2|Ο|Η}} $1 άλλαξε μυστικά την ορατότητα {{PLURAL:$5|ενός καταγραφόμενου συμβάντος|$5 καταγραφόμενων συμβάντων}} στη σελίδα $3: $4",
        "logentry-suppress-revision": "{{Gender:$2|Ο|Η}} $1 άλλαξε μυστικά την ορατότητα {{PLURAL:$5|μίας αναθεώρησης|$5 αναθεωρήσεων}} στη σελίδα $3: $4",
        "revdelete-content-unhid": "το περιεχόμενο έπαψε να είναι κρυφό",
        "revdelete-summary-unhid": "η σύνοψη επεξεργασίας έπαψε να είναι κρυφή",
        "revdelete-uname-unhid": "το όνομα χρήστη έπαψε να είναι κρυφό",
-       "revdelete-restricted": "εÏ\86άρμοσε περιορισμούς στους sysops",
+       "revdelete-restricted": "εÏ\86ήρμοσε περιορισμούς στους sysops",
        "revdelete-unrestricted": "αφαίρεσε περιορισμούς στους sysops",
        "logentry-move-move": "{{GENDER:$2|Ο|Η}} $1 μετακίνησε τη σελίδα $3 στη $4",
        "logentry-move-move-noredirect": "{{GENDER:$2|Ο|Η}} $1 μετακίνησε τη σελίδα $3 στη $4 χωρίς να αφήσει ανακατεύθυνση",
index 93eb6c5..2685701 100644 (file)
        "no-null-revision": "Could not create new null revision for page \"$1\"",
        "badtitle": "Bad title",
        "badtitletext": "The requested page title was invalid, empty, or an incorrectly linked inter-language or inter-wiki title.\nIt may contain one or more characters that cannot be used in titles.",
+       "title-invalid-empty": "The requested page title is empty or contains only the name of a namespace.",
+       "title-invalid-utf8": "The requested page title contains an invalid UTF-8 sequence.",
+       "title-invalid-interwiki": "Title contains an interwiki link",
+       "title-invalid-talk-namespace": "The requested page title refers to a talk page that can not exist.",
+       "title-invalid-characters": "The requested page title contains invalid characters: \"$1\".",
+       "title-invalid-relative": "Title has relative path. Relative page titles (./, ../) are invalid, because they will often be unreachable when handled by user's browser.",
+       "title-invalid-magic-tilde": "The requested page title contains invalid magic tilde sequence (<nowiki>~~~</nowiki>).",
+       "title-invalid-too-long": "The requested page title is too long. It must be no longer than $1 bytes in UTF-8 encoding.",
+       "title-invalid-leading-colon": "The requested page title contains an invalid colon at the beginning.",
        "perfcached": "The following data is cached and may not be up to date. A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.",
        "perfcachedts": "The following data is cached, and was last updated $1. A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.",
        "querypage-no-updates": "Updates for this page are currently disabled.\nData here will not presently be refreshed.",
        "revdelete-unsuppress": "Remove restrictions on restored revisions",
        "revdelete-log": "Reason:",
        "revdelete-submit": "Apply to selected {{PLURAL:$1|revision|revisions}}",
-       "revdelete-success": "<strong>Revision visibility successfully updated.</strong>",
-       "revdelete-failure": "<strong>Revision visibility could not be updated:</strong>\n$1",
-       "logdelete-success": "<strong>Log visibility successfully set.</strong>",
-       "logdelete-failure": "<strong>Log visibility could not be set:</strong>\n$1",
+       "revdelete-success": "Revision visibility successfully updated.",
+       "revdelete-failure": "Revision visibility could not be updated:\n$1",
+       "logdelete-success": "Log visibility successfully set.",
+       "logdelete-failure": "Log visibility could not be set:\n$1",
        "revdel-restore": "change visibility",
        "pagehist": "Page history",
        "deletedhist": "Deleted history",
        "import-interwiki-history": "Copy all history revisions for this page",
        "import-interwiki-templates": "Include all templates",
        "import-interwiki-submit": "Import",
-       "import-interwiki-namespace": "Destination namespace:",
-       "import-interwiki-rootpage": "Destination root page (optional):",
+       "import-mapping-default": "Import to default locations",
+       "import-mapping-namespace": "Import to a namespace:",
+       "import-mapping-subpage": "Import as subpages of the following page:",
        "import-upload-filename": "Filename:",
        "import-comment": "Comment:",
        "importtext": "Please export the file from the source wiki using the [[Special:Export|export utility]].\nSave it to your computer and upload it here.",
        "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": "<strong>The changes were successfully applied.</strong>",
-       "tags-edit-failure": "<strong>The changes could not be applied:</strong>\n$1",
+       "tags-edit-success": "The changes were successfully 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.",
        "tags-edit-none-selected": "Please select at least one tag to add or remove.",
index f02869f..a09c0f6 100644 (file)
        "import-interwiki-history": "Kopiu ĉiujn historiajn versiojn por ĉi tiu pago.",
        "import-interwiki-templates": "Inkluzivi ĉiujn ŝablonojn",
        "import-interwiki-submit": "Importi",
-       "import-interwiki-namespace": "Cela nomspaco:",
-       "import-interwiki-rootpage": "Ircela radikopaĝo (laŭvola):",
        "import-upload-filename": "Dosiernomo:",
        "import-comment": "Komento:",
        "importtext": "Bonvolu eksporti la dosieron el la fonta vikio per la [[Special:Export|eksportilo]]. Konservu ĝin sur via persona komputilo kaj poste alŝutu ĝin tien ĉi.",
index 3b826e7..0c235a1 100644 (file)
                        "Kroji",
                        "JasterTDC",
                        "Laurenslimb",
-                       "Tusca"
+                       "Tusca",
+                       "Tadol"
                ]
        },
        "tog-underline": "Subrayar los enlaces:",
        "no-null-revision": "No se pudo crear una nueva revisión nula para la página «$1»",
        "badtitle": "Título incorrecto",
        "badtitletext": "El título de la página solicitada está vacío, no es válido, o es un enlace interidioma o interwiki incorrecto.\nPuede que contenga uno o más caracteres que no se pueden usar en los títulos.",
+       "title-invalid-interwiki": "El título contiene un enlace interwiki",
+       "title-invalid-characters": "El título  de la página solicitada contiene caracteres no válidos: \"$1\".",
+       "title-invalid-leading-colon": "El título de la página solicitada contiene un caracater (:) no válido en el comienzo.",
        "perfcached": "Los siguientes datos provienen de la caché y pueden no estar actualizados. La caché puede contener {{PLURAL:$1|un resultado|$1 resultados}} como máximo.",
        "perfcachedts": "Los siguientes datos provienen de la caché, y fueron actualizados por última vez a fecha de: $1. La caché contiene {{PLURAL:$4|un resultado|$4 resultados}} como máximo.",
        "querypage-no-updates": "Actualmente las actualizaciones de esta página están desactivadas. Estos datos no serán actualizados a corto plazo.",
        "subject-preview": "Previsualización del asunto/encabezado:",
        "previewerrortext": "Se ha producido un error al intentar la vista previa de los cambios.",
        "blockedtitle": "El usuario está bloqueado",
-       "blockedtext": "<strong>Tu nombre de usuario o dirección IP ha sido bloqueada.</strong>\n\nEl bloqueo fue hecho por $1.\nLa razón dada es <em>$2</em>.\n\n* Inicio del bloqueo: $8\n* Caducidad del bloqueo: $6\n* Bloqueo destinado a: $7\n\nPuedes contactar a $1 u otro [[{{MediaWiki:Grouppage-sysop}}|administrador]] para discutir el bloqueo.\nNo puedes utilizar la función «enviar correo electrónico a este usuario»  a menos que tengas una dirección de correo electrónico válida registrada en tus [[Special:Preferences|preferencias de usuario]] y que el bloqueo no haya inhabilitado esta función.\n\nTu dirección IP actual es $3, y el identificador del bloqueo es #$5.\nPor favor incluye todos los datos aquí mostrados en cualquier consulta que hagas.",
-       "autoblockedtext": "Tu dirección IP ha sido bloqueada automáticamente porque fue utilizada por otro usuario, que resultó bloqueado por $1.\nLa explicación proporcionada es la siguiente:\n\n:<em>$2</em>\n\n* Inicio del bloqueo: $8\n* Caducidad del bloqueo: $6\n* Bloqueo destinado a: $7\n\nPuedes contactar con $1 o con otro de los [[{{MediaWiki:Grouppage-sysop}}|administradores]] para discutir el bloqueo.\n\nTen en cuenta que no podrás utilizar la herramienta de «enviar correo electrónico a este usuario» a menos que tengas una dirección de correo electrónico válida registrada en tus [[Special:Preferences|preferencias de usuario]] y la función no haya sido también bloqueada.\n\nTu actual dirección IP es $3, y el identificador del bloqueo es #$5.\nPor favor, incluye todos los datos aquí mostrados en cualquier consulta que hagas al respecto.",
+       "blockedtext": "<strong>Tu nombre de usuario o dirección IP ha sido bloqueada.</strong>\n\nEl bloqueo fue hecho por $1.\nLa razón dada es <em>$2</em>.\n\n* Inicio del bloqueo: $8\n* Caducidad del bloqueo: $6\n* Bloqueo destinado a: $7\n\nPuedes contactar a $1 o con otro de los [[{{MediaWiki:Grouppage-sysop}}|administradores]] para discutir el bloqueo.\nNo puedes utilizar la función «enviar correo electrónico a este usuario»  a menos que tengas una dirección de correo electrónico válida registrada en tus [[Special:Preferences|preferencias de usuario]] y que el bloqueo no haya inhabilitado esta función.\n\nTu dirección IP actual es $3, y el identificador del bloqueo es #$5.\nPor favor incluye todos los datos aquí mostrados en cualquier consulta que hagas.",
+       "autoblockedtext": "Tu dirección IP ha sido bloqueada automáticamente porque fue utilizada por otro usuario, que resultó bloqueado por $1.\n\nEl motivo dado es el siguiente:\n\n:<em>$2</em>\n\n* Inicio del bloqueo: $8\n* Caducidad del bloqueo: $6\n* Bloqueo destinado a: $7\n\nPuedes contactar con $1 o con otro de los [[{{MediaWiki:Grouppage-sysop}}|administradores]] para discutir el bloqueo.\n\nTen en cuenta que no podrás utilizar la herramienta de «enviar correo electrónico a este usuario» a menos que tengas una dirección de correo electrónico válida registrada en tus [[Special:Preferences|preferencias de usuario]] y la función no haya sido también bloqueada.\n\nTu dirección IP actual es $3, y el identificador del bloqueo es #$5.\nPor favor, incluye todos los datos aquí mostrados en cualquier consulta que hagas al respecto.",
        "blockednoreason": "no se ha especificado el motivo",
        "whitelistedittext": "Tienes que $1 para editar artículos.",
        "confirmedittext": "Debes confirmar tu dirección de correo electrónico antes de poder editar páginas. Por favor, configura y confirma tu dirección de correo a través de tus [[Special:Preferences|preferencias de usuario]].",
        "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-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. Por favor, asegúrate de que realmente quieres crear o editar esta página.",
+       "userpage-userdoesnotexist": "El usuario «$1» no está registrado. Asegúrate de que realmente quieres crear o editar esta página.",
        "userpage-userdoesnotexist-view": "El usuario «$1» no está registrado.",
        "blocked-notice-logextract": "Este usuario se encuentra actualmente bloqueado.\nA continuación se muestra la última entrada del registro de bloqueos para más información:",
        "clearyourcache": "<strong>Nota:</strong> tras guardar, quizás necesites actualizar la caché de tu navegador para ver los cambios.\n* <strong>Firefox/Safari:</strong> Mantén presionada la tecla <em>Mayús</em> mientras pulsas el botón <em>Actualizar</em>, o presiona <em>Ctrl+F5</em> o <em>Ctrl+R</em> (<em>⌘+R</em> en Mac)\n* <strong>Google Chrome:</strong> presiona <em>Ctrl+Shift+R</em> (<em>⌘+Mayús+R</em> en Mac)\n* <strong>Internet Explorer:</strong> mantén presionada <em>Ctrl</em> mientras pulsas <em>Actualizar</em>, o presiona <em>Ctrl+F5</em>\n* <strong>Opera:</strong> vacía la caché en <em>Herramientas → Preferencias</em>",
        "rev-suppressed-unhide-diff": "Una de las revisiones ha sido <strong>suprimida</strong>.\nPara más información, consulta el [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} registro de supresiones].\nAún puedes [$1 ver la diferencia] si lo deseas.",
        "rev-deleted-diff-view": "Una de las revisiones ha sido <strong>eliminada</strong>.\nAún tienes la posibilidad de verla. Para más información, consulta el [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de borrados].",
        "rev-suppressed-diff-view": "Una de las revisiones ha sido <strong>suprimida</strong>.\nAún tienes la posibilidad de verla. Para más información, consulta el [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} registro de supresiones].",
-       "rev-delundel": "mostrar/ocultar",
+       "rev-delundel": "cambiar visibilidad",
        "rev-showdeleted": "mostrar",
        "revisiondelete": "Borrar/restaurar revisiones",
        "revdelete-nooldid-title": "La revisión destino es incorrecta",
        "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": "<strong>Se ha cambiado con éxito la visibilidad de las revisiones.</strong>",
-       "revdelete-failure": "<strong>No se ha podido cambiar la visibilidad de las revisiones:</strong>\n$1",
-       "logdelete-success": "<strong>Se ha cambiado con éxito la visibilidad de los eventos.</strong>",
-       "logdelete-failure": "<strong>No se ha podido cambiar la visibilidad de los eventos:'''\n$1",
-       "revdel-restore": "mostrar/ocultar",
+       "revdelete-success": "Se ha cambiado con éxito 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-failure": "No se pudo cambiar la visibilidad de los eventos:\n$1",
+       "revdel-restore": "cambiar visibilidad",
        "pagehist": "Historial de la página",
        "deletedhist": "Historial borrado",
        "revdelete-hide-current": "Error al ocultar la revisión del $1 a las $2: es la revisión actual y no se puede ocultar.",
        "alllogstext": "Vista combinada de todos los registros de {{SITENAME}}.\nPuedes filtrar la vista seleccionando un tipo de registro, el nombre del usuario o la página afectada. Se distinguen mayúsculas de minúsculas.",
        "logempty": "No hay elementos en el registro con esas condiciones.",
        "log-title-wildcard": "Buscar títulos que empiecen con este texto",
-       "showhideselectedlogentries": "Mostrar u ocultar las entradas seleccionadas del registro",
+       "showhideselectedlogentries": "Cambiar la visibilidad de las entradas del registro seleccionadas",
        "log-edit-tags": "Editar las etiquetas de las entradas del registro seleccionadas",
        "allpages": "Todas las páginas",
        "nextpage": "Siguiente página ($1)",
        "linksearch-pat": "Patrón de búsqueda:",
        "linksearch-ns": "Espacio de nombre:",
        "linksearch-ok": "Buscar",
-       "linksearch-text": "Se pueden usar caracteres comodín como \"*.wikipedia.org\".\nEs necesario, por lo menos, un dominio de alto nivel, por ejemplo \"*.org\".<br />\n{{PLURAL:$2|Protocolo|Protocolos}} soportados: <code>$1</code> (si no se especifica ninguno, el protocolo por defecto es http://).",
+       "linksearch-text": "Se pueden usar caracteres comodín como \"*.wikipedia.org\".\nEs necesario, por lo menos, un dominio de alto nivel, por ejemplo \"*.org\".<br />\n{{PLURAL:$2|Protocolo soportado|Protocolos soportados}}: <code>$1</code> (si no se especifica ninguno, el predeterminado es http://).",
        "linksearch-line": "$1 enlazado desde $2",
        "linksearch-error": "Los comodines sólo pueden aparecer al principio del nombre de sitio.",
        "listusersfrom": "Mostrar usuarios que empiecen por:",
        "autoblocker": "Has sido bloqueado automáticamente porque tu dirección IP ha sido usada recientemente por «[[User:$1|$1]]».\nEl motivo por el que se bloqueó a [[User:$1|$1]] es «$2».",
        "blocklogpage": "Registro de bloqueos",
        "blocklog-showlog": "Este usuario ha sido bloqueado previamente. Debajo se provee el registro de bloqueos para mayor referencia:",
-       "blocklog-showsuppresslog": "Este usuario ha sido bloqueado y ocultado. Se provee el registro de supresiones para más detalle:",
+       "blocklog-showsuppresslog": "Este usuario ha sido bloqueado y ocultado con anterioridad.\nEl registro de supresiones se muestra debajo como referencia:",
        "blocklogentry": "bloqueó a [[$1]] por un periodo de: $2 $3",
        "reblock-logentry": "cambió el bloqueo para  [[$1]] con una caducidad de $2 $3",
        "blocklogtext": "Esto es un registro de acciones de bloqueo y desbloqueo de usuarios.\nLas direcciones IP bloqueadas automáticamente no aparecen aquí.\nConsulta la [[Special:BlockList|lista de bloqueos]] para ver la lista de bloqueos y prohibiciones de operar en vigor.",
        "ipb_already_blocked": "La cuenta «$1» ya está bloqueada.",
        "ipb-needreblock": "$1 ya está bloqueado. ¿Quieres cambiar el bloqueo?",
        "ipb-otherblocks-header": "{{PLURAL:$1|Otro bloqueo|Otros bloqueos}}",
-       "unblock-hideuser": "No se puede desbloquear a este usuario, porque su nombre de usuario está oculto.",
+       "unblock-hideuser": "No puedes desbloquear a este usuario porque su nombre ha sido ocultado.",
        "ipb_cant_unblock": "'''Error''': Número ID $1 de bloqueo no encontrado. Pudo haber sido desbloqueado ya.",
        "ipb_blocked_as_range": "Error: la dirección IP $1 no está bloqueada directamente y no puede ser desbloqueada.\nSin embargo, está bloqueada como parte del rango $2, que puede ser desbloqueado.",
        "ip_range_invalid": "El rango de IP no es válido.",
        "sorbsreason": "Su dirección IP está listada como proxy abierto en DNSBL.",
        "sorbs_create_account_reason": "Su dirección IP está listada como proxy abierto en DNSBL. No puede crear una cuenta",
        "xffblockreason": "Una dirección IP presente en la cabecera X-Forwarded-For, tuya o del servidor proxy que estás usando, ha sido bloqueada. El motivo original del bloqueo fue: $1",
-       "cant-see-hidden-user": "El usuario que está intentando bloquear ya ha sido bloqueado y oculto. Puesto que usted no tiene el derecho hideuser, usted no puede ver o editar los bloqueos del usuario.",
+       "cant-see-hidden-user": "El usuario que estas intentando bloquear ya ha sido bloqueado y ocultado.\nDado que no tienes permisos suficientes no puedes ver ni editar el bloqueo de este usuario.",
        "ipbblocked": "No puedes bloquear o desbloquear a otros usuarios porque estás bloqueado",
        "ipbnounblockself": "No puedes desbloquearte",
        "lockdb": "Bloquear la base de datos",
        "movepagetext-noredirectfixer": "Usando el siguiente formulario se renombrará una página, trasladando todo su historial al nuevo nombre.\nEl título anterior se convertirá en una redirección al nuevo título.\nAsegúrate de no dejar [[Special:DoubleRedirects|redirecciones dobles]] o [[Special:BrokenRedirects|rotas]].\nTú eres responsable de hacer que los enlaces sigan apuntando adonde se supone que deberían hacerlo.\n\nRecuerda que la página '''no''' será renombrada si ya existe una página con el nuevo título, a no ser que sea una página vacía o una redirección sin historial.\nEsto significa que podrás renombrar una página a su título original si has cometido un error, pero que no podrás sobrescribir una página existente.\n\n'''¡Aviso!'''\nEste puede ser un cambio drástico e inesperado para una página popular;\npor favor, asegúrate de entender las consecuencias del procedimiento antes de seguir adelante.",
        "movepagetalktext": "La página de discusión asociada, si existe, será renombrada automáticamente '''a menos que:'''\n*Estés trasladando la página entre espacios de nombres diferentes,\n*Una página de discusión no vacía ya exista con el nombre nuevo, o\n*No marques el recuadro «Renombrar la página de discusión asociada».\n\nEn estos casos, deberás trasladar manualmente el contenido de la página de discusión.",
        "movearticle": "Renombrar página",
-       "moveuserpage-warning": "'''Aviso:''' estás a punto de trasladar una página de usuario. Ten en cuenta que solo será trasladada la página; el usuario '''no''' será renombrado.",
+       "moveuserpage-warning": "<strong>Advertencia:</strong> estás a punto de trasladar una página de usuario. Ten en cuenta que solo se trasladará la página; el usuario <em>no</em> se renombrará.",
        "movecategorypage-warning": "<strong>Advertencia:</strong> Estás a punto de trasladar una página de categoría. Ten en cuenta que se trasladará sólo la página y las páginas en la antigua categoría <em>no</em> serán recategorizadas en la nueva.",
        "movenologintext": "Es necesario ser usuario registrado y [[Special:UserLogin|haber iniciado sesión]] para renombrar una página.",
        "movenotallowed": "No tienes permiso para trasladar páginas.",
        "allmessagesname": "Nombre",
        "allmessagesdefault": "Texto predeterminado",
        "allmessagescurrent": "Texto actual",
-       "allmessagestext": "Esta es una lista de mensajes del sistema disponibles en el espacio de nombres MediaWiki.\nPor favor, visita [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation Localización MediaWiki] y [//translatewiki.net translatewiki.net] si deseas contribuir a la localización genérica de MediaWiki.",
+       "allmessagestext": "Esta es una lista de mensajes del sistema disponibles en el espacio de nombres MediaWiki.\nVisita [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation Localización MediaWiki] y [//translatewiki.net translatewiki.net] si deseas contribuir a la localización genérica de MediaWiki.",
        "allmessagesnotsupportedDB": "Esta página no está disponible porque '''$wgUseDatabaseMessages''' está deshabilitado.",
        "allmessages-filter-legend": "Filtro",
        "allmessages-filter": "Filtrar por estado de personalización:",
        "import-interwiki-history": "Copiar todas las versiones históricas para esta página",
        "import-interwiki-templates": "Incluir todas las plantillas",
        "import-interwiki-submit": "Importar",
-       "import-interwiki-namespace": "Espacio de nombres de destino:",
-       "import-interwiki-rootpage": "Página raíz del destino (opcional):",
        "import-upload-filename": "Nombre de archivo:",
        "import-comment": "Comentario:",
        "importtext": "Por favor, exporta el archivo desde el wiki de origen usando la [[Special:Export|herramienta de exportación]], guárdalo en tu disco y súbelo aquí.",
        "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": "<strong>Los cambios se aplicaron con éxito.</strong>",
-       "tags-edit-failure": "<strong>no se pudieron aplicar los cambios:</strong>\n$1",
+       "tags-edit-success": "Los cambios se aplicaron con éxito.",
+       "tags-edit-failure": "No se pudieron aplicar los cambios:\n$1",
        "tags-edit-none-selected": "Selecciona al menos una etiqueta que añadir o quitar.",
        "comparepages": "Comparar páginas",
        "compare-page1": "Página 1",
index 598d3ff..782feaa 100644 (file)
        "no-null-revision": "Lehekülje \"$1\" nullredaktsiooni ei õnnestunud teha.",
        "badtitle": "Vigane pealkiri",
        "badtitletext": "Soovitud lehekülje pealkiri oli vigane, tühi või teisest keeleversioonist või vikist valesti lingitud.\nSee võib sisaldada ühte või enamat märki, mida ei saa pealkirjades kasutada.",
+       "title-invalid-empty": "Päritud lehekülje pealkiri on tühi või sisaldab ainult nimeruumi nimi.",
+       "title-invalid-utf8": "Päritud lehekülje pealkiri sisaldab vigast UTF-8 jada.",
+       "title-invalid-interwiki": "Pealkiri sisaldab intervikilinki.",
+       "title-invalid-talk-namespace": "Päritud lehekülje pealkiri viitab aruteluleheküljele, mida ei saa olemas olla.",
+       "title-invalid-characters": "Päritud lehekülje pealkiri sisaldab vigaseid märke: \"$1\".",
+       "title-invalid-relative": "Pealkirjas on suhteline tee. Suhtelised lehekülje pealkirjad (./, ../) on vigased, sest nad on kasutaja brauseri jaoks sageli kättesaamatud.",
+       "title-invalid-magic-tilde": "Päritud lehekülje pealkiri sisaldab vigast võlutildede jada (<nowiki>~~~</nowiki>).",
+       "title-invalid-too-long": "Päritud lehekülje pealkiri on liiga pikk. See ei tohi olla UTF-8 kodeeringus pikem kui $1 baiti.",
+       "title-invalid-leading-colon": "Päritud lehekülje pealkiri sisaldab alguses vigast koolonit.",
        "perfcached": "Järgmised andmed on puhverdatud ja ei pruugi olla kõige värskemad. Puhvris on saadaval kuni {{PLURAL:$1|üks tulemus|$1 tulemust}}.",
        "perfcachedts": "Järgmised andmed on vahemälus. Viimane uuendamisaeg: $2, kell $3. Puhvris on saadaval kuni {{PLURAL:$4|üks tulemus|$4 tulemust}}.",
        "querypage-no-updates": "Lehekülje uuendamine ei ole hetkel lubatud ning andmeid ei värskendata.",
        "revdelete-unsuppress": "Eemalda taastatud redaktsioonidelt piirangud",
        "revdelete-log": "Põhjus:",
        "revdelete-submit": "Rakenda valitud {{PLURAL:$1|redaktsiooni|redaktsioonide}} suhtes",
-       "revdelete-success": "Redaktsiooni nähtavus edukalt värskendatud.'''",
+       "revdelete-success": "Redaktsiooni nähtavus edukalt värskendatud.",
        "revdelete-failure": "'''Redaktsiooni nähtavust ei saanud värskendada:'''\n$1",
        "logdelete-success": "'''Logi nähtavus edukalt muudetud.'''",
        "logdelete-failure": "'''Logi nähtavust ei saanud paika:'''\n$1",
        "import-interwiki-history": "Kopeeri selle lehekülje kogu ajalugu",
        "import-interwiki-templates": "Liida kõik mallid",
        "import-interwiki-submit": "Impordi",
-       "import-interwiki-namespace": "Sihtkoha nimeruum:",
-       "import-interwiki-rootpage": "Sihtkoha juurlehekülg (valikuline):",
+       "import-mapping-default": "Impordi vaikeasukohta",
+       "import-mapping-namespace": "Impordi järgmisesse nimeruumi:",
+       "import-mapping-subpage": "Impordi järgmise lehekülje alamlehekülgedeks:",
        "import-upload-filename": "Failinimi:",
        "import-comment": "Kommentaar:",
        "importtext": "Palun kasuta faili allikvikist eksportimiseks [[Special:Export|ekspordivahendit]].\nSalvesta see oma arvutisse ja laadi siia üles.",
        "tags-edit-reason": "Põhjus:",
        "tags-edit-revision-submit": "Rakenda {{PLURAL:$1|selle|$1}} redaktsiooni suhtes",
        "tags-edit-logentry-submit": "Rakenda {{PLURAL:$1|selle|$1}} logisissekande suhtes",
-       "tags-edit-success": "<strong>Muudatused on edukalt rakendatud.</strong>",
-       "tags-edit-failure": "<strong>Muudatusi ei õnnestunud rakendada:</strong>\n$1",
+       "tags-edit-success": "Muudatused on edukalt rakendatud.",
+       "tags-edit-failure": "Muudatusi ei õnnestunud rakendada:\n$1",
        "tags-edit-nooldid-title": "Vigane sihtredaktsioon",
        "tags-edit-nooldid-text": "Selle toimingu jaoks pole määratud ühtegi sihtredaktsiooni või määratud redaktsiooni pole olemas.",
        "tags-edit-none-selected": "Palun vali vähemalt üks märgis, mida lisada või eemaldada.",
index 98f3bf2..d30230a 100644 (file)
        "import-interwiki-history": "Orrialde honen historiako bertsio guztiak kopiatu",
        "import-interwiki-templates": "Txantiloi guztiak sartu",
        "import-interwiki-submit": "Inportatu",
-       "import-interwiki-namespace": "Helburuko izen-tartea:",
-       "import-interwiki-rootpage": "Helburuko oinarri orrialdea (aukerazkoa):",
        "import-upload-filename": "Fitxategiaren izena:",
        "import-comment": "Iruzkina:",
        "importtext": "Mesedez, jatorrizko wikitik orrialdea esportatzeko [[Special:Export|esportazio tresna]] erabil ezazu, zure diskoan gorde eta jarraian hona igo.",
        "tooltip-pt-mycontris": "Nire ekarpenen zerrenda",
        "tooltip-pt-login": "Izen ematera gonbidatzen zaitugu.",
        "tooltip-pt-logout": "Saioa itxi",
+       "tooltip-pt-createaccount": "Kontu bat sortu eta horrekin saioa hastea eskatu nahi genizuke; ez da ezinbestekoa, ordea.",
        "tooltip-ca-talk": "Artikuluari buruzko eztabaida",
        "tooltip-ca-edit": "Artikulu hau aldatu dezakezu. Mesedez, aurrebista botoia erabil ezazu gorde baino lehen.",
        "tooltip-ca-addsection": "Iruzkin berria erantsi",
        "revdelete-uname-unhid": "lankide ezkutua erakutsi",
        "revdelete-restricted": "administratzaileentzako mugak ezarri dira",
        "revdelete-unrestricted": "administratzaileentzako mugak kendu dira",
-       "logentry-block-block": "administratzaileak $1 {{GENDER:$2|blocked}} {{GENDER:$4|$3}} blokeatu du. Iraupena: $5 $6",
+       "logentry-block-block": "$1 {{GENDER:$2|administratzaileak}} {{GENDER:$4|$3}} blokeatu du. Iraupena: $5 $6",
        "logentry-block-reblock": "$1 administratzaileak {{GENDER:$4|$3}} wikilariaren blokeoa {{GENDER:$2|aldatu du}}. Blokeoaldia: $5 $6",
-       "logentry-suppress-block": "administratzaileak $1 {{GENDER:$2|blocked}} {{GENDER:$4|$3}} blokeatu du. Iraupena: $5 $6",
+       "logentry-suppress-block": "$1 {{GENDER:$2|administratzaileak}} {{GENDER:$4|$3}} blokeatu du. Iraupena: $5 $6",
        "logentry-suppress-reblock": "$1 administratzaileak {{GENDER:$4|$3}} wikilariaren blokeoa {{GENDER:$2|aldatu du}}. Blokeoaldia: $5 $6",
        "logentry-move-move": "$1 {{GENDER:$2|wikilariak}} «$3» orria «$4» izenera aldatu du",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|wikilariak}} «$3» orria «$4» izenera aldatu du, birzuzenketarik utzi gabe",
        "logentry-newusers-newusers": "$1 erabiltzaile kontua sortu da",
        "logentry-newusers-create": "$1 erabiltzaile kontua sortu da",
        "logentry-newusers-create2": "$1 wikilariak $3 erabiltzaile kontua sortu du",
+       "logentry-upload-upload": "$1(e)k $3 {{GENDER:$2|igo du}}",
        "rightsnone": "(bat ere ez)",
        "revdelete-summary": "aldaketaren laburpena",
        "feedback-adding": "Orriari feedbacka gehitzen...",
index 427c023..c498ae3 100644 (file)
        "import-interwiki-history": "Copial tolas velsionis estóricas d'esta páhina",
        "import-interwiki-templates": "Encruil tolos cuairus",
        "import-interwiki-submit": "Emporteal",
-       "import-interwiki-namespace": "Movel páginas al espáciu nombris:",
        "import-upload-filename": "Nombri del archivu:",
        "import-comment": "Comentáriu:",
        "importstart": "Emporteandu páhinas...",
index 4ad8846..23c8f8f 100644 (file)
        "february-gen": "فوریهٔ",
        "march-gen": "مارس",
        "april-gen": "آوریل",
-       "may-gen": "مه",
+       "may-gen": "مهٔ",
        "june-gen": "ژوئن",
        "july-gen": "ژوئیهٔ",
        "august-gen": "اوت",
        "import-interwiki-history": "تمام نسخه‌های تاریخچهٔ این صفحه انتقال داده شود",
        "import-interwiki-templates": "تمام الگوها را شامل شود",
        "import-interwiki-submit": "درون‌ریزی شود",
-       "import-interwiki-namespace": "فضای نام مقصد:",
-       "import-interwiki-rootpage": "ریشهٔ صفحهٔ مقصد (اختیاری):",
        "import-upload-filename": "نام پرونده:",
        "import-comment": "توضیح:",
        "importtext": "لطفاً پرونده را از ویکی منبع با کمک [[Special:Export|ابزار برون‌بری]] دریافت کنید.\nسپس آن را روی دستگاه‌تان ذخیره کنید و اینجا بارگذاری نمایید.",
        "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",
        "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-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": "دلیل:",
        "comparepages": "مقایسهٔ صفحات",
        "compare-page1": "صفحهٔ ۱",
        "compare-page2": "صفحهٔ ۲",
        "logentry-managetags-delete": "$1 برچسب را از \"$4\" {{GENDER:$2|حذف کرد}} (حذف شده از $5 {{PLURAL:$5|نسخه یا ورودی سیاهه|نسخه یا/و ورودی سیاهه}})",
        "logentry-managetags-activate": "$1 {{GENDER:$2|برچسب}} فعال شده \"$4\" برای کاربران و ربات‌ها",
        "logentry-managetags-deactivate": "$1 {{GENDER:$2|برچسب}} غیرفعال شده \"$4\" برای کاربران و ربات‌ها",
+       "log-name-tag": "سیاهه برچسب",
        "rightsnone": "(هیچ)",
        "revdelete-summary": "خلاصه ویرایش",
        "feedback-adding": "افزودن بازخورد به صفحه...",
index 3e8499a..5a0be1b 100644 (file)
        "no-null-revision": "Nollamuokkausta sivulla \"$1\" ei voi tehdä",
        "badtitle": "Kelvoton sivun nimi",
        "badtitletext": "Pyytämäsi sivunimi oli virheellinen, tyhjä tai väärin linkitetty kieltenvälinen tai wikienvälinen nimi.\nSiinä saattaa olla yksi tai useampi sellainen merkki, jota ei voi käyttää sivujen nimissä.",
+       "title-invalid-empty": "Pyydetty sivunimi on tyhjä tai sisältää ainoastaan nimiavaruuden nimen.",
+       "title-invalid-utf8": "Pyydetyn sivun nimessä on kelvoton UTF–8-jakso.",
+       "title-invalid-interwiki": "Nimessä on kieltenvälinen linkki",
+       "title-invalid-talk-namespace": "Pyydetyn sivun nimi viittaa sellaiseen keskustelusivuun, jota ei voi olla olemassa.",
+       "title-invalid-characters": "Pyydetyn sivun nimessä on kelvottomia merkkejä: \"$1\".",
+       "title-invalid-relative": "Nimessä on suhteellinen polku. Suhteellisen polun (./, ../) sisältävät sivujen nimet eivät ole kelvollisia, koska ne eivät useinkaan toimi käyttäjien selaimissa.",
+       "title-invalid-magic-tilde": "Pyydetyn sivun nimessä on kelvoton taikamatojakso (<nowiki>~~~</nowiki>).",
+       "title-invalid-too-long": "Pyydetyn sivun nimi on liian pitkä. Se ei saa olla pitempi kuin $1 tavua käytettäessä UTF–8-koodausta.",
+       "title-invalid-leading-colon": "Pyydetyn sivun nimessä on kelvoton kaksoispiste nimen alussa.",
        "perfcached": "Nämä tiedot ovat välimuistista eivätkä välttämättä ole ajan tasalla. Välimuistissa on saatavilla enintään {{PLURAL:$1|yksi tulos|$1 tulosta}}.",
        "perfcachedts": "Nämä tiedot ovat välimuistista, ja ne on päivitetty viimeksi $1. Välimuistissa on saatavilla enintään {{PLURAL:$4|yksi tulos|$4 tulosta}}.",
        "querypage-no-updates": "Tämän sivun tietoja ei toistaiseksi päivitetä.",
        "import-interwiki-history": "Kopioi sivun koko historia ja kaikki versiot",
        "import-interwiki-templates": "Ota mukaan kaikki mallineet",
        "import-interwiki-submit": "Tuo",
-       "import-interwiki-namespace": "Kohdenimiavaruus:",
-       "import-interwiki-rootpage": "Kohteessa oleva perussivu (valinnainen):",
+       "import-mapping-default": "Tuonti vakiokohteisiin",
+       "import-mapping-namespace": "Tuonti nimiavaruuteen:",
+       "import-mapping-subpage": "Tuonti seuraavan sivun alasivuiksi:",
        "import-upload-filename": "Tiedostonimi:",
        "import-comment": "Kommentti:",
        "importtext": "Vie sivuja lähdewikistä käyttäen [[Special:Export|vientityökalua]].\nTallenna tiedot koneellesi ja tuo ne tällä sivulla.",
        "tags-edit-add": "Lisää nämä merkkaukset:",
        "tags-edit-remove": "Poista nämä merkkaukset:",
        "tags-edit-remove-all-tags": "(poista kaikki merkkaukset)",
-       "tags-edit-chosen-placeholder": "Valitse joitakin merkkauksia",
+       "tags-edit-chosen-placeholder": "Valitse jokin merkkaus",
        "tags-edit-chosen-no-results": "Ei löytynyt vastaavia merkkauksia",
        "tags-edit-reason": "Syy:",
-       "tags-edit-revision-submit": "Lähetä tekemäsi muutokset {{PLURAL:$1|tähän versioon|$1 versioon}}",
+       "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": "<strong>Muutokset on onnistuneesti toteutettu.</strong>",
-       "tags-edit-failure": "<strong>Muutoksia ei voitu toteuttaa:</strong> $1",
+       "tags-edit-success": "Muutokset on onnistuneesti toteutettu.",
+       "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.",
        "tags-edit-none-selected": "Valitse ainakin yksi merkkaus, jonka lisäät tai poistat.",
        "logentry-managetags-delete": "$1 {{GENDER:$2|tuhosi}} merkkauksen \"$4\" (poistettu $5 {{PLURAL:$5|sivuversiosta tai lokimerkinnästä}})",
        "logentry-managetags-activate": "$1 {{GENDER:$2|aktivoi}} merkkauksen \"$4\" käyttäjien ja bottien käytettäväksi",
        "logentry-managetags-deactivate": "$1 {{GENDER:$2|otti pois käytöstä}} merkkauksen \"$4\" käyttäjiltä ja boteilta",
-       "log-name-tag": "Merkkausten loki",
+       "log-name-tag": "Merkkausloki",
+       "log-description-tag": "Tällä sivulla näytetään käyttäjien lisäämät tai poistamat [[Special:Tags|merkkaukset]] yksittäisissä sivuversioissa tai lokimerkinnöissä. Lokiin eivät kirjaudu merkkaukset silloin, kun ne tulevat muokkaamisen, poistamisen tai muun vastaavan toimenpiteen yhteydessä.",
        "logentry-tag-update-add-revision": "$1 {{GENDER:$2|lisäsi}} {{PLURAL:$7|merkkauksen|merkkaukset}} $6 kohdeversioon $4 sivulla $3",
        "logentry-tag-update-add-logentry": "$1 {{GENDER:$2|lisäsi}} {{PLURAL:$7|merkkauksen|merkkaukset}} $6 lokimerkintään $5 sivulla $3",
        "logentry-tag-update-remove-revision": "$1 {{GENDER:$2|poisti}} {{PLURAL:$9|merkkauksen|merkkaukset}} $8 kohdeversiosta $4 sivulla $3",
index ce80478..319c398 100644 (file)
        "preview": "Forskoðan",
        "showpreview": "Forskoðan",
        "showdiff": "Sýn broytingar",
-       "anoneditwarning": "'''Ávaring:''' Tú hevur ikki ritað inn.\nTín IP-adressa verður goymd í rættisøguni fyri hesa síðuna.",
+       "anoneditwarning": "<strong>Ávaring:</strong> Tú ert ikki innritað/ur. Tín IP adressa verður alment sjónlig um tú gert rættingar. Um tú <strong>[$1 ritar inn]</strong> ella <strong>[$2 upprættar eina konto]</strong>, so verða tínar rættingar ognaðar tínum brúkaranavni, umframt aðrir fyrimunir.",
        "anonpreviewwarning": "''Tú ert ikki innritað/ur. Um tú goymir nú, so verður tín IP adressa goymd í rættingar søguni hjá hesi síðu. ''",
        "missingsummary": "'''Áminning:''' Tú hevur ikki givið nakran rættingar samandrátt.\nUm tú trýstir á \"{{int:savearticle}}\" enn einaferð, so verða tínar rættingar goymdar uttan samandrátt.",
        "missingcommenttext": "Vinarliga skriva eina viðmerking niðanfyri.",
        "showhideselectedversions": "Vís/fjal valdu versjónir",
        "editundo": "afturstilla",
        "diff-empty": "(Ongin munur)",
+       "diff-multi-sameuser": "({{PLURAL:$1|Ein millumliggjandi broyting|$1 millumliggjandi broytingar}} av sama brúkara ikki víst/ar)",
        "diff-multi-manyusers": "({{PLURAL:$1|Ein versjón sum liggur ímillum|$1 versjónir sum liggja ímillum}} skrivaðar av meira enn $2 {{PLURAL:$2|brúkara|brúkarum}} ikki víst)",
        "searchresults": "Leitúrslit",
        "searchresults-title": "Leiti úrslit fyri \"$1\"",
        "searchall": "alt",
        "showingresults": "Niðanfyri standa upp til {{PLURAL:$1|'''$1''' úrslit, sum byrjar|'''$1''' úrslit, sum byrja}} við #<b>$2</b>.",
        "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.",
        "powersearch-legend": "Víðkað leitan",
        "powersearch-ns": "Leita í navnaøkinum:",
        "undelete-show-file-submit": "Ja",
        "namespace": "Navnarúm:",
        "invert": "Umvend val",
+       "tooltip-invert": "Set kross í henda rútin fyri at fjala broytingar á síðum ið hoyra til tað valda navnarúmið (og tilhoyrandi navnarúm, um krossur er settur í)",
        "namespace_association": "Tilknýtt navnarúm",
        "tooltip-namespace_association": "Set kross í henda kassan soleiðis at kjak- ella evnisnavnarúm, sum hava samband við tað valda navnarúmið, eisini vera tikin við",
        "blanknamespace": "(Greinir)",
        "import-interwiki-history": "Avrita alla versjónssøguna fyri hesa síðu",
        "import-interwiki-templates": "Tak allar fyrimyndir við",
        "import-interwiki-submit": "Innflyta",
-       "import-interwiki-namespace": "Innflyt til navnarúm:",
        "import-upload-filename": "Fílunavn",
        "import-comment": "Viðmerking:",
        "importtext": "Útflyt fíluna frá kelduwiki'ini við at nýta [[Special:Export|útflutningstólið]].\nGoym hana á tínari teldu og legg hana so út her.",
        "tooltip-pt-mycontris": "Yvirlit yvir títt íkast",
        "tooltip-pt-login": "Vit mæla til at tú ritar inn, tað er tó ikki eitt krav.",
        "tooltip-pt-logout": "Rita út",
+       "tooltip-pt-createaccount": "Vit mæla tær til at upprætta eina konto, tað er tó ikki eitt krav.",
        "tooltip-ca-talk": "Kjak um innihaldssíðuna",
        "tooltip-ca-edit": "Tú kanst broyta hesa síðuna. Vinarliga nýt forskoðanarknøttin áðrenn tú goymir.",
        "tooltip-ca-addsection": "Byrja eitt nýtt brot",
        "exif-imagewidth": "Breidd",
        "exif-imagelength": "Hædd",
        "exif-bitspersample": "Bits per komponent",
+       "exif-orientation": "Rætningur",
+       "exif-xresolution": "Vatnrøtt upploysn",
+       "exif-yresolution": "Loddrøtt upploysn",
+       "exif-datetime": "Broytingartíð",
+       "exif-make": "Framleiðari av myndatólinum",
        "exif-model": "Slag av myndatóli",
+       "exif-software": "Forrit brúkt",
        "exif-artist": "Rithøvundur",
        "exif-copyright": "Upphavsrætt haldari",
+       "exif-exifversion": "Exif versión",
+       "exif-colorspace": "Litrúm",
        "exif-usercomment": "Viðmerkingar frá brúkarum",
+       "exif-datetimeoriginal": "Nær myndin bleiv tikin",
+       "exif-datetimedigitized": "Tíðspunkt fyri talgildan",
        "exif-exposuretime-format": "$1 sek ($2)",
        "exif-flash": "Blits",
        "exif-jpegfilecomment": "JPEG-fíluviðmerking",
        "external_image_whitelist": "↓  #Lat hesa linjuna vera júst sum hon er<pre>\n#Skriva partar av vanligum orðingum (bert partin sum er ímillum //) niðanfyri\n#Hesar verða samanbornar við URL'ar á eksternum (hotlinkaðum) myndum\n#Tey sum passa saman verða víst sum myndir, í øðrum lagi verður bert ein slóð til myndina víst\n#Linjur sum byrja við # verða viðfarin sum viðmerkingar\n#Hetta er ikki følsamt fyri stórir og lítlir bókstavir\n\n#Skriva allar vanligar málberingar omanfyri hesa linju. Lat hesa linjuna verða júst sum hon er</pre>",
        "tag-filter": "[[Special:Tags|Tag]] filtur:",
        "tag-filter-submit": "Filtur",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Merki|Merkir}}]]: $2)",
        "tags-title": "Lyklaorð",
        "tags-edit": "rætta",
        "tags-hitcount": "$1 {{PLURAL:$1|broyting|broytingar}}",
        "compare-rev1": "Versjón 1",
        "compare-rev2": "Versjón 2",
        "compare-submit": "Samanber",
+       "logentry-delete-delete": "$1 {{GENDER:$2|slettaði}} síðuna $3",
+       "logentry-move-move": "$1 {{GENDER:$2|flutti}} síðuna $3 til $4",
        "logentry-newusers-create": "Brúkarakonta $1 varð {{GENDER:$2|upprættað}}",
+       "logentry-upload-upload": "$1 {{GENDER:$2|legði út}} $3",
        "rightsnone": "(ongin)",
        "revdelete-summary": "yvirlit yvir broytingar",
        "searchsuggest-search": "Leita",
index 0fc6415..8bab518 100644 (file)
                        "Yzelf",
                        "0x010C",
                        "Thibaut120094",
-                       "NemesisIII"
+                       "NemesisIII",
+                       "Housterdam"
                ]
        },
        "tog-underline": "Souligner les liens :",
        "passwordtooshort": "Votre mot de passe doit contenir au moins $1 caractère{{PLURAL:$1||s}}.",
        "passwordtoolong": "Les mots de passe ne peuvent pas dépasser {{PLURAL:$1|1 caractère|$1 caractères}}.",
        "password-name-match": "Votre mot de passe doit être différent de votre nom d'utilisateur.",
-       "password-login-forbidden": "L'utilisation de ce nom d'utilisateur et de ce mot de passe a été interdite.",
+       "password-login-forbidden": "L'utilisation de ce nom d'utilisateur et/ou de ce mot de passe a été interdite.",
        "mailmypassword": "Réinitialiser le mot de passe",
        "passwordremindertitle": "Nouveau mot de passe temporaire pour {{SITENAME}}",
        "passwordremindertext": "Quelqu'un (probablement vous, ayant l'adresse IP $1) a demandé un nouveau mot de\npasse pour {{SITENAME}} ($4). Un mot de passe temporaire a été créé pour\nl'utilisateur « $2 » et est « $3 ». Si cela était votre intention, vous devrez\nvous connecter et choisir un nouveau mot de passe.\nVotre mot de passe temporaire expirera dans $5 jour{{PLURAL:$5||s}}.\n\nSi vous n'êtes pas l'auteur de cette demande, ou si vous vous souvenez à présent\nde votre ancien mot de passe et que vous ne souhaitez plus en changer, vous\npouvez ignorer ce message et continuer à utiliser votre ancien mot de passe.",
        "history-feed-description": "Historique pour cette page sur le wiki",
        "history-feed-item-nocomment": "$1 le $2",
        "history-feed-empty": "La page demandée n'existe pas.\nElle a peut-être été effacée ou renommée.\nEssayez de [[Special:Search|rechercher sur le wiki]] pour trouver des pages en rapport.",
+       "history-edit-tags": "Modifier les balises des révisions sélectionnées",
        "rev-deleted-comment": "(résumé de modification retiré)",
        "rev-deleted-user": "(nom d'utilisateur retiré)",
        "rev-deleted-event": "(détails de l’entrée retirée)",
        "revdelete-modify-missing": "Erreur lors de la modification de l'élément avec l'ID $1 : il est manquant dans la base de données !",
        "revdelete-no-change": "'''Attention :''' L'élément daté du $1 à $2 a déjà les paramètres de visibilité demandés.",
        "revdelete-concurrent-change": "Erreur lors de la modification de l'élément daté du $1 à $2 : son statut a été changé par quelqu'un d'autre pendant que vous le modifiez.\nVérifiez les journaux.",
-       "revdelete-only-restricted": "Erreur lors de la suppression de l'entrée datée du $1 à $2 : vous ne pouvez pas supprimer ces éléments aux administrateurs sans également sélectionner des autres options de suppression.",
+       "revdelete-only-restricted": "Erreur lors de la suppression de l'entrée datée du $1 à $2 : vous ne pouvez pas supprimer ces éléments aux administrateurs sans également sélectionner les autres options de suppression.",
        "revdelete-reason-dropdown": "* Raisons courantes de suppression :\n** Violation des droits d'auteurs ;\n** Commentaires ou renseignements personnels inappropriés ;\n** Informations potentiellement diffamatoires.",
        "revdelete-otherreason": "Autre raison / raison supplémentaire :",
        "revdelete-reasonotherlist": "Autre raison",
        "uploadbtn": "Importer le fichier",
        "reuploaddesc": "Annuler et retourner au formulaire d'import",
        "upload-tryagain": "Envoyer la description du fichier modifiée",
-       "uploadnologin": "Pas connecté",
+       "uploadnologin": "Non connecté",
        "uploadnologintext": "Vous devez $1 pour importer des fichiers.",
        "upload_directory_missing": "Le répertoire d’import de fichier ($1) est introuvable et n’a pas pu être créé par le serveur web.",
        "upload_directory_read_only": "Le répertoire d’import de fichier ($1) n’est pas accessible en écriture depuis le serveur web.",
        "movepagetalktext": "La page de discussion associée, si présente, sera automatiquement renommée '''sauf si :'''\n* vous déplacez la page vers un autre espace de noms, ou\n* une page de discussion non vide existe déjà sous le nouveau nom, ou\n* vous décochez la case ci-dessous.\n\nDans ces cas-là, vous devrez renommer ou fusionner cette page de discussion manuellement si vous le désirez.",
        "movearticle": "Renommer la page :",
        "moveuserpage-warning": "'''Attention :''' Vous êtes sur le point de renommer une page d’utilisateur. Veuillez noter que seule la page sera renommée et que l’utilisateur '''ne''' sera '''pas''' renommé.",
-       "movecategorypage-warning": "<strong>Avertissement :</strong> Vous êtes sur le point de renommer une page de catégorie. Veuillez noter que seule la page sera renommée et que toutes les pages dans l'ancienne catégorie ne seront <em>pas</em> transférées dans la nouvelle.",
+       "movecategorypage-warning": "<strong>Avertissement :</strong> Vous êtes sur le point de renommer une page de catégorie. Veuillez noter que seule la catégorie sera renommée et <em>qu’aucune</em> des pages de l’ancienne catégorie ne sera transférée dans la nouvelle.",
        "movenologintext": "Pour pouvoir renommer une page, vous devez être [[Special:UserLogin|identifié{{GENDER:||e}}]] avec un compte utilisateur enregistré et d'ancienneté suffisante.",
        "movenotallowed": "Vous n'avez pas la permission de renommer les pages.",
        "movenotallowedfile": "Vous n'avez pas la permission de renommer les fichiers.",
        "import-interwiki-history": "Copier toutes les versions de l’historique de cette page",
        "import-interwiki-templates": "Inclure tous les modèles",
        "import-interwiki-submit": "Importer",
-       "import-interwiki-namespace": "Espace de noms de destination :",
-       "import-interwiki-rootpage": "Page racine de destination (optionnelle) :",
+       "import-mapping-default": "Importer aux emplacements par défaut",
+       "import-mapping-namespace": "Importer vers un espace de noms :",
+       "import-mapping-subpage": "Importer comme sous-pages de la page suivante :",
        "import-upload-filename": "Nom du fichier :",
        "import-comment": "Commentaire :",
        "importtext": "Veuillez exporter le fichier depuis le wiki d'origine en utilisant son [[Special:Export|outil d'exportation]].\nSauvegardez-le sur votre disque dur puis importez-le ici.",
        "patrol-log-page": "Journal des relectures",
        "patrol-log-header": "Voici l’historique des versions relues.",
        "log-show-hide-patrol": "$1 l’historique des relectures",
-       "log-show-hide-tag": "balise de journal $1",
+       "log-show-hide-tag": "$1 le journal des balises",
        "deletedrevision": "Ancienne version $1 supprimée",
        "filedeleteerror-short": "Erreur lors de la suppression du fichier : $1",
        "filedeleteerror-long": "Des erreurs ont été rencontrées lors de la suppression du fichier :\n\n$1",
        "tags-apply-no-permission": "Vous n’avez pas le droit d’appliquer des balises de changement avec vos modifications.",
        "tags-apply-not-allowed-one": "La balise « $1 » n’est pas autorisée à être appliquée manuellement.",
        "tags-apply-not-allowed-multi": "{{PLURAL:$2|La balise suivante n’est pas autorisée à être appliquée|Les balises suivantes ne sont pas autorisées à être appliquées}} manuellement : $1",
+       "tags-update-no-permission": "Vous n’avez pas le droit d’ajouter ou de supprimer des balises de modification des révisions individuelles ou des entrées de journal.",
+       "tags-update-add-not-allowed-one": "La balise « $1 » ne peut pas être ajoutée manuellement.",
+       "tags-update-add-not-allowed-multi": "{{PLURAL:$2|La balise suivante ne peut pas être ajoutée|Les balises suivantes ne peuvent pas être ajoutées}} manuellement : $1",
+       "tags-update-remove-not-allowed-one": "La balise « $1 » ne peut pas être enlevée.",
+       "tags-update-remove-not-allowed-multi": "{{PLURAL:$2|La balise suivante ne peut pas être enlevée|Les balises suivantes ne peuvent pas être enlevées}} manuellement : $1",
+       "tags-edit-title": "Modifier les balises",
+       "tags-edit-manage-link": "Gérer les balises",
+       "tags-edit-revision-selected": "{{PLURAL:$1|Révision sélectionnée|Révisions sélectionnées}} de [[:$2]]:",
+       "tags-edit-logentry-selected": "{{PLURAL:$1|Événement de journal sélectionné|Événements de journal sélectionnés}} :",
+       "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-new-tags": "Nouvelles balises :",
+       "tags-edit-add": "Ajouter ces balises :",
+       "tags-edit-remove": "Enlever ces balises :",
+       "tags-edit-remove-all-tags": "(supprimer toutes les balises)",
+       "tags-edit-chosen-placeholder": "Sélectionner certaines balises",
+       "tags-edit-chosen-no-results": "Aucune balise correspondante trouvée",
        "tags-edit-reason": "Motif :",
-       "tags-edit-success": "<strong>Les modifications ont été appliquées avec succès.</strong>",
+       "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-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.",
+       "tags-edit-none-selected": "Veuillez sélectionner au moins une balise à ajouter ou enlever.",
        "comparepages": "Comparer des pages",
        "compare-page1": "Page 1",
        "compare-page2": "Page 2",
        "logentry-managetags-delete": "$1 {{GENDER:$2|a supprimé}} la balise « $4 » (retirée {{PLURAL:$5|d'une révision ou entrée de journal|de $5 révisions ou entrées de journal}})",
        "logentry-managetags-activate": "$1 {{GENDER:$2|a activé}} la balise \"$4\" pour l’usage des utilisateurs et des robots",
        "logentry-managetags-deactivate": "$1 {{GENDER:$2|a désactivé}} la balise « $4 » pour l’usage des utilisateurs et des robots",
+       "log-name-tag": "Journal des balises",
+       "log-description-tag": "Cette page montre quand des utilisateurs ont ajouté ou supprimé des [[Special:Tags|balises]] de révisions individuelles ou d’entrées de journal. Le journal ne liste pas les actions de marquage quand elles ont lieu au cours d’une modification, d’une suppression, ou d’une action semblable.",
+       "logentry-tag-update-add-revision": "$1 {{GENDER:$2|a ajouté}} {{PLURAL:$7|la balise|les balises}} $6 à la révision $4 de la page $3",
+       "logentry-tag-update-add-logentry": "$1 {{GENDER:$2|a ajouté}} {{PLURAL:$7|la balise|les balises}} $6 à l’entrée de journal $5 de la page $3",
+       "logentry-tag-update-remove-revision": "$1 {{GENDER:$2|a supprimé}} {{PLURAL:$9|la balise|les balises}} $8 de la révision $4 de la page $3",
+       "logentry-tag-update-remove-logentry": "$1 {{GENDER:$2|a supprimé}} {{PLURAL:$9|la balise|les balises}} $8 de l’entrée de journal $5 de la page $3",
+       "logentry-tag-update-revision": "$1 {{GENDER:$2|a mis à jour}} les balises de la révision $4 de la page $3 ($6 {{PLURAL:$7|ajoutée|ajoutées}} ; $8 {{PLURAL:$9|supprimée|supprimées}})",
+       "logentry-tag-update-logentry": "$1 {{GENDER:$2|a mis à jour}} les balises de l’entrée de journal $5 de la page $3 ($6 {{PLURAL:$7|ajoutée|ajoutées}} ; $8 {{PLURAL:$9|supprimée|supprimées}})",
        "rightsnone": "(aucun)",
        "revdelete-summary": "résumé de modification",
        "feedback-adding": "Ajout de vos commentaires à la page...",
index 8c196eb..616650f 100644 (file)
        "otherlanguages": "Ôtres lengoues",
        "redirectedfrom": "(Redirigiêe 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}}.",
        "protectedpage": "Pâge protègiêe",
        "login-abort-generic": "Voutra tentativa de branchement at pas reussi - Anulâye",
        "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.",
+       "pt-login": "Sè branchiér",
+       "pt-login-button": "Sè branchiér",
+       "pt-createaccount": "Fâre un compto",
+       "pt-userlogout": "Sè dèbranchiér",
        "php-mail-error-unknown": "Fôta encognua dens 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.",
        "action-siteadmin": "vèrrolyér ou ben dèvèrrolyér la bâsa de balyês",
        "action-sendemail": "mandar des mèssâjos",
        "nchanges": "$1 changement{{PLURAL:$1||s}}",
+       "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.",
        "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",
        "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-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",
+       "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",
        "diff": "dif",
        "hist": "hist",
        "booksources": "Ôvres de refèrence",
        "booksources-search-legend": "Rechèrchiér entre-mié les ôvres de refèrence",
        "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-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 :",
        "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",
        "import-interwiki-submit": "Importar",
-       "import-interwiki-namespace": "Èspâço de noms de dèstinacion :",
-       "import-interwiki-rootpage": "Pâge racena de dèstinacion (u chouèx) :",
        "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.",
index 8f68f90..366ace0 100644 (file)
        "import-interwiki-history": "Aal a werjuunen faan det sidj importiare",
        "import-interwiki-templates": "Mä aal a föörlaagen",
        "import-interwiki-submit": "Import",
-       "import-interwiki-namespace": "Tu hün nöömrüm:",
-       "import-interwiki-rootpage": "Tu hün sidj (optional):",
        "import-upload-filename": "Dateinööm:",
        "import-comment": "Komentaar:",
        "importtext": "Wees so gud an eksportiare det datei mä det spezial-sidj [[Special:Export|Eksport]] ütj det ööder Wiki. Det seekerst dü üüb dan reegner an schüürst det do heer huuch.",
index e4f8d1d..f26d0ad 100644 (file)
        "expand_templates_output": "Risultât",
        "expand_templates_ok": "Va ben",
        "expand_templates_remove_comments": "Gjave i coments",
-       "expand_templates_preview": "Anteprime"
+       "expand_templates_preview": "Anteprime",
+       "special-characters-group-symbols": "Simbols"
 }
index 28daf16..da9d973 100644 (file)
        "revdelete-unsuppress": "Beheinings op tebeksette feroarings fuorthelje",
        "revdelete-log": "Reden:",
        "revdelete-submit": "Tapasse op selektearre bewurking",
-       "revdelete-success": "<strong>Sichtberens fan 'e feroaring mei sukses ynsteld.</strong>",
-       "logdelete-success": "<strong>Sichtberens fan it barren mei sukses ynsteld.</strong>",
+       "revdelete-success": "Sichtberens fan 'e feroaring mei sukses ynsteld.",
+       "logdelete-success": "Sichtberens fan it barren mei sukses ynsteld.",
        "revdel-restore": "Sichtberens feroarje",
        "pagehist": "Sideskiednis",
        "deletedhist": "Wiske skiednis",
index b50d4bc..f498545 100644 (file)
        "import-upload": "Uaslódaigh sonraí XML",
        "import-token-mismatch": "Sonraí seisiún a bheith caillte. Déan iarracht arís.",
        "importlogpage": "Log iompórtáil",
-       "import-logentry-interwiki": "traisvicithe $1",
        "tooltip-pt-userpage": "Do leathanach úsáideora",
        "tooltip-pt-anonuserpage": "Leathanach úsáideora don IP ina dhéanann tú do chuid athruithe",
        "tooltip-pt-mytalk": "Do leathanach phlé",
index 80eff46..ba298f5 100644 (file)
        "import-interwiki-text": "拣正只wiki同页面标题去导入。修订日期同编辑人会一齐存到。全部𠮶跨 wiki 导入操作会到[[Special:Log/import|导入日志]]记到。",
        "import-interwiki-history": "复制个页𠮶全部历史",
        "import-interwiki-submit": "导入",
-       "import-interwiki-namespace": "拿页面移到空间名:",
        "import-comment": "说明:",
        "importtext": "请用 Special:Export 从源 wiki 导出档案,再存到倷𠮶磁盘然后上传到个首。",
        "importstart": "导入页面中...",
        "xml-error-string": "$1 位到 $2 行,$3 列 ($4字节):$5",
        "importlogpage": "导入日志",
        "importlogpagetext": "管理员由别𠮶 wiki 导入页面同到佢俚𠮶编辑历史记录。",
-       "import-logentry-upload": "通过档案上传导入𠮶[[$1]]",
        "import-logentry-upload-detail": "$1只修改",
-       "import-logentry-interwiki": "跨wiki$1",
        "import-logentry-interwiki-detail": "$2𠮶$1只修改",
        "tooltip-pt-userpage": "偶𠮶用户页",
        "tooltip-pt-anonuserpage": "倷编辑本站用𠮶IP对应𠮶用户页",
index 2837d29..1634938 100644 (file)
        "import-interwiki-text": "揀正隻wiki同頁面標題去導入。修訂日期同編輯人會一齊存到。全部嗰跨 wiki 導入操作會到[[Special:Log/import|導入日誌]]記到。",
        "import-interwiki-history": "複製箇頁嗰全部歷史",
        "import-interwiki-submit": "導入",
-       "import-interwiki-namespace": "拿頁面移到空間名:",
        "import-comment": "說明:",
        "importtext": "請用 Special:Export 從源 wiki 導出檔案,再存到倷嗰磁盤然後上傳到箇首。",
        "importstart": "導入頁面中...",
        "xml-error-string": "$1 位到 $2 行,$3 列 ($4字節):$5",
        "importlogpage": "導入日誌",
        "importlogpagetext": "管理員由別嗰 wiki 導入頁面同到佢俚嗰編輯歷史記錄。",
-       "import-logentry-upload": "通過檔案上傳導入嗰[[$1]]",
        "import-logentry-upload-detail": "$1隻修改",
-       "import-logentry-interwiki": "跨wiki$1",
        "import-logentry-interwiki-detail": "$2嗰$1隻修改",
        "tooltip-pt-userpage": "汝嗰用戶頁",
        "tooltip-pt-anonuserpage": "倷編輯本站用嗰IP對應嗰用戶頁",
index 3969199..e82593c 100644 (file)
        "revdelete-unsuppress": "Thoir air falbh na bacaidhean air mùthaidhean a chaidh aiseag",
        "revdelete-log": "Adhbhar:",
        "revdelete-submit": "Cuir an sàs e air {{PLURAL:$1|am mùthadh|na mùthaidhean}} a thagh thu",
-       "revdelete-success": "<strong>Chaidh so-fhaicsinneachd a' mhùthaidh ùrachadh.</strong>",
-       "revdelete-failure": "<strong>Cha b' urrainn dhuinn so-fhaicsinneachd a' mhùthaidh ùrachadh:</strong>\n$1",
-       "logdelete-success": "<strong>Chaidh faicsinneachd an loga a shuidheachadh.</strong>",
-       "logdelete-failure": "<strong>Cha b' urrainn dhuinn faicsinneachd an loga a shuidheachadh:</strong>\n$1",
+       "revdelete-success": "Chaidh so-fhaicsinneachd a' mhùthaidh ùrachadh.",
+       "revdelete-failure": "Cha b' urrainn dhuinn so-fhaicsinneachd a' mhùthaidh ùrachadh:\n$1",
+       "logdelete-success": "Chaidh faicsinneachd an loga a shuidheachadh.",
+       "logdelete-failure": "Cha b' urrainn dhuinn faicsinneachd an loga a shuidheachadh:\n$1",
        "revdel-restore": "mùth follaiseachd",
        "pagehist": "Eachdraidh na duilleige",
        "deletedhist": "Eachdraidh a chaidh a sguabadh às",
        "import-interwiki-history": "Dèan lethbhreac de dh'eachdraidh nam mùthaidhean slàna airson na duilleige seo",
        "import-interwiki-templates": "Gabh a-steach na teamplaidean uile",
        "import-interwiki-submit": "Ion-phortaich",
-       "import-interwiki-namespace": "Ainm-spàs-uidhe:",
-       "import-interwiki-rootpage": "Duilleag freumha a' chinn-uidhe (roghainneil):",
        "import-upload-filename": "Ainm an fhaidhle:",
        "import-comment": "Beachd:",
        "importtext": "Às-phortaich am faidhle on uicidh tùsail le [[Special:Export|goireas an às-phortachaidh]].\nSàbhail e air a' choimpiutair agad is luchdaich suas e an-seo.",
        "tooltip-pt-mycontris": "Liosta na h-obrach a rinn thu",
        "tooltip-pt-login": "Mholamaidh dhut logadh a-steach; ge-tà, cha leig thu leas seo a dhèanamh",
        "tooltip-pt-logout": "Log a-mach",
+       "tooltip-pt-createaccount": "Ged nach eil e riatanach, tha e nas fhearr ma chruthaicheas tu cunntas agus ma logas tu air.",
        "tooltip-ca-talk": "Deasbad mu dhuilleag na susbainte",
        "tooltip-ca-edit": "'S urrainn dhut an duilleag seo a dheasachadh. Saoil an cleachd thu an ro-shealladh mus sàbhail thu?",
        "tooltip-ca-addsection": "Tòisich air earrann ùr",
index f8252a8..5f1fbf4 100644 (file)
        "no-null-revision": "Non se puido crear a nova revisión nula para a páxina \"$1\"",
        "badtitle": "Título incorrecto",
        "badtitletext": "O título da páxina pedida non era válido, estaba baleiro ou proviña dunha ligazón interlingüística ou interwiki incorrecta.\nPoida que conteña un ou máis caracteres dos que non se poden empregar nos títulos.",
+       "title-invalid-empty": "O título de páxina solicitado está baleiro ou só contén o nome do espazo de nomes.",
+       "title-invalid-utf8": "O título de páxina solicitado contén unha secuencia UTF-8 inválida.",
+       "title-invalid-interwiki": "O título contén unha ligazón interwiki",
+       "title-invalid-talk-namespace": "O título de páxina solicitado refírese a unha páxina de conversa que pode non existir.",
+       "title-invalid-characters": "O título de páxina solicitado contén caracteres inválidos: \"$1\".",
+       "title-invalid-relative": "O título ten unha ruta relativa. Os títulos de páxina relativos (./, ../) son inválidos, porque non van ser accesibles cando se consulten co navegador do usuario.",
+       "title-invalid-magic-tilde": "O título de páxina solicitado contén unha secuencia con tiles inválida (<nowiki>~~~</nowiki>).",
+       "title-invalid-too-long": "O título de páxina solicitado é moi longo. Non pode ser maior de $1 bytes en codificación UTF-8.",
+       "title-invalid-leading-colon": "O título de páxina solicitado contén un punto e coma inválido ó comezo.",
        "perfcached": "Esta información é da memoria caché e pode ser que non estea completamente actualizada. Hai un máximo de {{PLURAL:$1|$1 resultado dispoñible|$1 resultados dispoñibles}} na caché.",
        "perfcachedts": "Esta información é da memoria caché. Última actualización: $2 ás $3. Hai un máximo de {{PLURAL:$4|$4 resultado dispoñible|$4 resultados dispoñibles}} na caché.",
        "querypage-no-updates": "Neste momento están desactivadas as actualizacións nesta páxina. O seu contido non se modificará.",
        "import-interwiki-history": "Copiar todas as versións que hai no historial desta páxina",
        "import-interwiki-templates": "Incluír todos os modelos",
        "import-interwiki-submit": "Importar",
-       "import-interwiki-namespace": "Espazo de nomes de destino:",
-       "import-interwiki-rootpage": "Páxina raíz de destino (opcional):",
+       "import-mapping-default": "Importar aos lugares predeterminados",
+       "import-mapping-namespace": "Importar a un espazo de nomes:",
+       "import-mapping-subpage": "Importar como subpáxinas da seguinte páxina:",
        "import-upload-filename": "Nome do ficheiro:",
        "import-comment": "Comentario:",
        "importtext": "Por favor, exporte o ficheiro do wiki de orixe usando a [[Special:Export|ferramenta de exportación]].\nGárdeo no seu disco duro e cárgueo aquí.",
        "tags-source-manual": "Aplicado manualmente por usuarios e bots",
        "tags-source-none": "Xa non está en uso",
        "tags-edit": "editar",
-       "tags-delete": "Borrar",
+       "tags-delete": "borrar",
        "tags-activate": "activar",
-       "tags-deactivate": "Reactivar",
+       "tags-deactivate": "desactivar",
        "tags-hitcount": "$1 {{PLURAL:$1|modificación|modificacións}}",
        "tags-manage-no-permission": "Non ten os permisos necesarios para modificar etiquetas.",
        "tags-create-heading": "Crear unha nova etiqueta",
        "tags-create-explanation": "Por defecto, as etiquetas creadas recentemente poderán ser empregadas polos usuarios e os bots.",
-       "tags-create-tag-name": "Nome da páxina:",
+       "tags-create-tag-name": "Nome da etiqueta:",
        "tags-create-reason": "Motivo:",
        "tags-create-submit": "Crear",
        "tags-create-no-name": "Debe especificar unha páxina.",
        "tags-create-already-exists": "A páxina \"$1\" xa existe.",
        "tags-create-warnings-above": "{{PLURAL:$2|Atopouse o seguinte erro|Atopáronse os seguintes erros}} ao intentar crear a etiqueta \"$1\":",
        "tags-create-warnings-below": "Desexa continuar creando a etiqueta?",
-       "tags-delete-title": "Borrar etiqueta",
+       "tags-delete-title": "Borrar unha etiqueta",
        "tags-delete-explanation-initial": "Está a piques de borrar a etiqueta \"$1\" da base de datos.",
        "tags-delete-explanation-in-use": "Ha eliminarse {{PLURAL:$2|dunha revisión ou entrada|das $2 revisións e/ou entradas}} de rexistro {{PLURAL:$2|á|ás}} que actualmente se aplica.",
        "tags-delete-explanation-warning": "Esta acción é <strong>irreversible</strong> e nin sequera os administradores da base de datos poderán desfacela. Asegúrese de que é esta a etiqueta que desexa borrar.",
        "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-activate-title": "Activar etiqueta",
+       "tags-activate-title": "Activar unha etiqueta",
        "tags-activate-question": "Está a piques de activar a etiqueta\"$1\".",
        "tags-activate-reason": "Motivo:",
        "tags-activate-not-allowed": "Non é posible activar a páxina \"$1\".",
        "tags-activate-not-found": "A páxina \"$1\" non existe.",
        "tags-activate-submit": "Activar",
-       "tags-deactivate-title": "Desactivar etiqueta",
+       "tags-deactivate-title": "Desactivar unha etiqueta",
        "tags-deactivate-question": "Está a piques de desactivar a etiqueta \"$1\".",
        "tags-deactivate-reason": "Motivo:",
        "tags-deactivate-not-allowed": "Non é posible reactivar a páxina \"$1\".",
-       "tags-deactivate-submit": "Reactivar",
+       "tags-deactivate-submit": "Desactivar",
        "tags-apply-no-permission": "Non ten permisos para aplicar etiquetas de cambios xunto cos seus tus cambios.",
        "tags-apply-not-allowed-one": "A etiqueta \"$1\" non se puede aplicar manualmente.",
        "tags-apply-not-allowed-multi": "{{PLURAL:$2|A seguinte etiqueta non se pode|As seguintes etiquetas non se poden}} aplicar manualmente: $1",
        "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": "<strong>Os cambios aplicáronse con éxito.</strong>",
-       "tags-edit-failure": "<strong>Non se puideron aplicar os cambios:</strong>\n$1",
+       "tags-edit-success": "Os cambios aplicáronse con éxito.",
+       "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.",
        "tags-edit-none-selected": "Por favor, seleccione polo menos unha etiqueta que engadir ou quitar.",
index 4b99ef0..431432b 100644 (file)
        "import-interwiki-history": "Ἀντιγράφειν ἁπάσας τὰς ἐκδόσεις τοῦ ἱστορικοῦ τῆσδε τῆς δέλτου",
        "import-interwiki-templates": "Συμπερίληψις ἁπάντων τῶν προτύπων",
        "import-interwiki-submit": "Εἰσάγειν",
-       "import-interwiki-namespace": "Ὀνοματεῖον προορισμός:",
        "import-upload-filename": "Ὄνομα ἀρχείου:",
        "import-comment": "Σχόλιον:",
        "importstart": "Εἰσάγειν δέλτους...",
        "import-invalid-interwiki": "Μὴ δυνατὴ ἡ εἰσαγωγὴ ἐκ τοῦ καθωρισμένου βίκι.",
        "importlogpage": "Εἰσάγειν κατάλογον",
        "importlogpagetext": "Διαχειριστικαὶ εἰσαγωγαὶ δέλτων ἐχουσῶν ἱστορικὸν μεταγραφῶν προερχόμενον ἐξ ἑτέρων βίκι.",
-       "import-logentry-upload": "εἰσήχθη τὸ [[$1]]",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|ἀναθεώρησις|ἀναθεωρήσεις}}",
-       "import-logentry-interwiki": "ὑπερδιαβικιπεποιημένη $1",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|ἀναθεώρησις|ἀναθεωρήσεις}} ἐκ τοῦ $2",
        "tooltip-pt-userpage": "Ἡ δέλτος χρωμένου σου",
        "tooltip-pt-anonuserpage": "Ἡ δέλτος χρωμένου περὶ τοῦ ip ὅνπερ μεταγράφεις ὡς",
        "expandtemplates": "Ἐπεκτείνειν τὰ πρότυπα",
        "expand_templates_output": "Ἀποτέλεσμα",
        "expand_templates_ok": "εἶεν",
-       "expand_templates_preview": "Προθεώρησις"
+       "expand_templates_preview": "Προθεώρησις",
+       "special-characters-group-latin": "Λατινικόν",
+       "special-characters-group-latinextended": "Λατινικὸν προεκτεταμένον",
+       "special-characters-group-ipa": "ΔΦΑ",
+       "special-characters-group-symbols": "Σύμβολα",
+       "special-characters-group-greek": "Ἑλληνικόν",
+       "special-characters-group-cyrillic": "Κυριλλικόν",
+       "special-characters-group-arabic": "Ἀραβικόν",
+       "special-characters-group-hebrew": "Ἑβραϊκόν",
+       "special-characters-group-telugu": "Τελουγούϊον"
 }
index 3ac5b34..d5f0037 100644 (file)
        "import-interwiki-history": "Alli früeneri Versione vo dere Syte importiere",
        "import-interwiki-templates": "Mit allene Vorlage",
        "import-interwiki-submit": "Import",
-       "import-interwiki-namespace": "Ziilnamensruum:",
-       "import-interwiki-rootpage": "Ziilstammsyte (optional):",
        "import-upload-filename": "Dateiname:",
        "import-comment": "Grund:",
        "importtext": "Datei iber d Spezialsyte [[Special:Export|Exportfunktion]] us em Quellwiki exportiere.\nDie uf em lokale Rächner spychere un derno do uffelade.",
index 681e60d..f66f21f 100644 (file)
@@ -23,7 +23,8 @@
                        "לערי ריינהארט",
                        "아라",
                        "Vyom",
-                       "Macofe"
+                       "Macofe",
+                       "Arbhatt"
                ]
        },
        "tog-underline": "કડીઓની નીચે લીટી (અંડરલાઇન):",
        "personaltools": "વ્યક્તિગત સાધનો",
        "articlepage": "લેખનું પાનું જુઓ",
        "talk": "ચર્ચા",
-       "views": "દેખાવ",
+       "views": "દેખાવ",
        "toolbox": "સાધનો",
        "userpage": "સભ્યનું પાનું જુઓ",
        "projectpage": "પ્રકલ્પનું પાનું જુઓ",
        "copyrightpage": "{{ns:project}}:પ્રકાશનાધિકાર",
        "currentevents": "વર્તમાન ઘટનાઓ",
        "currentevents-url": "Project:વર્તમાન ઘટનાઓ",
-       "disclaimers": "àª\9cાહà«\87ર ઇનકાર",
-       "disclaimerpage": "Project:સામાનà«\8dય àª\9cાહà«\87ર ઇનકાર",
+       "disclaimers": "દાવà«\87દારà«\80 ઇનકાર",
+       "disclaimerpage": "Project:સરà«\8dવસાધારણ àª¦àª¾àªµà«\87દારà«\80 ઇનકાર",
        "edithelp": "ફેરફારો માટે મદદ",
        "mainpage": "મુખપૃષ્ઠ",
        "mainpage-description": "મુખપૃષ્ઠ",
        "viewsourceold": "સ્રોત જુઓ",
        "editlink": "ફેરફાર",
        "viewsourcelink": "સ્રોત જુઓ",
-       "editsectionhint": "પરિચ્છેદ ફેરફાર કરો: $1",
+       "editsectionhint": "પરિચ્છેદમાં ફેરફાર કરો: $1",
        "toc": "અનુક્રમણિકા",
        "showtoc": "બતાવો",
        "hidetoc": "છુપાવો",
        "viewsourcetext": "આપ આ પાનાનો મૂળ સ્રોત નિહાળી શકો છો અને તેની નકલ (copy) પણ કરી શકો છો:",
        "viewyourtext": "આપ આ પાનાનાં '''આપનાં સંપાદનો'''નો મૂળ સ્રોત નિહાળી શકો છો અને તેની નકલ (copy) પણ કરી શકો છો:",
        "protectedinterface": "આ પાનું સોફ્ટવેર માટે ઇન્ટરફેઇસ ટેક્સટ આપે છે, અને તેને દુરુપયોગ રોકવા માટે સ્થગિત કર્યું છે.\nબધાંજ વિકિ માટે ભાષાંતર ઉમેરવા કે બદલવા માટે, કૃપા કરી [//translatewiki.net/ translatewiki.net], મિડિયાવિકિ સ્થાનિયકરણ પ્રકલ્પ, વાપરો.",
-       "editinginterface": "'''ચેતવણી:''' તમે જે પાનામાં ફેરફાર કરી રહ્યા છો તે પાનું સોફ્ટવેર માટે ઇન્ટરફેસ ટેક્સટ પુરી પાડે છે.\nઅહીંનો બદલાવ આ વિકિ પર ઉપસ્થિત અન્ય સભ્યોના ઇન્ટરફેસનાં દેખાવ ઉપર અસરકર્તા બનશે.\nબધાંજ વિકિ માટે ભાષાંતર ઉમેરવા કે બદલવા માટે કૃપા કરી [//translatewiki.net/ translatewiki.net], મિડિયાવિકી સ્થાનિયકરણ પ્રકલ્પ, વાપરો.",
+       "editinginterface": "<strong>ચેતવણી:</strong> તમે જે પાનામાં ફેરફાર કરી રહ્યા છો તે પાનું સોફ્ટવેર માટે ઇન્ટરફેસ ટેક્સટ પુરી પાડે છે.\nઅહીંનો બદલાવ આ વિકિ પર ઉપસ્થિત અન્ય સભ્યોના ઇન્ટરફેસનાં દેખાવ ઉપર અસરકર્તા બનશે.",
        "cascadeprotected": "આ પાના પર ફેરફાર પ્રતિબંધિત છે કેમ કે આ પાનું  {{PLURAL:$1|એવું પાનું|એવા પાના}} માં શામિલ છે જેમાં અનુવર્તી (પગથિયામય)સંરક્ષણ સક્રીય છે :\n$2",
        "namespaceprotected": "તમને '''$1''' નામાવકાશનાં પાનાંમાં ફેરફાર કરવાની પરવાનગી નથી.",
        "customcssprotected": "તમને આ પાનું બદલવાની પરવાનગી નથી કારણકે આ પાનામાં બીજા સભ્યની પસંદગીના સેટીંગ્સ છે.",
        "invalidtitle-knownnamespace": "નામસ્થળ \"$2\" અને લખાણ \"$3\" સાથે અમાન્ય મથાળું",
        "invalidtitle-unknownnamespace": "અજ્ઞાત નામસ્થળ ક્રમાંક $1 અને નામ \"$2\" વાળું અમાન્ય મથાળું",
        "exception-nologin": "પ્રવેશ કરેલ નથી",
-       "exception-nologin-text": "આ પાનું કે પ્રક્રિયા પ્રાપ્તી માટે કૃપયા [[Special:Userlogin|લોગઈન]] કરો.",
+       "exception-nologin-text": "આ પાનું કે પ્રક્રિયા પ્રાપ્તી માટે કૃપયા લોગઈન કરો.",
        "exception-nologin-text-manual": "આ પાનું કે પ્રક્રિયા મેળવવા માટે કૃપયા $1.",
        "virus-badscanner": "ખરાબ રૂપરેખા: અજાણ્યું વાઇરસ સ્કેનર: ''$1''",
        "virus-scanfailed": "સ્કેન અસફળ (code $1)",
        "gotaccount": "પહેલેથી ખાતું ખોલેલું છે? '''$1'''.",
        "gotaccountlink": "પ્રવેશ કરો",
        "userlogin-resetlink": "પોતાની પ્રવેશ માહિતી ભૂલી ગયા છો?",
-       "userlogin-resetpassword-link": "તમારà«\8b àªªàª¾àª¸àªµàª°à«\8dડ ભૂલી ગયા છો?",
+       "userlogin-resetpassword-link": "તમારà«\8b àª\97à«\81પà«\8dત àª¸àª\82àª\9cà«\8dàª\9eા (પાસવરà«\8dડ) ભૂલી ગયા છો?",
        "userlogin-helplink2": "પ્રવેશ કરવા માટે મદદ",
        "userlogin-loggedin": "તમે પહેલેથી {{GENDER:$1|$1}} તરીકે પ્રવેશ કરેલો જ છે.\nબીજા સભ્ય તરીકે પ્રવેશ કરવા માટે નીચેનું ફોર્મ વાપરો.",
        "userlogin-createanother": "બીજું ખાતું બનાવો",
        "createacct-imgcaptcha-ph": "તમે જે લખાણ જુઓ છો તે દાખલ કરો",
        "createacct-submit": "તમારું ખાતું બનાવો",
        "createacct-another-submit": "બીજું ખાતું બનાવો",
-       "createacct-benefit-heading": "{{SITENAME}} એ તમારા જેવા લોકો વડે બનાવેલ છે.",
+       "createacct-benefit-heading": "{{SITENAME}} એ તમારા જેવા લોકો બનાવેલ છે.",
        "createacct-benefit-body1": "{{PLURAL:$1|ફેરફાર|ફેરફારો}}",
        "createacct-benefit-body2": "{{PLURAL:$1|પાનું|પાનાં}}",
        "createacct-benefit-body3": "તાજેતરના {{PLURAL:$1|યોગદાનકર્તા|યોગદાનકર્તાઓ}}",
        "watchthis": "આ પાનાને ધ્યાનમાં રાખો",
        "savearticle": "પાનું સાચવો",
        "preview": "પૂર્વાવલોકન",
-       "showpreview": "àª\9dલàª\95 àª¦àª°à«\8dશાવો",
+       "showpreview": "àª\9dલàª\95 àª\9cà«\81વો",
        "showdiff": "ફેરફારો દર્શાવો",
        "anoneditwarning": "<strong>ચેતવણી:</strong> તમે તમારા સભ્ય નામથી પ્રવેશ કર્યો નથી.\nઆ પાનાનાં ઇતિહાસમાં તમારૂં આઇ.પી. (IP) એડ્રેસ નોંધવામાં આવશે અને તમારૂં આઈ.પી. લોકો જાહેર રીતે જોઈ શકશે. માટે <strong>[$1 પ્રવેશ કરો]</strong> અથવા તમે <strong>[$2 ખાતું બનાવો]</strong> તો ફેરફારો તમારા સભ્યનામ હેઠળ થશે અને અન્ય ફાયદાઓ પણ મળશે.",
        "anonpreviewwarning": "તમે સભ્યનામથી પ્રવેશ કર્યો નથી,આ પાનું ઈતિહાસમાંતમારા IP સરનામાના નામે  સાચવવામાં આવશે",
        "history-feed-empty": "આ પાનું અસ્તિત્વમાં નથી.\nશક્ય છે કે આ પાનું વિકિમાંથી દૂર કરવામાં આવ્યું હોય કે તેનું નામ બદલવામાં આવ્યું હોય.\nસંલગ્ન નવા પાનાઓ માટે [[Special:Search|વિકિમાં શોધી જુઓ]].",
        "rev-deleted-comment": "(ફેરફારોનો સારાંશ હટાવ્યો)",
        "rev-deleted-user": "(સભ્યનામ હટાવાયું)",
-       "rev-deleted-event": "(લà«\8bàª\97 àª\95à«\8dરિયા હટાવાઈ)",
+       "rev-deleted-event": "(લà«\8bàª\97 àªµàª¿àª\97તà«\8b હટાવાઈ)",
        "rev-deleted-user-contribs": "[સભ્યનામ કે IP સરનામું  હટાવી દેવાયું છે - યોગદાનામાં આ ફેરફાર અદ્રશ્ય છે]",
        "rev-deleted-text-permission": "આ પુનરાવર્તન હટાવી દેવાયું છે\nઆની વિસ્તરીત માહિતી અહીં મળશે [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].",
        "rev-suppressed-text-permission": "આ પાનાં પરનું પુનરાવર્તન <strong>છુપાવવામાં</strong> આવ્યું છે. તેની વધુ વિગત [{{fullurl:{{#Special:Log}}/suppress|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": "[[:$2]]: નું {{PLURAL:$1|Selected revision|પસંદ કરાયેલ પુનરાવર્તન}}",
        "logdelete-selected": "{{PLURAL:$1|પસંદગી કરેલ લોગ ઘટના | પસંદગી કરેલ લોગ ઘટનાઓ }}:",
-       "revdelete-confirm": "કૃપયા પુષ્ટિ કરો કે તમે શું કરી રહ્યા છો તેની અને તેના પરિણામોની તમને જાણ છે અને તમે આ બધું  [[{{MediaWiki:Policy-url}}|the policy]] અ6તર્ગત કરી રહ્યાં છો.",
+       "revdelete-confirm": "કૃપયા પુષ્ટિ કરો કે તમે શું કરી રહ્યા છો તેની અને તેના પરિણામોની તમને જાણ છે અને તમે આ બધું  [[{{MediaWiki:Policy-url}}|નીતિ]] અંતર્ગત કરી રહ્યાં છો.",
        "revdelete-suppress-text": "બળ પૂર્વક છુપાવવું \"માત્ર\" આજ સંજોગોમાં કરી શકાશે:\n* સંભવતઃ ભયાજનક માહિતી \n* અયોગ્ય નિજી માહિતી \n*: ''ઘરનું સરનામું અને ટેલિફોન નંબર, રાષ્ટ્રીય ઓળખ ક્રમાંકો વગેરે.''",
        "revdelete-legend": "દ્રશ્યતા સંબંધી પ્રતિબંધોને ગોઠવો",
        "revdelete-hide-text": "પુનરાવર્તન લખાણ",
        "revdelete-hide-image": "ફાઇલની માહિતી છુપાવો",
-       "revdelete-hide-name": "àª\95à«\8dરિયા àª\85નà«\87 àª²àª\95à«\8dષà«\8dય સંતાડો",
+       "revdelete-hide-name": "લàª\95à«\8dષà«\8dય àª\85નà«\87 àªªàª°àª¿àª®àª¾àª£à«\8b સંતાડો",
        "revdelete-hide-comment": "ફેરફાર સારાંશ",
        "revdelete-hide-user": "સંપાદકનું નામ /આઈ પી એડ્રેસ",
        "revdelete-hide-restricted": "પ્રબંધક કે અન્યો સૌની માહિતી છુપાવો",
        "revdelete-submit": "પસંદ કરેલા {{PLURAL:$1|ફેરફાર|ફેરફારો}} પર લગાડો",
        "revdelete-success": "પુનરાવર્તન દ્રશ્યતા સફળતા પૂર્વક અદ્યતન બનાવાઈ",
        "revdelete-failure": "'''પુનરાવર્તનની દ્રશ્યતા બદલીન શકાઈ:'''\n$1",
-       "logdelete-success": "<strong>લોગની દ્રશ્યતા સફળતાપૂર્વક ગોઠવાઈ</strong>",
+       "logdelete-success": "લોગની દ્રશ્યતા સફળતાપૂર્વક ગોઠવાઈ",
        "logdelete-failure": "'''લોગની દ્રશ્યતા ગોઠવી ન શકાઈ :'''\n$1",
-       "revdel-restore": "દà«\83ષà«\8dàª\9fિàª\95à«\8dષમતા બદલો",
+       "revdel-restore": "દà«\83ષà«\8dયતા બદલો",
        "pagehist": "પાનાનો ઇતિહાસ",
        "deletedhist": "રદ કરેલનો ઇતિહાસ",
        "revdelete-hide-current": "$2, $1 તરીખ ધરાવતી વસ્તુ સંતાડવામાં ત્રુટિ : આ હાલનો ફેરફાર છે.\nઆને છુપાવી નહીં શકાય.",
        "showhideselectedversions": "પસંદ કરેલા બતાવો / સંતાડો",
        "editundo": "રદ કરો",
        "diff-empty": "(કોઇ ભેદ નહી)",
+       "diff-multi-sameuser": "(સમાન સભ્ય દ્વારા {{PLURAL:$1|કરાયેલ એક પુનરાવર્તન| કરાયેલા $1 પુનરાવર્તનો}} દર્શાવેલ નથી)",
        "diff-multi-manyusers": "{{PLURAL:$2|એક સભ્યએ કરેલું|$2 સભ્યોએ કરેલા}} ({{PLURAL:$1|વચગાળાનું એક પુનરાવર્તન દર્શાવ્યં|વચગાળાનાં $1 પુનરાવર્તનો દર્શાવ્યાં}} નથી.)",
        "searchresults": "પરિણામોમાં શોધો",
        "searchresults-title": "પરિણામોમાં \"$1\" શોધો",
        "searchrelated": "શોધ સંબંધિત",
        "searchall": "બધા",
        "showingresults": " {{PLURAL:$1|'''1''' પરિણામ|'''$1''' પરિણામો}} સુધી #'''$2''' થી શરૂ  કરી",
+       "search-showingresults": "{{PLURAL:$4|<strong>$3</strong>નું પરિણામ <strong>$1</strong>|<strong>$3</strong>નાં પરિણામો <strong>$1 - $2</strong>}}",
        "search-nonefound": "તમે આપેલી માહિતી ને મળતાં આવતાં કોઈ પરિણામો નથી",
        "powersearch-legend": "વધુ પર્યાયો સાથે શોધો",
        "powersearch-ns": "નામસ્થળોમાં શોધો:",
        "right-deletedtext": "રદ્દ કરાયેલ લેખ અને રદ્દીકરણ વચ્ચેના ફેરફારો વાંચો",
        "right-browsearchive": "હટાવેલા પાનાની શોધ",
        "right-undelete": "હટાવેલ પાનું પુનર્જીવીત કરો",
-       "right-suppressrevision": "પà«\8dરબàª\82ધàª\95à«\8bથà«\80 àª¸àª\82તાડાયà«\87લ àª«à«\87રફારà«\8bનà«\81àª\82 àª\85વલà«\8bàª\95ન àª\85નà«\87 àªªà«\81નàª\83સà«\8dથાપન àª\95રà«\8b.",
+       "right-suppressrevision": "àª\95à«\8bàª\88પણ àª¸àª­à«\8dયàª\8f àªªàª¾àª¨àª¾àª\93 àªªàª° àª\95રà«\87લાàª\82 àª\9aà«\8bàª\95à«\8dàª\95સ àª«à«\87રફારà«\8b àª\9cà«\81àª\93, àª¸àª\82તાડà«\8b àª\95à«\87 àª¦à«\87àª\96ાતા àª\95રà«\8b",
        "right-suppressionlog": "નિજી લોગ જુઓ",
        "right-block": "આ સભ્ય દ્વારા થનાર ફેરફાર પ્રતિબંધીત કરો",
        "right-blockemail": "સભ્યના ઇ-મેલ મોકલવા પર પ્રતિબંધ મૂકો",
        "booksources-search": "શોધ",
        "booksources-text": "નીચે દર્શાવેલ યાદી એ કડીઓ બતાવે છે જેઓ નવા અને જૂના પુસ્તકો  વેચે છે , અને તમે માંગેલ વસ્તુ સંબંધિ વધુ મહિતી પણ ધરાવી શકે છે.",
        "booksources-invalid-isbn": "આપેલ ISBN વૈધ નથી લાગતો; મૂળ સ્રોતને ચકાસી, ભૂલ શોધી, ખરી માહિતી આપો.",
-       "specialloguserlabel": "àª\85ભિનય:",
+       "specialloguserlabel": "àª\95રà«\8dતા:",
        "speciallogtitlelabel": "લક્ષ્યાંક (શીર્ષક અથવા વપરાશકર્તા)",
        "log": "લૉગ",
        "all-logs-page": "બધાં જાહેર માહિતીપત્રકો",
        "emailccsubject": "$1ને તમે મોકલેલા સંદેશાની પ્રત: $2",
        "emailsent": "ઈ-મેલ મોકલી દેવાયો",
        "emailsenttext": "તમારો ઈ-મેલ મોકલી દેવાયો છે",
-       "emailuserfooter": "આ પત્ર $1 દ્વારા $2ને  {{SITENAME}} પરની \"સભ્યને ઇ-મેલ કરો\" કડી મારફતે મોકલવામાં આવ્યો છે.",
+       "emailuserfooter": "આ પત્ર $1 દ્વારા $2ને  {{SITENAME}} પરની \"{{int:emailpage}} (સભ્યને ઇ-મેલ કરો)\" કડી મારફતે મોકલવામાં આવ્યો છે.",
        "usermessage-summary": "તંત્ર સંદેશ મૂક્યો",
        "usermessage-editor": "તંત્ર સંદેશાઓ",
        "watchlist": "ધ્યાનસૂચી",
        "contribsub2": "($2) માટે {{GENDER:$3|$1}}",
        "nocontribs": "આ પરિમાણને મળતી પરિણામ નથી મળ્યાં",
        "uctop": "(વર્તમાન)",
-       "month": ":મહિનાથી (અને પહેલાનાં)",
-       "year": ":વર્ષથી (અને પહેલાનાં)",
+       "month": "આ મહિનાથી (અને તેના પહેલાનાં) →",
+       "year": "આ વર્ષથી (અને તેના પહેલાનાં) →",
        "sp-contributions-newbies": "માત્ર નવા ખુલેલાં ખાતાઓનું યોગદાન બતાવો",
        "sp-contributions-newbies-sub": "નવા ખાતાઓ માટે",
        "sp-contributions-newbies-title": "નવા ખાતાના સભ્યોનું યોગદાન",
        "sp-contributions-toponly": "માત્ર છેલ્લી આવૃત્તિના ફેરફારો જ દર્શાવો",
        "sp-contributions-submit": "શોધો",
        "whatlinkshere": "અહી શું જોડાય છે",
-       "whatlinkshere-title": "\"$1\" àª¸àª¾àª¥à«\87 àª\9cà«\8bડાયà«\87લાàª\82 પાનાં",
+       "whatlinkshere-title": "\"$1\" àª¨à«\87 àª\9cà«\8bડતા પાનાં",
        "whatlinkshere-page": "પાનું:",
        "linkshere": "નીચેના પાનાઓ '''[[:$1]]''' સાથે જોડાય છે:",
        "nolinkshere": "'''[[:$1]]'''ની સાથે કોઇ પાના જોડાતા નથી.",
        "import-interwiki-history": "આ પાનું બધા ફેરફારોના ઇતિહાસ સાથે આયાત કરો",
        "import-interwiki-templates": "બધા ઢાંચા શામિલ કરો",
        "import-interwiki-submit": "આયાત કરો",
-       "import-interwiki-namespace": "લક્ષ્ય નામ સ્થળ",
        "import-upload-filename": "ફાઇલ નામ",
        "import-comment": "ટિપ્પણી:",
        "importtext": "કૃપયા [[Special:Export|export utility]] વાપરી વિકિ સ્રોત પરથી ફાઇલ નિકાસ કરો.\nતેને તમારા કૉમ્પ્યુટર પર સાચવો અને અહીં ચડાવો.",
        "tooltip-pt-watchlist": "તમે દેખરેખ રાખી રહ્યાં હોવ તેવા પાનાઓની યાદી",
        "tooltip-pt-mycontris": "તમારા યોગદાનની યાદી",
        "tooltip-pt-login": "આપને પ્રવેશ કરવા ભલામણ કરવામાં આવે છે, જોકે તે આવશ્યક નથી",
-       "tooltip-pt-logout": "બહાર નીકળો/લૉગ આઉટ કરો",
-       "tooltip-pt-createaccount": "તમનà«\87 àª\96ાતà«\81àª\82 àª¬àª¨àª¾àªµà«\80નà«\87 àªªà«\8dરવà«\87શ àª\95રવા àª®àª¾àª\9fà«\87 àª\86મàª\82તà«\8dરણ àª\9bà«\87; àª¤à«\87મ àª\95રવà«\81àª\82 àª\9cà«\8bàª\95à«\87, àª\9cરà«\82રà«\80 àª¨àª¥à«\80.",
+       "tooltip-pt-logout": "બહાર નીકળો",
+       "tooltip-pt-createaccount": "તમનà«\87 àª\96ાતà«\81àª\82 àª¬àª¨àª¾àªµà«\80નà«\87 àªªà«\8dરવà«\87શ àª\95રવા àª®àª¾àª\9fà«\87 àª\86મàª\82તà«\8dરણ àª\9bà«\87; àª¤à«\87મ àª\95રવà«\81àª\82 àª\9cà«\8bàª\95à«\87, àª\86વશà«\8dયàª\95 àª¨àª¥à«\80",
        "tooltip-ca-talk": "અનુક્રમણિકાનાં પાના વિષે ચર્ચા",
        "tooltip-ca-edit": "આપ આ પાનામાં ફેરફાર કરી શકો છો, કાર્ય સુરક્ષિત કરતાં પહેલાં 'ઝલક' બટન ઉપર ક્લિક કરીને જોઇ લેશો",
        "tooltip-ca-addsection": "ચર્ચાનો નવો મુદ્દો ઉમેરો.",
        "tooltip-t-recentchangeslinked": "આ પાના પરની કડીઓ વાળા લેખોમાં તાજેતરમાં થયેલા ફેરફારો",
        "tooltip-feed-rss": "આ પાના માટે આર.એસ.એસ. ફીડ",
        "tooltip-feed-atom": "આ પાના માટે એટોમ ફીડ",
-       "tooltip-t-contributions": "આ સભ્યનાં યોગદાનોની યાદી જુઓ",
+       "tooltip-t-contributions": "આ સભ્યનાં યોગદાનોની યાદી",
        "tooltip-t-emailuser": "આ સભ્યને ઇ-મેલ મોકલો",
        "tooltip-t-upload": "ફાઇલ ચડાવો",
        "tooltip-t-specialpages": "બધા ખાસ પાનાંઓની યાદી",
        "tooltip-ca-nstab-main": "સૂચિ વાળું પાનુ જુઓ",
        "tooltip-ca-nstab-user": "સભ્યનું પાનું જુઓ",
        "tooltip-ca-nstab-media": "મિડિયાનું પાનું જુઓ",
-       "tooltip-ca-nstab-special": "àª\86 àª\96ાસ àªªàª¾àª¨à«\81àª\82 àª\9bà«\87, àª¤àª®à«\87 àª¤à«\87માàª\82 àª«à«\87રફાર àª¨àª¾ àª\95રà«\80 àª¶àª\95à«\8b",
-       "tooltip-ca-nstab-project": "પરિયોજનાનું પાનું",
+       "tooltip-ca-nstab-special": "àª\86 àª\96ાસ àªªàª¾àª¨à«\81àª\82 àª\9bà«\87, àª¤àª®à«\87 àª¤à«\87માàª\82 àª«à«\87રફાર àª\95રà«\80 àª¶àª\95શà«\8b àª¨àª¹à«\80",
+       "tooltip-ca-nstab-project": "પરિયોજનાનું પાનું જુવો",
        "tooltip-ca-nstab-image": "ફાઇલ વિષેનું પાનું જુઓ",
        "tooltip-ca-nstab-mediawiki": "તંત્ર સંદેશ જુઓ",
        "tooltip-ca-nstab-template": "ઢાંચો જુઓ",
        "filedelete-current-unregistered": "જણાવેલ ફાઇલ  \"$1\" માહિતીસંચમાં નથી",
        "filedelete-archive-read-only": "ઐતિહાસિક ડાયરેક્ટરી ($1) એ વેબ બ્રાઉઝર દ્વારા લેખન યોગ્ય નથી.",
        "previousdiff": "← પહેલાનો ફેરફાર",
-       "nextdiff": "પàª\9bà«\80નà«\8b ફેરફાર →",
+       "nextdiff": "નવા ફેરફાર →",
        "mediawarning": "'''ચેતવણી''': આ ફાઇલમાં દુષ્ટ સોચનાઓ હોઇ શકે.\nતેને ચલવતા, તમારા સંગણકને ભય છે.",
        "imagemaxsize": "ચિત્રના કદની મર્યાદા:<br />''(for file description pages)''",
        "thumbsize": "લઘુચિત્ર કદ",
        "file-info": "ફાઇલ કદ : $1, MIME પ્રકાર: $2",
        "file-info-size": "$1 × $2 પીક્સલ, ફાઇલનું કદ: $3, MIME પ્રકાર: $4",
        "file-info-size-pages": "$1 × $2 પીક્સલ, ફાઈલ કદ: $3, MIME પ્રકાર: $4, $5 {{PLURAL:$5|પાનું|પાના}}",
-       "file-nohires": "àª\86થà«\80 àªµàª§à«\81 àª\86વરà«\8dતન ઉપલબ્ધ નથી.",
+       "file-nohires": "àª\86થà«\80 àªµàª§à«\81 àª\98નતà«\8dવ ઉપલબ્ધ નથી.",
        "svg-long-desc": "SVG ફાઇલ, માત્ર $1 × $2 પીક્સલ, ફાઇલનું કદ: $3",
        "svg-long-error": "અયોગ્ય SVG ફાઇલ: $1",
        "show-big-image": "મૂળભુત ફાઇલ",
        "show-big-image-preview": "આ મહાવરા દ્રશ્યનું માપ: $1.",
        "show-big-image-other": "અન્ય {{PLURAL:$2|આવર્તન|આવર્તનો}}: $1.",
-       "show-big-image-size": "$1 Ã\97 $2 àªªà«\80àª\95à«\8dસલ",
+       "show-big-image-size": "$1 Ã\97 $2 àªªàª¿àª\95à«\8dસà«\87લ",
        "file-info-gif-looped": "આવર્તન  (લુપ)",
        "file-info-gif-frames": " $1 {{PLURAL:$1|છબી|છબીઓ}}",
        "file-info-png-looped": "આવર્તન",
        "metadata-help": "આ માધ્યમ સાથે વધુ માહિતિ સંકળાયેલી છે, જે સંભવતઃ માધ્યમ (ફાઇલ) બનાવવા માટે ઉપયોગમાં લેવાયેલા ડિજીટલ કેમેરા કે સ્કેનર દ્વારા ઉમેરવામાં આવી હશે.\n<br />જો માધ્યમને તેના મુળ રૂપમાંથી ફેરફાર કરવામાં આવશે તો શક્ય છે કે અમુક માહિતિ પુરેપુરી હાલમાં છે તેવી રીતે ના જળવાઇ રહે.",
        "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",
+       "metadata-fields": "જ્યારે મૅટાડેટાનો કોઠો વિલિન થઇ જતો હશે ત્યારે આ સંદેશામાં સુચવેલી મૅટાડેટા માહિતી ચિત્રના પાનાની દૃશ્ય આવૃત્તિમાં ઉમેરવામાં આવશે.\nઅન્ય આપોઆપ જ છુપાઇ જશે.\n* બનાવટ\n* મોડલ\n* મુળતારીખ\n* એક્ષપોઝરસમય\n* એફનંબર\n* એઇએસઓસ્પીડસેટિંગ્સ\n* ફોકલલેંથ\n* કલાકાર\n* કોપીરાઇટ\n* ચિત્રનું વર્ણન\n* જીપીએસરેખાંશ\n* જીપીએસઅક્ષાંશ\n* જીપીએસઉંચાઈ",
        "exif-imagewidth": "પહોળાઈ",
        "exif-imagelength": "ઊંચાઈ",
        "exif-bitspersample": "બીટ્સ પ્રતિ ભાગ",
        "logentry-delete-delete": "$1 દ્વારા પાનું $3 {{GENDER:$2|દૂર કરવામાં આવ્યું}}",
        "logentry-delete-restore": "$1 {{GENDER:$2|પુનઃસંગ્રહ}} પાનું $3",
        "logentry-delete-event": "$1 એ {{PLURAL:$5|લૉગ ઘટના|$5 લૉગ ઘટનાઓ}} ની દ્રશ્યતા $3 પર {{GENDER:$2|બદલેલ}} છે: $4",
-       "logentry-delete-revision": "$1 {{GENDER:$2|બદલà«\87લ}} àª¬àª¦àª²àª¾àª\88 àª¨àª¾ àª¦à«\83શà«\8dયતા {{PLURAL:$5 | àª¸à«\81ધારણા | $5 àª\86વà«\83તà«\8dતિàª\93}} $3 àªªàª¾àª¨àª¾àª\82 àªªàª°: $4",
+       "logentry-delete-revision": "$1 {{GENDER:$2|àª\8f}} àªªà«\83ષà«\8dઠ $3 àªªàª°àª¨àª¾ {{PLURAL:$5|àª\8fàª\95 àªªà«\81નરાવરà«\8dતન|$5 àªªà«\81નરાવરà«\8dતનà«\8b}}નà«\80 àª¦à«\83ષà«\8dયતા àª¬àª¦àª²à«\80: $4",
        "logentry-delete-event-legacy": "$1 એ $3 પર ફેરફારની દૃશ્યતા બદલી",
-       "logentry-delete-revision-legacy": "$1 {{GENDER:$2|બદલેલ}} બદલાઈ પાનાં પર આવૃત્તિઓની દૃશ્યતા $3",
+       "logentry-delete-revision-legacy": "પૃષ્ઠ $3 પરના પુનરાવર્તનોની દૃશ્યતા $1 {{GENDER:$2|એ બદલી}}",
        "logentry-suppress-delete": "$1 એ $3 પાનું {{GENDER:$2|દબાવ્યું}}",
        "logentry-suppress-event": "$1  ખાનગી રીતે {{GENDER:$2|દ્વારા માહિતીની દૃશ્યતા}} $3 : $4 પર બદલાઈ {{PLURAL:$5 | લોગ ઘટના | $5 લોગ}}",
-       "logentry-suppress-revision": "$1 છાની માહિતી {{GENDER:$2|બદલેલ}} બદલાઈ ના દૃશ્યતા {{PLURAL:$5 | આવૃત્તિ એ | $5 આવૃત્તિઓ}}: $4 $3 પાનાં પર",
+       "logentry-suppress-revision": "$1 {{GENDER:$2|એ છાનામાના}} પૃષ્ઠ $3 પરના {{PLURAL:$5|એક પુનરાવર્તન|$5 પુનરાવર્તનો}}ની દૃષ્યતા બદલી: $4",
        "logentry-suppress-event-legacy": "$1એ ગુપ્ત રીતે $3 પર લોગ ઘટનાઓની દૃશ્યતા બદલી",
        "logentry-suppress-revision-legacy": "$1 ગુપ્ત {{GENDER:$2|બદલેલ}} બદલાઈ પાનાં પર આવૃત્તિઓની દૃશ્યતા $3",
        "revdelete-content-hid": "માહિતી છુપાવી",
        "logentry-newusers-create": "સભ્ય ખાતું $1 {{GENDER:$2|બનાવવામાં આવ્યું}}",
        "logentry-newusers-create2": "સભ્ય ખાતું $3 $1 વડે {{GENDER:$2|બનાવવામાં આવ્યું હતું}}",
        "logentry-newusers-autocreate": "વપરાશકર્તા ખાતું $1 આપમેળે {{GENDER:$2|બનાવવામાં આવ્યું હતું}}",
+       "logentry-upload-upload": "$1 {{GENDER:$2|દ્વારા ચડાવેલ}} $3",
        "rightsnone": "(કંઈ નહી)",
        "revdelete-summary": "સંપાદનનો સંક્ષિપ્ત અહેવાલ",
        "feedback-adding": "પ્રતિભાવ આ પાના પર ઉમેરાઈ રહ્યો છે.",
index b972f29..9e33fee 100644 (file)
        "searchsuggest-search": "Ronsaghey",
        "searchsuggest-containing": "goaill stiagh...",
        "expand_templates_ok": "OK",
-       "expand_templates_preview": "Roie-haishbynys"
+       "expand_templates_preview": "Roie-haishbynys",
+       "special-characters-group-latin": "Romanagh",
+       "special-characters-group-latinextended": "Romanagh sheeynt",
+       "special-characters-group-ipa": "ASE",
+       "special-characters-group-symbols": "Cowraghyn",
+       "special-characters-group-greek": "Greagagh",
+       "special-characters-group-cyrillic": "Kyrillagh",
+       "special-characters-group-arabic": "Arabagh",
+       "special-characters-group-persian": "Pershish",
+       "special-characters-group-hebrew": "Ewagh",
+       "special-characters-group-bangla": "Bengaalish",
+       "special-characters-group-telugu": "Telugish",
+       "special-characters-group-sinhala": "Sinhalish",
+       "special-characters-group-gujarati": "Gujaratish",
+       "special-characters-group-thai": "Thaish",
+       "special-characters-group-lao": "Laosish",
+       "special-characters-group-khmer": "Khmerish"
 }
index 9164e40..9e0144c 100644 (file)
        "no-null-revision": "לא ניתן היה ליצור גרסת־דמה בדף \"$1\"",
        "badtitle": "כותרת שגויה",
        "badtitletext": "כותרת הדף המבוקש הייתה בלתי־תקינה, ריקה, או קישור שגוי לשפה אחרת או למיזם אחר.\nייתכן שהיא מכילה תו אחד או יותר שאינו יכול לשמש בכותרות.",
+       "title-invalid-empty": "כותרת הדף המבוקש ריקה או מכילה רק שם של מרחב שם.",
+       "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 בתים בקידוד UTF-8.",
+       "title-invalid-leading-colon": "כותרת הדף המבוקש מכילה תו נקודתיים בלתי־תקין בתחילתה.",
        "perfcached": "המידע הבא הוא עותק שמור בזיכרון המטמון של המידע, ועשוי שלא להיות מעודכן. לכל היותר {{PLURAL:$1|תוצאה אחת נשמרת|$1 תוצאות נשמרות}} בזיכרון המטמון.",
        "perfcachedts": "המידע הבא הוא עותק שמור בזיכרון המטמון של המידע, שעודכן לאחרונה ב־$1. לכל היותר {{PLURAL:$4|תוצאה אחת נשמרת|$4 תוצאות נשמרות}} בזיכרון המטמון.",
        "querypage-no-updates": "העדכונים לדף זה כרגע מופסקים, והמידע לא יעודכן באופן שוטף.",
        "import-interwiki-history": "העתקת כל היסטוריית העריכות של דף זה",
        "import-interwiki-templates": "ייבוא גם של כל התבניות המוכללות בדף",
        "import-interwiki-submit": "ייבוא",
-       "import-interwiki-namespace": "העתקה למרחב השם:",
-       "import-interwiki-rootpage": "דף הבסיס של היעד (לא חובה):",
+       "import-mapping-default": "ייבוא למקומות ברירת המחדל",
+       "import-mapping-namespace": "ייבוא למרחב השם:",
+       "import-mapping-subpage": "ייבוא כדפי משנה של הדף הבא:",
        "import-upload-filename": "שם הקובץ:",
        "import-comment": "הערה:",
        "importtext": "נא לייצא את הקובץ מאתר המקור באמצעות ב[[Special:Export|כלי הייצוא]].\nשמרו אותו למחשב שלכם והעלו אותו לכאן.",
        "tags-edit-reason": "סיבה:",
        "tags-edit-revision-submit": "החלת שינויים {{PLURAL:$1|לגרסה הזאת|ל־$1 גרסאות}}",
        "tags-edit-logentry-submit": "החלת שינויים {{PLURAL:$1|לרשומת היומן הזאת|ל־$1 רשומת היומן}}",
-       "tags-edit-success": "<strong>השינויים הוחלו בהצלחה.</strong>",
-       "tags-edit-failure": "<strong>החלת השינויים נכשלה:</strong>\n$1",
+       "tags-edit-success": "השינויים הוחלו בהצלחה.",
+       "tags-edit-failure": "החלת השינויים נכשלה:\n$1",
        "tags-edit-nooldid-title": "גרסת היעד אינה תקינה",
        "tags-edit-nooldid-text": "או שלא ציינת שום גרסה שהפעולה תבוצע עליה, או שהגרסה שציינת אינה קיימת.",
        "tags-edit-none-selected": "יש לבחור לפחות תגית אחת להוספה או להסרה.",
index 7e86a58..48f709b 100644 (file)
        "import-interwiki-history": "इस पृष्ठ के सभी इतिहास अवतरण कॉपी करें",
        "import-interwiki-templates": "सभी साँचे शामिल करें",
        "import-interwiki-submit": "आयात",
-       "import-interwiki-namespace": "गंतव्य नामस्थान:",
-       "import-interwiki-rootpage": "गंतव्य पृष्ठ उपसर्ग (वैकल्पिक):",
        "import-upload-filename": "संचिका नाम:",
        "import-comment": "टिप्पणी:",
        "importtext": "कृपया स्रोत विकि से संचिका निर्यातित करने के लिए [[Special:Export|निर्यात सुविधा]] का इस्तेमाल करें।\nइसे अपने संगणक पर सँजो के यहाँ चढ़ा दें।",
index 4e3590d..098f974 100644 (file)
        "import-interwiki-history": "Ii panna ke sab badlao ke itihaas ke copy karo",
        "import-interwiki-templates": "Sab template ke include karo",
        "import-interwiki-submit": "Import karo",
-       "import-interwiki-namespace": "Manzil waala namespace:",
-       "import-interwiki-rootpage": "Destination root panna (optional):",
        "import-upload-filename": "File ke naam:",
        "import-comment": "Aapan bichar do:",
        "importtext": "Meharbani kar ke file ke [[Special:Export|export utility]] use kar ke source wiki me se export karo.\nAapan computer me save kar ke  hian pe upload karo.",
index fc7aa3a..2a1a8ac 100644 (file)
@@ -28,7 +28,8 @@
                        "Treecko",
                        "לערי ריינהארט",
                        "아라",
-                       "Macofe"
+                       "Macofe",
+                       "Fraxinus"
                ]
        },
        "tog-underline": "Podcrtane poveznice",
        "shown-title": "Prikaži $1 {{PLURAL:$1|rezultat|rezultata|rezultata}} po stranici",
        "viewprevnext": "Vidi ($1 {{int:pipe-separator}} $2) ($3).",
        "searchmenu-exists": "* Stranica '''[[$1]]'''",
-       "searchmenu-new": "'''Stvori stranicu \"[[:$1]]\" na ovoj wiki!'''",
+       "searchmenu-new": "<strong>Napravite stranicu \"[[:$1]]\" na ovom wiki projektu!</strong>\n{{PLURAL:$2|0=|Cm. i stranica koje se nalaze u rezultatima vaših pretraživanja.|Cm. također su pronađeni rezultati pretraživanja.}}",
        "searchprofile-articles": "Stranice sa sadržajem",
        "searchprofile-images": "Multimedija",
        "searchprofile-everything": "Sve",
        "import-interwiki-history": "Prenesi sve inačice ove stranice",
        "import-interwiki-templates": "Uključi sve predloške",
        "import-interwiki-submit": "Uvezi",
-       "import-interwiki-namespace": "Odredišni imenski prostor:",
-       "import-interwiki-rootpage": "Odredišna početna stranica (parametar nije nužan):",
        "import-upload-filename": "Ime datoteke:",
        "import-comment": "Komentar:",
        "importtext": "Molimo izvezite datoteku iz izvorišnog wikija koristeći [[Special:Export|izvozno pomagalo]]. \nSnimite je na svoje računalo i postavite je ovdje.",
        "tooltip-pt-mycontris": "Popis mojih doprinosa",
        "tooltip-pt-login": "Predlažemo Vam da se prijavite, ali nije obvezno.",
        "tooltip-pt-logout": "Odjavi se",
+       "tooltip-pt-createaccount": "Nudimo vam mogućnost da napravite račun i prijavite se, iako to nije nužno.",
        "tooltip-ca-talk": "Razgovor o stranici",
        "tooltip-ca-edit": "Možete uređivati ovu stranicu. Koristite Pregled kako će izgledati prije nego što snimite.",
        "tooltip-ca-addsection": "Dodaj novi odlomak",
index ff46e1e..012a86f 100644 (file)
        "delete-edit-reasonlist": "Přičiny za wušmórnjenje wobdźěłać",
        "delete-toobig": "Tuta strona ma z wjace hač $1 {{PLURAL:$1|wersiju|wersijomaj|wersijemi|wersijemi}} wulke wobdźěłanske stawizny. Wušmórnjenje tajkich stronow bu wobmjezowane, zo by připadne přetorhnjenje {{SITENAME}} wobešło.",
        "delete-warning-toobig": "Tuta strona ma z wjace hač $1 {{PLURAL:$1|wersiju|wersijomaj|wersijemi|wersijemi}} wulke wobdźěłanske stawizny. Wušmórnjenje móže operacije datoweje banki {{SITENAME}} přetorhnyć; pokročuj z kedźbliwosću.",
+       "deleteprotected": "Njemóžeš tutu stronu zhašeć, dokelž je so škitała.",
        "deleting-backlinks-warning": "'''Warnowanje:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Druhe strony]] wotkazuja k stronje abo strona je druhdźe zapřijata, kotruž chceš zhašeć.",
        "rollback": "Změny cofnyć",
        "rollbacklink": "Cofnyć",
        "thumbnail-temp-create": "Temporerna dataja za miniaturny wobrazk njeda so wutworić",
        "thumbnail-dest-create": "Miniaturny wobrazk njeda so na cilowym městnje składować",
        "thumbnail_invalid_params": "Njepłaćiwe parametry miniaturki",
+       "thumbnail_toobigimagearea": "Dataja z wotměrami, kotrež su wjetše hač $1",
        "thumbnail_dest_directory": "Njemóžno cilowy zapis wutworić.",
        "thumbnail_image-type": "Wobrazowy typ so njepodpěruje",
        "thumbnail_gd-library": "Njedospołna konfiguracija GD-biblioteki: falowaca funkcija $1",
        "import-interwiki-history": "Wšě wersije ze stawiznow tuteje strony kopěrować",
        "import-interwiki-templates": "Wšě předłohi zapřijeć",
        "import-interwiki-submit": "Importować",
-       "import-interwiki-namespace": "Cilowy mjenowy rum:",
-       "import-interwiki-rootpage": "Cilowa korjenjowa strona (opcionalna):",
        "import-upload-filename": "Datajowe mjeno:",
        "import-comment": "Přičina:",
        "importtext": "Prošu eksportuj dataju ze žórłoweho wikija z pomocu funkcije [[Special:Export|Strony eksportować]]. Składuj ju na swojim ličaku a nahraj ju tu.",
        "tags-delete-reason": "Přičina:",
        "tags-activate-reason": "Přičina:",
        "tags-activate-submit": "Aktiwizować",
+       "tags-deactivate-reason": "Přičina:",
+       "tags-deactivate-submit": "Znjemóžnić",
+       "tags-edit-revision-selected": "{{PLURAL:$1|Wubrana wersija|Wubranej wersiji|Wubrane wersije}} wot [[:$2]]:",
+       "tags-edit-logentry-selected": "{{PLURAL:$1|Wubrany protokolowy podawk|Wubranej protokolowej podawkaj|Wubrane protokolowe podawki}}",
+       "tags-edit-existing-tags-none": "\"Žadyn\"",
        "tags-edit-reason": "Přičina:",
+       "tags-edit-revision-submit": "Změny na {{PLURAL:$1|tutu wersiju|$1 wersiji|$1 wersije|$1 wersijow}} nałožić",
+       "tags-edit-logentry-submit": "Změny na {{PLURAL:$1|tutón protokolowy zapisk|$1 protokolowej zapiskaj|$1 protokolowe zapiski|$1 protokolowych zapiskow}}",
+       "tags-edit-success": "Změny su so wuspěšnje nałožili.",
+       "tags-edit-failure": "Změny njehodźa so nałožować:\n$1",
        "tags-edit-nooldid-title": "Njepłaćiwa cilowa wersija",
        "comparepages": "Strony přirunać",
        "compare-page1": "Strona 1",
        "revdelete-uname-unhid": "wužiwarske mjeno widźomne",
        "revdelete-restricted": "na administratorow nałožene wobmjezowanja",
        "revdelete-unrestricted": "Wobmjezowanja za administratorow wotstronjene",
+       "logentry-import-upload": "$1 je $3 přez datajowe nahraće {{GENDER:$2|importował|importowała}}",
+       "logentry-import-interwiki": "$1je $3 z druheho wikija {{GENDER:$2|importował|importowała}}",
+       "logentry-merge-merge": "$1 je $3 do $4 {{GENDER:$2|zjednoćił|zjednoćiła}} (wersije hač do $5)",
        "logentry-move-move": "$1 je stronu $3 do $4 {{GENDER:$2|přesunył|přesunyła}}",
        "logentry-move-move-noredirect": "$1 je stronu $3 do $4 {{GENDER:$2|přesunył|přesunyła}}, bjeztoho zo by dalesposrědkowanje {{GENDER:$2|wutworił|wutworiła}}",
        "logentry-move-move_redir": "$1 je stronu $3 do $4 {{GENDER:$2|přesunył|přesunyła}} přepisujo dalesposrědkowanje",
        "logentry-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''')",
+       "mediastatistics": "Medijowe statistiki",
+       "mediastatistics-nbytes": "{{PLURAL:$1|$1 bajt|$1 bajtaj|$1 bajty|$1 bajtow}} ($2; $3%)",
        "mediastatistics-table-mimetype": "MIME-typ",
        "mediastatistics-table-extensions": "Móžne rozšěrjenja",
        "mediastatistics-table-count": "Ličba datajow",
        "mediastatistics-header-text": "Tekst",
        "mediastatistics-header-executable": "Wuwjedźomne formaty",
        "mediastatistics-header-archive": "Komprimowane formaty",
+       "json-error-unknown": "Je problem z JSON był. Zmylk: $1",
+       "json-error-state-mismatch": "Njepłaćiwy JSON abo JSON ze zmylkami",
+       "json-error-ctrl-char": "Zmylk z wodźenskim znamješkom, snano wopak zakodowane",
        "json-error-syntax": "Syntaksowy zmylk",
+       "json-error-utf8": "UTF-8-znamješka ze zmylkami, snano wopak zakodowane",
+       "json-error-recursion": "Jedna rekursiwna referenca abo wjacore rekursiwne referency w hódnoće, kotrež maja so kodować",
+       "json-error-unsupported-type": "Hódnota typa, kotryž njeda so kodować, je so podała",
+       "headline-anchor-title": "Wotkaz k tutomu wotrězkej",
        "special-characters-group-latin": "Łaćonske",
        "special-characters-group-latinextended": "Łaćonske rozšěrjene",
        "special-characters-group-ipa": "IPA",
index 59a7930..3e796bd 100644 (file)
        "ok": "OK",
        "pagetitle": "$1 – {{SITENAME}}",
        "retrievedfrom": "A lap eredeti címe: „$1”",
-       "youhavenewmessages": "$1 a vitalapodon! ($2 külön is megtekintheted.)",
-       "youhavenewmessagesfromusers": "$2 kaptál {{PLURAL:$3|egy|$3}} szerkesztőtől $1!",
-       "youhavenewmessagesmanyusers": "$2 kaptál több szerkesztőtől $1.",
-       "newmessageslinkplural": "{{PLURAL:$1|új üzenet|999=új üzenet}} a vitalapodon",
+       "youhavenewmessages": "{{PLURAL:$3|Van egy|Vannak}} $1 ($2).",
+       "youhavenewmessagesfromusers": "{{PLURAL:$4|Van egy|Vannak}} $1 {{PLURAL:$3|egy|$3}} másik szerkesztőtől ($2).",
+       "youhavenewmessagesmanyusers": "Vannak $1 sok szerkesztőtől ($2).",
+       "newmessageslinkplural": "{{PLURAL:$1|új üzenet|999=új üzenetek}} a vitalapodon",
        "newmessagesdifflinkplural": "{{PLURAL:$1|változás|999=változás}}",
        "youhavenewmessagesmulti": "Új üzenet vár a(z) $1 wikin",
        "editsection": "szerkesztés",
        "viewsource-title": "$1 forrásának megtekintése",
        "actionthrottled": "Művelet megszakítva",
        "actionthrottledtext": "A spamek elleni védekezés miatt nem végezheted el a műveletet túl sokszor egy adott időn belül, és te átlépted a megengedett határt. Próbálkozz újra néhány perc múlva.",
-       "protectedpagetext": "Ez egy védett lap, így nem végezhető rajta szerkesztés és más tevékenység",
+       "protectedpagetext": "Ez egy védett lap, így nem végezhető rajta szerkesztés és más tevékenység.",
        "viewsourcetext": "Megtekintheted és másolhatod a lap forrását:",
        "viewyourtext": "Megtekintheted és kimásolhatod a '''saját szerkesztéseidet''' az alábbi lapra:",
        "protectedinterface": "Ez a lap a szoftver felületéhez szolgáltat szöveget, és a visszaélések elkerülése miatt le van zárva.",
        "editinginterface": "<strong>Vigyázat:</strong> egy olyan lapot szerkesztesz, ami a MediaWiki szoftver felületéhez tartozik. A lap megváltoztatása hatással lesz a kinézetre, ahogy más szerkesztők látják a lapot.",
        "translateinterface": "Minden wikire kiterjedő fordítások hozzáadásához vagy szerkesztésére használd a [//translatewiki.net/ translatewiki.net]-et, a MédiaWiki lokalizációs projektjét.",
-       "cascadeprotected": "Ez a lap szerkesztés elleni védelemmel lett ellátva, mert a következő {{PLURAL:$1|lapon|lapokon}} be van kapcsolva a „kaszkádolt” védelem:\n$2",
+       "cascadeprotected": "Ez a lap szerkesztés elleni védelemmel lett ellátva, mert be van illesztve a következő {{PLURAL:$1|lapon|lapokon}}, ahol be van kapcsolva a „kaszkádolt” védelem:\n$2",
        "namespaceprotected": "Nincs jogosultságod a(z) '''$1''' névtérben található lapok szerkesztésére.",
        "customcssprotected": "Nem szerkesztheted ezt a CSS-lapot, mert egy másik felhasználó személyes beállításait tartalmazza.",
        "customjsprotected": "Nem szerkesztheted ezt a JavaScript-lapot, mert egy másik felhasználó személyes beállításait tartalmazza.",
        "import-interwiki-history": "A lap összes előzményváltozatainak másolása",
        "import-interwiki-templates": "Az összes sablon hozzáadása",
        "import-interwiki-submit": "Importálás",
-       "import-interwiki-namespace": "Célnévtér:",
-       "import-interwiki-rootpage": "Cél gyökér lap (opcionális):",
        "import-upload-filename": "Fájlnév:",
        "import-comment": "Megjegyzés:",
        "importtext": "Exportáld a fájlt a forráswikiből az [[Special:Export|exportáló eszköz]] segítségével.\nMentsd el a számítógépedre, majd töltsd fel ide.",
        "tags-edit": "szerkesztés",
        "tags-hitcount": "{{PLURAL:$1|Egy|$1}} változtatás",
        "tags-delete-not-allowed": "A kiterjesztés által létrehozott címkék nem törölhetők, ha a kiterjesztés nem engedélyezi kifejezetten azt.",
+       "tags-edit-title": "Címkék szerkesztése",
+       "tags-edit-existing-tags": "Létező címkék:",
        "comparepages": "Lapok összehasonlítása",
        "compare-page1": "1. lap",
        "compare-page2": "2. lap",
index d5d575f..dc8d70f 100644 (file)
@@ -19,7 +19,9 @@
                        "아라",
                        "Lilitik22",
                        "GrigorGB",
-                       "Աշոտ1997"
+                       "Աշոտ1997",
+                       "GeoO",
+                       "Դավիթ Սարոյան"
                ]
        },
        "tog-underline": "ընդգծել հղումները՝",
        "edit": "Խմբագրել",
        "edit-local": "Խմբագրել տեղական նկարագրությունը",
        "create": "Ստեղծել",
+       "create-local": "Ավելացնել տեղային նկարագիր",
        "editthispage": "Խմբագրել այս էջը",
        "create-this-page": "Ստեղծել այս էջը",
        "delete": "Ջնջել",
        "createaccount-text": "Ինչ-որ մեկը ստեղծել է «$2» անվանմամբ մասնակցային հաշիվ «$3» գաղտնաբառով {{SITENAME}} ($4) նախագծում՝ նշելով ձեր էլ-հասցեն։ Ձեզ անհրաժեշտ է մտնել համակարգ և փոխել գաղտնաբառը։\n\nԿարող եք անտեսել այս հաղորդագրությունը, եթե հաշիվը ստեղծվել է սխալմամբ։",
        "login-throttled": "Դուք կատարել եք չափից շատ մուտքի փորձ։\nԽնդրում ենք սպասել որոշ ժամանակ կրկին փորձելուց առաջ։",
        "loginlanguagelabel": "Լեզու՝ $1",
-       "pt-login": "Õ\84Õ¿Õ¶ել",
+       "pt-login": "Õ\84Õ¸Ö\82Õ¿Ö\84 Õ£Õ¸Ö\80Õ®ել",
        "pt-login-button": "Մտնել",
-       "pt-createaccount": "Õ\8dÕ¿Õ¥Õ²Õ®Õ¥Õ¬ Õ´Õ¡Õ½Õ¶Õ¡Õ¯Ö\81Õ« հաշիվ",
+       "pt-createaccount": "Õ\8dÕ¿Õ¥Õ²Õ®Õ¥Õ¬ Õ´Õ¡Õ½Õ¶Õ¡Õ¯Ö\81Õ¡ÕµÕ«Õ¶ հաշիվ",
        "pt-userlogout": "Դուրս գալ",
        "php-mail-error-unknown": "Անհայտ սխալ PHP-ի mail() ֆունկցիայում",
        "user-mail-no-addy": "Փորձվեց ուղարկել էլ․ նամակ առանց էլ․ հասցեի։",
        "preview": "Նախադիտում",
        "showpreview": "Նախադիտել",
        "showdiff": "Կատարված փոփոխությունները",
-       "anoneditwarning": "'''Ուշադրություն.''' Դուք չեք մտել համակարգ։\nՁեր IP հասցեն կգրանցվի այս էջի խմբագրումների պատմության մեջ։",
+       "anoneditwarning": "<strong>Ուշադրություն,</strong> Դուք չեք մտել համակարգ։ Ցանկացած խմբագրման դեպքում Ձեր IP հասցեն կդառնա բոլորին տեսանելի։ Եթե դուք <strong>[$1 մուտք գործեք]</strong> կամ <strong>[$2 ստեղծեք մասնակցային հաշիվ]</strong>, Ձեր կատարած խմբագրումները կկավեն Ձեր մասնակցային անվան հետ և Դուք կունենաք այլ առավելություններ։",
        "anonpreviewwarning": "<em>Դուք չեք մտել համակարգ։\nՀիշելով Ձեր կատարած խմբագրումը, այն կպահանվի Ձեր IP հասցեի հետ միասին այս էջի խմբագրումների պատմության մեջ։</em>",
        "missingsummary": "'''Հիշեցում.''' Դուք չեք տվել խմբագրման ամփոփում։ «Հիշել» կոճակի կրկնակի մատնահարման դեպքում փոփոխությունները կհիշվեն առանց ամփոփման։",
        "missingcommenttext": "Խնդրում ենք մեկնաբանություն ավելացնել ստորև։",
        "newarticletext": "Դուք հղվել եք դեռևս գոյություն չունեցող էջի։ \nՆոր էջ ստեղծելու համար ստորև գտնվող խմբագրման դաշտում ավելացրեք տեքստ, այնուհետև սեղմեք '''Հիշել էջը''' (այցելեք [$1 օգնության էջը]՝ մանրամասն տեղեկությունների համար)։ \n\nԵթե դուք սխալմամբ եք այստեղ հայտնվել, ապա սեղմեք ձեր դիտարկչի '''հետ''' (back) կոճակը։",
        "anontalkpagetext": "----\n''Այս քննարկման էջը պատկանում է անանուն մասնակցին, որը դեռ չի ստեղծել մասնակցային հաշիվ կամ չի մտել համակարգ մասնակցի անունով։''\nԱյդ իսկ պատճառով օգտագործվում է թվային IP-հասցեն։\nՆման IP-հասցեից կարող են օգտվել մի քանի մասնակիցներ։\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-nopermission": "Ներկայումս այս էջում որևէ տեքստ չկա։\nԴուք կարող եք [[Special:Search/{{PAGENAME}}|որոնել այս անվանունը]] այլ էջերում կամ <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} որոնել այն տեղեկամատյաններում]</span>։",
+       "noarticletext-nopermission": "Ներկայումս այս էջում որևէ տեքստ չկա։\nԴուք կարող եք [[Special:Search/{{PAGENAME}}|որոնել այս անվանունը]] այլ էջերում կամ <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} որոնել այն տեղեկամատյաններում]</span>։ Դուք չունեք թույլտվություն ստեղծել այս էջը։",
        "userpage-userdoesnotexist": "«<nowiki>$1</nowiki>» անվանմամբ մասնակից գոյություն չունի։\nԽնդրում ենք հավաստիանալ նրանում, թե արդյոք ուզում եք ստեղծել/խմբագրել այս էջը։",
        "userpage-userdoesnotexist-view": "«$1» անվանմամբ գրանցված մասնակից չկա։",
        "blocked-notice-logextract": "Այս մասնակիցը ներկա պահին արգելափակված է։\nՍտորև ներկայացված է արգելափակման տեղեկամատյանի վերջին գրառումը.",
        "token_suffix_mismatch": "'''Ձեր խմբագրումը մերժվել է, քանի որ ձեր օգտագործած ծրագիրը աղավաղել է կետադրության նշանները խմբագրման դաշտում։ Խմբագրումը մերժվել է էջի տեքստի խաթարումը կանխելու նպատակով։ Սա երբեմն պայմանավորված է սխալներ պարունակող անանվանեցնող վեբ-փոխարինորդ (proxy) ծառայության օգտագործմամբ։'''",
        "editing": "Խմբագրվում է՝ $1 էջը",
        "creating": "Ստեղծվում է՝ $1 էջը",
-       "editingsection": "Խմբագրվում է՝ $1 էջի (բաժինը)",
+       "editingsection": "Խմբագրվում է $1 բաժինը",
        "editingcomment": "Խմբագրվում է՝ $1 էջի (նոր բաժինը)",
        "editconflict": "Խմբագրման ընդհարում. $1",
        "explainconflict": "Մեկ այլ մասնակից փոփոխել է այս տեքստը ձեր խմբագրման ընթացքում։\nՎերին խմբագրման դաշտում ընդգրկված է ընթացիկ տեքստը, որն ենթակա է հիշման։\nՁեր խմբագրումներով տեքստը գտնվում է ստորին դաշտում։\nՈրպեսզի ձեր փոփոխությունները հիշվեն, միաձուլեք դրանք վերին տեքստի մեջ։\n«{{int:savearticle}}» կոճակին սեղմելով կհիշվի '''միայն''' վերևվի դաշտի տեքստը:",
        "revdelete-log": "Պատճառ.",
        "revdelete-submit": "Կիրառել ընտրված {{PLURAL:$1|տարբերակի|տարբերակների}} վրա",
        "revdelete-success": "'''Տարբերակի տեսանելիությունը բարեհաջող թարմացված է։'''",
-       "revdelete-failure": "<strong>Խմբագրման տեսանելիություն հնարավոր չէր փոփոխել՝</strong>\n$1",
+       "revdelete-failure": "Խմբագրման տեսանելիություն հնարավոր չէր փոփոխել՝\n$1",
        "logdelete-success": "'''Իրադարձության տեսանելիությունը փոփոխված է։'''",
        "revdel-restore": "Փոխել տեսանելիությունը",
        "pagehist": "Էջի պատմություն",
        "nextn": "հաջորդ {{PLURAL:$1|$1}}",
        "prevn-title": "Նախկին $1 {{PLURAL:$1|արդյունքը|արդյունքները}}",
        "nextn-title": "Հաջորդ $1 {{PLURAL:$1|արդյունքը|արդյունքները}}",
+       "shown-title": "Յուրաքանչյուր էջում ցույց տալ $1 {{PLURAL:$1|գրառում|գրառումներ}}",
        "viewprevnext": "Դիտել ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-exists": "'''Այս վիքիում, գոյություն ունի \"[[:$1]]\" անվանումով էջը։'''",
-       "searchmenu-new": "'''Ստեղծե՛լ \"[[:$1]]\" էջը այս վիքիում'''",
+       "searchmenu-new": "<strong>Ստեղծել «[[:$1]]» էջը այս վիքիում։</strong> {{PLURAL:$2|0=|Տես նաև քո որոնած բառով գտնված էջը|Տես նաև որոնման արդյունքները։}}",
        "searchprofile-articles": "Հիմնական էջեր",
        "searchprofile-images": "Մուլտիմեդիա",
        "searchprofile-everything": "Ամենուրեք",
        "searchrelated": "հարակից",
        "searchall": "բոլոր",
        "showingresults": "Ստորև բերված է մինչև {{PLURAL:$1|'''1''' արդյունք|'''$1''' արդյունք}}՝ սկսած №&nbsp;<strong>$2</strong>-ից։",
+       "search-showingresults": "{{PLURAL:$4|<strong>$1</strong> արդյունք <strong>$3</strong>-ից|<strong>$1 - $2</strong> արդյունքներ <strong>$3</strong>-ից}}",
        "search-nonefound": "Որոնմանը համապատասխանող արդյունքներ չեն գտնվել։",
        "powersearch-legend": "Ընդլայնված որոնում",
        "powersearch-ns": "Որոնել անվանատարածքում.",
        "recentchanges-label-bot": "Այս խմբագրումը կատարվել է բոտի կողմից",
        "recentchanges-label-unpatrolled": "Այս խմբագրումը դեռ չի պարեկվել",
        "recentchanges-label-plusminus": "Էջի չափսը փոփոխվեց այսքան բայթով",
+       "recentchanges-legend-heading": "'''Լեգենդ՝'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (տես նաև՝  [[Special:NewPages|նոր էջերի ցանկ]])",
        "rcnotefrom": "Ստորև բերված են փոփոխությունները սկսած՝ '''$2''' (մինչև՝ '''$1''')։",
        "rclistfrom": "Ցույց տալ նոր փոփոխությունները սկսած $3 $2",
        "undelete-show-file-submit": "Այո",
        "namespace": "Անվանատարածք.",
        "invert": "Շրջել ընտրությունը",
+       "tooltip-invert": "Նշեք` տվյալ անվանատարածքի և կից անվանատարածքների (եթե նշված է) էջերի փոփոխությունները թաքցնելու համար։",
        "namespace_association": "Կից անվանատարածք",
+       "tooltip-namespace_association": "Նշեք տվյալ անվանատարածքի հետ կապված քննարկումների անվանատարածքը նույնպես ներառելու համար։",
        "blanknamespace": "(Գլխավոր)",
        "contributions": "{{GENDER:$1|Մասնակցի}} ներդրում",
        "contributions-title": "$1 մասնակցի ներդրումը",
        "nolinkshere-ns": "Ընտրված անվանատարածքում '''[[:$1]]''' էջին հղվող էջեր չկան։",
        "isredirect": "վերահղման էջ",
        "istemplate": "ներառում",
-       "isimage": "պատկերի հղումներ",
+       "isimage": "ֆայլի հղում",
        "whatlinkshere-prev": "{{PLURAL:$1|նախորդ|նախորդ $1}}",
        "whatlinkshere-next": "{{PLURAL:$1|հաջորդ|հաջորդ $1}}",
        "whatlinkshere-links": "← հղումներ",
        "import-interwiki-text": "Նշեք վիքի և ներմուծվող էջի անվանումը։\nՓոփոխումների ժամանակները և խմբագրողների անունները կպահպանվեն։\nԲոլոր միջվիքի ներմուծման գործողությունները գրանցվում են [[Special:Log/import|ներմուծման տեղեկամատյանում]]։",
        "import-interwiki-history": "Պատճենել այս էջի փոփոխումների լրիվ պատմությունը",
        "import-interwiki-submit": "Ներմուծել",
-       "import-interwiki-namespace": "Տեղադրել էջերը անվանատարածքում.",
        "import-upload-filename": "Նիշքի անուն․",
        "import-comment": "Մեկնաբանություն.",
        "importtext": "Խնդրում ենք արտածեք էջը ելակետային վիքիից օգտագործելով [[Special:Export|արտածման գործիք]], հիշեք այն նիշքի տեսքով ձեր համակարգչի վրա և այնուհետև, բեռնեք այն այստեղ։",
        "tooltip-pt-mycontris": "Ձեր ներդրումների ցանկը",
        "tooltip-pt-login": "Կոչ ենք անում մտնել համակարգ, սակայն դա պարտադիր չէ",
        "tooltip-pt-logout": "Դուրս գալ համակարգից",
+       "tooltip-pt-createaccount": "Խորհուրդ է տրվում ստեղծել մասնակցային հաշիվ և մուտք գործել համակարգ, սակայն դա անելը պարտադիր չէ։",
        "tooltip-ca-talk": "Քննարկումներ այս էջի բովանդակության մասին",
        "tooltip-ca-edit": "Դուք կարող էք խմբագրել այս էջը։ Խնդրում ենք օգտագործել նախադիտման կոճակը հիշելուց առաջ։",
        "tooltip-ca-addsection": "Ստեղծել նոր բաժին",
        "svg-long-desc": "SVG-նիշք, անվանապես $1 × $2 փիքսել, նիշքի չափը՝ $3",
        "show-big-image": "Սկզբնական նիշք",
        "show-big-image-preview": "Նախադիտման չափ՝ $1։",
+       "show-big-image-other": "Այլ {{PLURAL:$2|1=թույլտվություն|թույլտվությաններ}}: $1.",
        "show-big-image-size": "$1 × $2 պիքսել",
        "newimages": "Նոր նիշքերի սրահ",
        "imagelisttext": "Ստորև բերված է '''$1''' {{PLURAL:$1|նիշքի}} ցանկ՝ դասավորված ըստ $2։",
        "metadata-help": "Նիշքը պարունակում է ընդարձակ տվյալները, հավանաբար ավելացված թվային լուսանկարչական ապարատի կամ սկաների կողմից, որոնք օգտագործվել են նկարը ստեղծելու կամ թվայնացնելու համար։\nԵթե նիշքը ձևափոխվել է ստեղծումից ի վեր, ապա որոշ տվյալները կարող են չհամապատասխանել ձևափոխված նիշքին։",
        "metadata-expand": "Ցուց տալ ընդարձակ տվյալները",
        "metadata-collapse": "Թաքցնել ընդարձակ տվյլաները",
-       "metadata-fields": "EXIF Õ´Õ¥Õ¿Õ¡Õ¿Õ¾ÕµÕ¡Õ¬Õ¶Õ¥Ö\80Õ« Õ¡ÕµÕ¶ Õ¤Õ¡Õ·Õ¿Õ¥Ö\80Õ¨, Õ¸Ö\80Õ¸Õ¶Ö\84 Õ¶Õ·Õ¾Õ¡Õ® Õ¥Õ¶Ö\84 Õ¡ÕµÕ½ Õ¸Ö\82Õ²Õ¥Ö\80Õ±Õ« Õ´Õ¥Õ», Õ¯Ö\81Õ¸Ö\82Ö\81Õ¡Õ¤Ö\80Õ¾Õ¥Õ¶ ÕºÕ¡Õ¿Õ¯Õ¥Ö\80Õ« Õ§Õ»Õ¸Ö\82Õ¶ Õ¬Õ¼Õ¸Ö\82Õ©ÕµÕ¡Õ´Õ¢։ Այլ տվյալները լռությամբ կթաքցվեն։\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": "EXIF Õ´Õ¥Õ¿Õ¡Õ¿Õ¾ÕµÕ¡Õ¬Õ¶Õ¥Ö\80Õ« Õ¡ÕµÕ¶ Õ¤Õ¡Õ·Õ¿Õ¥Ö\80Õ¨, Õ¸Ö\80Õ¸Õ¶Ö\84 Õ¶Õ·Õ¾Õ¡Õ® Õ¥Õ¶Ö\84 Õ¡ÕµÕ½ Õ¸Ö\82Õ²Õ¥Ö\80Õ±Õ« Õ´Õ¥Õ», Õ¯Ö\81Õ¸Ö\82Ö\81Õ¡Õ¤Ö\80Õ¾Õ¥Õ¶ ÕºÕ¡Õ¿Õ¯Õ¥Ö\80Õ« Õ§Õ»Õ¸Ö\82Õ´, Õ¥Ö\80Õ¢ Õ´Õ¥Õ¿Õ¡Õ¿Õ¾ÕµÕ¡Õ¬Õ¶Õ¥Ö\80Õ« Õ¡Õ²ÕµÕ¸Ö\82Õ½Õ¡Õ¯Õ¨ Õ®Õ¡Õ¬Õ¾Õ¡Õ® Õ§։ Այլ տվյալները լռությամբ կթաքցվեն։\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-orientation": "Դիրք",
        "exif-xresolution": "Հորիզոնական կետաչափ",
        "exif-yresolution": "Ուղղահայաց կետաչափ",
+       "exif-datetime": "Ֆայի փոփոխման ամսաթիվը և ժամանակը",
        "exif-make": "Խցիկի արտադրող",
        "exif-model": "Խցիկի մոդել",
        "exif-software": "Օգտագործված ծրագիր",
        "dberr-problems": "Այս կայքում առաջացել են տեխնիկական խնդիրներ։ Հայցում ենք ձեր ներողությունը։",
        "dberr-again": "Փորձեք մի քանի րոպե սպասել և վերաբեռնել էջը։",
        "htmlform-submit": " \nՀաշվել",
-       "logentry-delete-delete": "$1 ջնջեց էջը $3",
+       "logentry-delete-delete": "$1 {{GENDER:$2|ջնջեց}} $3 էջը",
        "logentry-delete-restore": "$1 վերականգնեց էջը $3",
        "logentry-delete-event": "$1 փոխեց տեղեկամատյանի {{PLURAL:$5|1 գրանցման|$5 գրանցումների}} տեսանելությունը $3-ում. $4",
        "logentry-delete-revision": "$1 փոխեց {{PLURAL:$5|1 խմբագրման|$5 խմբագրումների}} տեսանելությունը $3 էջում. $4",
        "duration-decades": "$1 {{PLURAL:$1|տասնամյակ}}",
        "duration-centuries": "$1 {{PLURAL:$1|դար}}",
        "duration-millennia": "$1 {{PLURAL:$1|հազարամյակ}}",
-       "expandtemplates": "Կաղապարների ընդարձակում"
+       "expandtemplates": "Կաղապարների ընդարձակում",
+       "special-characters-group-latin": "Լատիներեն",
+       "special-characters-group-latinextended": "Լատիներեն ընդլայնված",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Սիմվոլներ",
+       "special-characters-group-greek": "Հունարեն",
+       "special-characters-group-cyrillic": "Կիրիլիցա",
+       "special-characters-group-arabic": "Արաբերեն",
+       "special-characters-group-arabicextended": "Արաբերեն ընդլայնված",
+       "special-characters-group-persian": "Պարսկերեն",
+       "special-characters-group-hebrew": "Եբրայերեն",
+       "special-characters-group-bangla": "Բենգալերեն",
+       "special-characters-group-tamil": "Թամիլերեն",
+       "special-characters-group-telugu": "Տելուգու",
+       "special-characters-group-sinhala": "Սինհալերեն",
+       "special-characters-group-gujarati": "Գուջարատի",
+       "special-characters-group-devanagari": "Դեվանգարի",
+       "special-characters-group-thai": "Թայերեն",
+       "special-characters-group-lao": "Լաոերեն",
+       "special-characters-group-khmer": "Կխմեր",
+       "special-characters-title-endash": "ո գծիկ (en dash)",
+       "special-characters-title-emdash": "ա գծիկ (em dash)",
+       "special-characters-title-minus": "հանածի նշան"
 }
index d8bb042..8754712 100644 (file)
        "import-interwiki-history": "Copiar tote le versiones del historia de iste pagina",
        "import-interwiki-templates": "Includer tote le patronos",
        "import-interwiki-submit": "Importar",
-       "import-interwiki-namespace": "Spatio de nomines de destination:",
-       "import-interwiki-rootpage": "Pagina radice de destination (optional):",
        "import-upload-filename": "Nomine del file:",
        "import-comment": "Commento:",
        "importtext": "Per favor exporta le file del wiki de origine con le [[Special:Export|facilitate de exportation]].\nSalveguarda lo in tu computator e incarga lo hic.",
index 7ac698b..14ab6dc 100644 (file)
        "history-feed-description": "Riwayat revisi halaman ini di wiki",
        "history-feed-item-nocomment": "$1 pada $2",
        "history-feed-empty": "Halaman yang diminta tak ditemukan.\nKemungkinan telah dihapus dari wiki, atau diberi nama baru.\nCoba [[Special:Search|lakukan pencarian di wiki]] untuk halaman baru yang relevan.",
+       "history-edit-tags": "Sunting tag dari revisi yang terpilih",
        "rev-deleted-comment": "(ringkasan suntingan dihapus)",
        "rev-deleted-user": "(nama pengguna dihapus)",
        "rev-deleted-event": "(rincian log dihapus)",
        "listfiles-delete": "hapus",
        "listfiles-summary": "Halaman istimewa ini menampilkan semua berkas yang telah diunggah.\nKetika disaring oleh pengguna, hanya versi berkas terbaru dari berkas yang diunggah oleh pengguna tersebut yang ditampilkan.",
        "listfiles_search_for": "Cari nama berkas:",
+       "listfiles-userdoesnotexist": "Akun pengguna \"$1\" tidak terdaftar.",
        "imgfile": "berkas",
        "listfiles": "Daftar berkas",
        "listfiles_thumb": "Miniatur",
        "logempty": "Tidak ditemukan entri log yang sesuai.",
        "log-title-wildcard": "Cari judul yang diawali dengan teks tersebut",
        "showhideselectedlogentries": "Tampilkan/sembunyikan entri log terpilih",
+       "log-edit-tags": "Sunting tag dari entri log yang terpilih",
        "allpages": "Semua halaman",
        "nextpage": "Halaman selanjutnya ($1)",
        "prevpage": "Halaman sebelumnya ($1)",
        "protect-othertime": "Waktu lain:",
        "protect-othertime-op": "waktu lain",
        "protect-existing-expiry": "Waktu kedaluwarsa saat ini: $2 $3",
+       "protect-existing-expiry-infinity": "Waktu kedaluwarsa yang ada: tidak terdefinisi",
        "protect-otherreason": "Alasan lain/tambahan:",
        "protect-otherreason-op": "Alasan lain",
        "protect-dropdown": "*Alasan umum pelindungan\n** Vandalisme berulang\n** Spam berulang\n** Perang suntingan\n** Halaman dengan lalu-lintas tinggi",
        "namespace": "Ruang nama:",
        "invert": "Balikkan pilihan",
        "tooltip-invert": "Centang kotak ini untuk menyembunyikan perubahan halaman dalam ruang nama yang dipilih (dan ruang nama terkait jika dicentang)",
+       "tooltip-whatlinkshere-invert": "Centang kotak ini untuk menyembunyikan pranala dalam ruang nama yang dipilih.",
        "namespace_association": "Ruangnama terkait",
        "tooltip-namespace_association": "Centang halaman ini untuk menyertakan ruang nama pembicaraan atau subjek yang terkait dengan ruang nama terpilih",
        "blanknamespace": "(Utama)",
        "unblocked": "Blokir terhadap [[User:$1|$1]] telah dicabut",
        "unblocked-range": "$1 telah diblokir",
        "unblocked-id": "Blokir $1 telah dicabut",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] telah dibuka blokirnya.",
        "blocklist": "Pengguna terblokir",
        "ipblocklist": "Pengguna terblokir",
        "ipblocklist-legend": "Cari pengguna yang diblokir",
        "thumbnail-temp-create": "Tidak dapat membuat berkas kecil temporer",
        "thumbnail-dest-create": "Tidak dapat menyimpan berkas kecil ke tujuan",
        "thumbnail_invalid_params": "Kesalahan parameter miniatur",
+       "thumbnail_toobigimagearea": "Berkas dengan dimensi lebih besar dari $1",
        "thumbnail_dest_directory": "Direktori tujuan tak dapat dibuat",
        "thumbnail_image-type": "Tipe gambar tidak didukung",
        "thumbnail_gd-library": "Konfigurasi pustaka GD tak lengkap: tak ada fungsi $1",
        "thumbnail_image-missing": "Berkas yang tampaknya hilang: $1",
        "thumbnail_image-failure-limit": "Ada terlalu banyak upaya yang gagal baru-baru ini ($1 atau lebih) untuk membuat miniatur ini. Silakan coba lagi nanti.",
        "import": "Impor halaman",
-       "importinterwiki": "Impor transwiki",
-       "import-interwiki-text": "Pilih suatu wiki dan judul halaman yang akan di impor.\nTanggal revisi dan nama penyunting akan dipertahankan.\nSemua aktivitas impor transwiki akan dicatat di [[Special:Log/import|log impor]].",
+       "importinterwiki": "Impor dari wiki yang lainnya",
+       "import-interwiki-text": "Pilih suatu wiki dan judul halaman yang akan di impor.\nTanggal revisi dan nama penyunting akan dipertahankan.\nSemua aktivitas impor dari wiki lainnya akan dicatat di [[Special:Log/import|log impor]].",
+       "import-interwiki-sourcewiki": "Wiki sumber:",
+       "import-interwiki-sourcepage": "Sumber halaman:",
        "import-interwiki-history": "Salin semua versi terdahulu dari halaman ini",
        "import-interwiki-templates": "Sertakan semua templat",
        "import-interwiki-submit": "Impor",
-       "import-interwiki-namespace": "Ruang nama tujuan:",
-       "import-interwiki-rootpage": "Halaman turunan tujuan (opsional):",
+       "import-mapping-default": "Impor ke lokasi standar",
+       "import-mapping-namespace": "Impor ke ruang nama:",
+       "import-mapping-subpage": "Impor sebagai subhalaman dari halaman berikut:",
        "import-upload-filename": "Nama berkas:",
        "import-comment": "Komentar:",
        "importtext": "Silakan ekspor berkas dari wiki sumber dengan menggunakan [[Special:Export|fasilitas ekspor]].\nSimpan ke komputer Anda dan unggah ke sini.",
        "importcantopen": "Berkas impor tidak dapat dibuka",
        "importbadinterwiki": "Pranala interwiki rusak",
        "importsuccess": "Impor sukses!",
-       "importnosources": "Tidak ada sumber impor transwiki yang telah dibuat dan pemuatan riwayat secara langsung telah di non-aktifkan.",
+       "importnosources": "Tidak ada wiki dari yang diimpor yang telah dibuat dan pemuatan riwayat secara langsung telah di non-aktifkan.",
        "importnofile": "Tidak ada berkas sumber impor yang telah dimuat.",
        "importuploaderrorsize": "Pemuatan berkas impor gagal. Ukuran berkas melebihi ukuran yang diperbolehkan.",
        "importuploaderrorpartial": "Pemuatan berkas impor gagal. Hanya sebagian berkas yang berhasil dimuat.",
        "revdelete-uname-unhid": "nama pengguna tidak disembunyikan",
        "revdelete-restricted": "akses telah dibatasi untuk opsis",
        "revdelete-unrestricted": "pembatasan akses opsis dihapuskan",
+       "logentry-block-block": "$1 {{GENDER:$2|memblokir}} {{GENDER:$4|$3}} dengan waktu kedaluwarsa $5 $6",
+       "logentry-block-reblock": "$1 {{GENDER:$2|mengubah}} pemblokiran {{GENDER:$4|$3}} dengan waktu kedaluwarsa $5 $6",
+       "logentry-suppress-block": "$1 {{GENDER:$2|memblokir}} {{GENDER:$4|$3}} dengan waktu kedaluwarsa $5 $6",
+       "logentry-suppress-reblock": "$1 {{GENDER:$2|mengubah}} pemblokiran {{GENDER:$4|$3}} dengan waktu kedaluwarsa $5 $6",
        "logentry-merge-merge": "$1 {{GENDER:$2|menggabungkan}} $3 dengan $4 (revisi lebih dari $5)",
        "logentry-move-move": "$1 {{GENDER:$2|memindahkan}} halaman $3 ke $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|memindahkan}} halaman $3 ke $4 tanpa membuat pengalihan",
index 9b4dfcc..293b656 100644 (file)
        "feedback-close": "Ọméchá.",
        "feedback-message": "Ozi:",
        "searchsuggest-search": "Chọwa",
-       "expand_templates_ok": "Ngwanu"
+       "expand_templates_ok": "Ngwanu",
+       "special-characters-group-latin": "Latin",
+       "special-characters-group-latinextended": "Latin dọrọ",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Nkárí",
+       "special-characters-group-greek": "Greek",
+       "special-characters-group-cyrillic": "Cyrillic",
+       "special-characters-group-arabic": "Arabiki",
+       "special-characters-group-persian": "Asụsụ Persia",
+       "special-characters-group-hebrew": "Asụsụ Hebrew",
+       "special-characters-group-bangla": "Bangla",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Sinhala",
+       "special-characters-group-gujarati": "Gujarati",
+       "special-characters-group-thai": "Asụsụ Thai",
+       "special-characters-group-lao": "Asụsụ Laos",
+       "special-characters-group-khmer": "Khmer"
 }
index 5fc0be2..b95a058 100644 (file)
        "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": "<strong>Balligi ti panagpabaro ti panagkita ti rebision.</strong>",
-       "revdelete-failure": "<strong>Saan a napabaro ti panagkita ti rebision.</strong>\n$1",
-       "logdelete-success": "<strong>Balligi ti pannakaisaad ti listaan ti panagkita.</strong>",
-       "logdelete-failure": "<strong>Napaay ti pannakaisaad ti listaan ti panagkita:</strong>\n$1",
+       "revdelete-success": "Balligi ti panagpabaro 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-failure": "Napaay ti pannakaisaad ti listaan ti panagkita:\n$1",
        "revdel-restore": "sukatan ti panagkita",
        "pagehist": "Pakasaritaan ti panid",
        "deletedhist": "Naikkat a pakasaritaan",
        "import-interwiki-history": "Kopiaen amin dagiti rebision ti pakasaritaan daytoy a panid",
        "import-interwiki-templates": "Iraman amin dagiti plantilia",
        "import-interwiki-submit": "Agala",
-       "import-interwiki-namespace": "Pangipanan a nagan ti espasio:",
-       "import-interwiki-rootpage": "Papanan a ramut ti panid (pagpilian):",
        "import-upload-filename": "Nagan ti papeles:",
        "import-comment": "Komentario:",
        "importtext": "Pangngaasi nga ipanmo ti papeles manipud ti nagtaudan a wiki nga agusar ti [[Special:Export|ramit ti panagipan]].\nIdulinmo iti bukodmo a kompiuter ken ikarga ditoy.",
        "import-rootpage-nosubpage": "Ti nagan ti espasio ti \"$1\" iti ramut ti panid ket saan a mangpalubos kadagiti subpanid.",
        "importlogpage": "Listaan ti panagala",
        "importlogpagetext": "Dagiti administratibo a panagala kadagiti panid nga addaan iti pakasaritaan ti panag-urnos manipud kadagiti sabali a wiki.",
-       "import-logentry-upload": "innala ti [[$1]] babaen ti panagikarga ti papeles",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|a rebision|kadagiti rebision}} ti naala",
-       "import-logentry-interwiki": "nai-transwiki iti $1",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|rebision|dagiti rebision}} ti naala manipud ti $2",
        "javascripttest": "Panagsubok ti JavaScript",
        "javascripttest-pagetext-noframework": "Daytoy a panid ket naireserba para iti panagpataray kadagiti panagsubok ti JavaScript.",
        "mediastatistics-table-totalbytes": "Naitiptipon a kadakkel",
        "mediastatistics-header-unknown": "Di ammo",
        "mediastatistics-header-bitmap": "Ladladawan ti bitmap",
-       "mediastatistics-header-office": "Opisina"
+       "mediastatistics-header-office": "Opisina",
+       "special-characters-group-latin": "Latin",
+       "special-characters-group-latinextended": "Latin napaatiddog",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Dagiti simbolo",
+       "special-characters-group-greek": "Griego",
+       "special-characters-group-cyrillic": "Siriliko",
+       "special-characters-group-arabic": "Arabiko",
+       "special-characters-group-arabicextended": "Arabiko a napaatiddog",
+       "special-characters-group-persian": "Persiano",
+       "special-characters-group-hebrew": "Hebreo",
+       "special-characters-group-bangla": "Bangla",
+       "special-characters-group-tamil": "Tamil",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Sinhala",
+       "special-characters-group-gujarati": "Gujarati",
+       "special-characters-group-devanagari": "Devanagari",
+       "special-characters-group-thai": "Thai",
+       "special-characters-group-lao": "Lao",
+       "special-characters-group-khmer": "Khmer",
+       "special-characters-title-endash": "en dash",
+       "special-characters-title-emdash": "em dash",
+       "special-characters-title-minus": "senial a panagkissay"
 }
index 9799b9d..35b8d40 100644 (file)
        "htmlform-reset": "Хувцамаш юхадаккха",
        "htmlform-selectorother-other": "Кхыдола",
        "rightsnone": "(а)",
-       "revdelete-summary": "хувцамий лоацам"
+       "revdelete-summary": "хувцамий лоацам",
+       "special-characters-group-latin": "Лаьтмий",
+       "special-characters-group-greek": "Джелтий",
+       "special-characters-group-cyrillic": "Цырилиций",
+       "special-characters-group-arabic": "Ӏарбий",
+       "special-characters-group-persian": "Фаьранзий",
+       "special-characters-group-hebrew": "Жугтий"
 }
index afc328c..03cbc8c 100644 (file)
        "searchsuggest-containing": "quan kontenas...",
        "expand_templates_output": "Rezulto",
        "expand_templates_ok": "O.K.",
-       "expand_templates_preview": "Previdar"
+       "expand_templates_preview": "Previdar",
+       "special-characters-group-latin": "Latina",
+       "special-characters-group-latinextended": "Latina extensita",
+       "special-characters-group-symbols": "Simboli",
+       "special-characters-group-greek": "Grekiana",
+       "special-characters-group-cyrillic": "Kirila",
+       "special-characters-group-arabic": "Arabiana",
+       "special-characters-group-persian": "Persiana"
 }
index cdaaeb1..a6b8a8f 100644 (file)
        "import-interwiki-history": "Afrita allar breytingar þessarar síðu",
        "import-interwiki-templates": "Innifala öll snið með",
        "import-interwiki-submit": "Flytja inn",
-       "import-interwiki-namespace": "Ákvörðunarnafnrými:",
-       "import-interwiki-rootpage": "Markmóðursíða (valfrjáls):",
        "import-upload-filename": "Skráarnafn:",
        "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.",
        "revdelete-uname-unhid": "notandanafn birt",
        "revdelete-restricted": "hömlur settar á stjórnendur",
        "revdelete-unrestricted": "fjarlægja hömlur á stjórnendur",
+       "logentry-block-block": "$1 {{GENDER:$2|bannaði}} {{GENDER:$4|$3}}, rennur út eftir $5 $6",
        "logentry-suppress-block": "$1 {{GENDER:$2|bannaði}} {{GENDER:$4|$3}}, rennur út eftir $5 $6",
        "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",
index 096a490..c0de184 100644 (file)
        "import-interwiki-history": "Copia l'intera cronologia di questa pagina",
        "import-interwiki-templates": "Includi tutti i template",
        "import-interwiki-submit": "Importa",
-       "import-interwiki-namespace": "Namespace di destinazione:",
-       "import-interwiki-rootpage": "Pagina principale di destinazione (opzionale):",
+       "import-mapping-default": "Importa in destinazione predefinita",
+       "import-mapping-namespace": "Importa in un namespace:",
+       "import-mapping-subpage": "Importa come sottopagine della pagina seguente:",
        "import-upload-filename": "Nome file:",
        "import-comment": "Oggetto:",
        "importtext": "Si prega di esportare il file dal sito wiki di origine con la [[Special:Export|funzione di esportazione]], salvarlo sul proprio disco e poi caricarlo qui.",
        "tags-deactivate-reason": "Motivo:",
        "tags-deactivate-not-allowed": "Non è possibile disattivare il tag \"$1\".",
        "tags-deactivate-submit": "Disattiva",
+       "tags-apply-no-permission": "Non disponi dell'autorizzazione per applicare la modifica di tag insieme con le tue modifiche.",
        "tags-apply-not-allowed-one": "L'etichetta \"$1\" non può essere applicata manualmente.",
        "tags-apply-not-allowed-multi": "{{PLURAL:$2|La seguente etichetta non può essere applicata|Le seguenti etichette non possono essere applicate}}  manualmente: $1",
+       "tags-update-no-permission": "Non hai il permesso di aggiungere o rimuovere modifiche di tag dalle singole revisioni o voci di registro.",
+       "tags-update-add-not-allowed-one": "Il tag \"$1\" non può essere aggiunto manualmente.",
+       "tags-update-add-not-allowed-multi": "{{PLURAL:$2|Il seguente tag non può essere aggiunto|I seguenti tag non possono essere aggiunti}} manualmente: $1",
+       "tags-update-remove-not-allowed-one": "Il tag \"$1\" non può essere rimosso.",
+       "tags-update-remove-not-allowed-multi": "Non è consentito rimuovere manualmente {{PLURAL:$2|il seguente tag|i seguenti tag}}: $1",
        "tags-edit-title": "Modifica etichette",
        "tags-edit-manage-link": "Gestisci etichette",
+       "tags-edit-revision-selected": "{{PLURAL:$1|Versione selezionata|Versioni selezionate}} di [[:$2]]:",
+       "tags-edit-logentry-selected": "{{PLURAL:$1|Evento del registro selezionato|Eventi del registro selezionati}}:",
        "tags-edit-existing-tags": "Etichette esistenti:",
        "tags-edit-existing-tags-none": "''Nessuna''",
        "tags-edit-new-tags": "Nuove etichette:",
        "tags-edit-add": "Aggiungi queste etichette:",
        "tags-edit-remove": "Rimuovi queste etichette:",
+       "tags-edit-remove-all-tags": "(rimuovi tutti i tag)",
        "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-success": "Le modifiche sono state applicate correttamente.",
+       "tags-edit-failure": "Non è stato possibile effettuare le seguenti modifiche:\n$1",
+       "tags-edit-none-selected": "Per favore, seleziona almeno un tag da aggiungere o rimuovere.",
        "comparepages": "Confronta le pagine",
        "compare-page1": "Pagina 1",
        "compare-page2": "Pagina 2",
index 6c89b74..1a1ece4 100644 (file)
@@ -64,7 +64,8 @@
                        "SkyDaisy9",
                        "Los688",
                        "朝彦",
-                       "Otokoume"
+                       "Otokoume",
+                       "赤城。"
                ]
        },
        "tog-underline": "リンクの下線:",
        "no-null-revision": "ページ「$1」に新しい空編集の版を作成できませんでした。",
        "badtitle": "正しくないページ名",
        "badtitletext": "無効または空のページ名が指定されたか、言語間/ウィキ間リンクの方法に誤りがあります。\nページ名に使用できない文字が含まれている可能性があります。",
+       "title-invalid-utf8": "指定されたページ名が無効なUTF-8シーケンスを含んでいます。",
+       "title-invalid-characters": "指定されたページ名が無効な文字 \"$1\" を含んでいます。",
        "perfcached": "以下のデータはキャッシュされており、最新ではない可能性があります。最大 $1 {{PLURAL:$1|件の結果}}がキャッシュされます。",
        "perfcachedts": "以下のデータはキャッシュされており、最終更新日時は $1 です。最大 $4 {{PLURAL:$4|件の結果}}がキャッシュされます。",
        "querypage-no-updates": "ページの更新は無効になっています。\n以下のデータの更新は現在行われていません。",
        "history-feed-description": "このウィキのこのページに関する変更履歴",
        "history-feed-item-nocomment": "$2に$1による",
        "history-feed-empty": "要求されたページは存在しません。\nこのウィキから既に削除されたか、名前が変更された可能性があります。\n[[Special:Search|このウィキの検索]]で関連する新しいページを探してみてください。",
+       "history-edit-tags": "選択した版のタグを編集",
        "rev-deleted-comment": "(要約は除去されています)",
        "rev-deleted-user": "(利用者名は除去されています)",
        "rev-deleted-event": "(記録の詳細は除去されています)",
        "revdelete-unsuppress": "復元版に対する制限を除去",
        "revdelete-log": "理由:",
        "revdelete-submit": "選択された{{PLURAL:$1|版}}に適用",
-       "revdelete-success": "<strong>版の閲覧レベルを更新しました。</strong>",
-       "revdelete-failure": "<strong>版の閲覧レベルを更新できませんでした:</strong>\n$1",
-       "logdelete-success": "<strong>記録の閲覧レベルを変更しました。</strong>",
-       "logdelete-failure": "<strong>記録の閲覧レベルを設定できませんでした。</strong>\n$1",
+       "revdelete-success": "版の閲覧レベルを更新しました。",
+       "revdelete-failure": "版の閲覧レベルを更新できませんでした:\n$1",
+       "logdelete-success": "記録の閲覧レベルを変更しました。",
+       "logdelete-failure": "記録の閲覧レベルを設定できませんでした。\n$1",
        "revdel-restore": "閲覧レベルを変更",
        "pagehist": "ページの履歴",
        "deletedhist": "削除された履歴",
        "logempty": "該当する記録はありません。",
        "log-title-wildcard": "この文字列で始まるページ名を検索",
        "showhideselectedlogentries": "選択した記録項目を表示/非表示",
+       "log-edit-tags": "選択した記録項目のタグを編集",
        "allpages": "全ページ",
        "nextpage": "次のページ ($1)",
        "prevpage": "前のページ ($1)",
        "import-interwiki-history": "このページのすべての版を複製する",
        "import-interwiki-templates": "すべてのテンプレートを含める",
        "import-interwiki-submit": "取り込み",
-       "import-interwiki-namespace": "取り込み先の名前空間:",
-       "import-interwiki-rootpage": "取り込み先のルートページ (省略可能):",
        "import-upload-filename": "ファイル名:",
        "import-comment": "コメント:",
        "importtext": "元のウィキで[[Special:Export|書き出し機能]]を使用してファイルに書き出してください。\nそれをコンピューターに保存した後、こちらへアップロードしてください。",
        "pageinfo-protect-cascading-yes": "はい",
        "pageinfo-protect-cascading-from": "カスケード保護の起点",
        "pageinfo-category-info": "カテゴリ情報",
+       "pageinfo-category-total": "総メンバー数",
        "pageinfo-category-pages": "ページ数",
        "pageinfo-category-subcats": "下位カテゴリ数",
        "pageinfo-category-files": "ファイル数",
        "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",
        "tags-deactivate-reason": "理由:",
        "tags-deactivate-not-allowed": "タグ「$1」は無効化できません。",
        "tags-deactivate-submit": "無効化",
+       "tags-edit-title": "タグの編集",
+       "tags-edit-existing-tags": "既存のタグ:",
+       "tags-edit-new-tags": "新しいタグ:",
+       "tags-edit-reason": "理由:",
        "comparepages": "ページの比較",
        "compare-page1": "ページ 1",
        "compare-page2": "ページ 2",
index ffd855f..082db55 100644 (file)
        "permalink": "Pranala permanèn",
        "print": "Cithak",
        "view": "Pirsani",
+       "view-foreign": "Pirsani ing $1",
        "edit": "Sunting",
        "create": "Nggawé",
+       "create-local": "Tambah pawedharan lokal",
        "editthispage": "Sunting kaca iki",
        "create-this-page": "Nggawé kaca iki",
        "delete": "Busak",
        "loginlanguagelabel": "Basa: $1",
        "suspicious-userlogout": "Panjaluk panjenengan supaya metu ditolak amarga katoné panjlajah internt utawa proksi panyinggah.",
        "createacct-another-realname-tip": "Jeneng asli ora kudu dilebokake.\n\nYen sampeyan milih nglebokake jeneng asli, jeneng kuwi bakal dinggo ngwenehi atribusi kanggo karya-karyane.",
+       "pt-login": "Mlebet log",
+       "pt-createaccount": "Damel akun enggal",
        "php-mail-error-unknown": "Kasalahan ora dingertèni nèng piguna mail() PHP.",
        "user-mail-no-addy": "Njajal ngirim layang èlèktronik tanpa alamat layang èlèktronik.",
        "user-mail-no-body": "Nyoba ngirim layang e-mail, tapi isine kosong.",
        "preview": "Pratayang",
        "showpreview": "Mirsani pratayang",
        "showdiff": "Tuduhna pangowahan",
-       "anoneditwarning": "Panjenengan ora kadaftar mlebu. Alamat IP panjenengan bakal kacathet ing sajarah panyuntingan kaca iki.",
+       "anoneditwarning": "<strong>Penget:</strong> Panjenengan boten mlebet log. Alamat IP Panjenengan badhe katingal dening publik manawi Panjenengan ngayahi ewah-ewahan. Manawi Panjenengan  <strong>[$1 mlebet log]</strong> utawai <strong>[$2 damel akun]</strong>, suntingan Panjenengan badhe kaatribusekaken dhumateng  nama pangangge Panjenengan, lan rupi-rupi  kauntungan sanesipun.",
        "anonpreviewwarning": "''Sampéyan durung mlebu log. Nyimpen bakal nyathet alamat IP Sampéyan nèng riwayat sunting kaca iki.''",
        "missingsummary": "'''Pènget:''' Panjenengan ora nglebokaké ringkesan panyuntingan. Menawa panjenengan mencèt tombol Simpen manèh, suntingan panjenengan bakal kasimpen tanpa ringkesan panyuntingan.",
        "missingcommenttext": "Tulung lebokna komentar ing ngisor iki.",
        "shown-title": "Tampilaké $1 {{PLURAL:$1|asil|asil}} saben kaca",
        "viewprevnext": "Deleng ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-exists": "'''Ana kaca kanthi jeneng \"[[$1]]\" ing wiki iki'''",
-       "searchmenu-new": "'''Gawé kaca \"[[:$1]]\" ing wiki iki!'''",
+       "searchmenu-new": "'''Damel kaca \"[[:$1]]\" ing wiki punika!'''",
        "searchprofile-articles": "Kaca isi",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Kabèh",
        "searchrelated": "kagandhèng",
        "searchall": "kabèh",
        "showingresults": "Ing ngisor iki dituduhaké {{PLURAL:$1|'''1''' kasil|'''$1''' kasil}}, wiwitané saking #<strong>$2</strong>.",
+       "search-showingresults": "{{PLURAL:$4|Asil <strong>$1</strong> dari <strong>$3</strong>|Asil <strong>$1 - $2</strong> saking <strong>$3</strong>}}",
        "search-nonefound": "Ora ana kasil sing cocog karo pitakonan (''query'').",
        "powersearch-legend": "Panggolèkan sabanjuré (''advance search'')",
        "powersearch-ns": "Panggolèkan ing ruang jeneng:",
        "rcnotefrom": "Ing ngisor iki owah-owahan wiwit <strong>$2</strong> (kapacak nganti <strong>$1</strong> owah-owahan).",
        "rclistfrom": "Saiki nuduhaké owah-owahan wiwit tanggal $3 $2",
        "rcshowhideminor": "$1 suntingan sithik",
+       "rcshowhideminor-hide": "Singidaken",
        "rcshowhidebots": "$1 bot",
+       "rcshowhidebots-show": "Tedahaken",
        "rcshowhideliu": "$1 panganggo sing wis ndaptar",
+       "rcshowhideliu-hide": "Singidaken",
        "rcshowhideanons": "$1 panganggo anonim",
+       "rcshowhideanons-hide": "Singidaken",
        "rcshowhidepatr": "$1 suntingan sing dipatroli",
        "rcshowhidemine": "$1 suntinganku",
+       "rcshowhidemine-hide": "Singidaken",
        "rclinks": "Tuduhna owah-owahan pungkasan $1 ing $2 dina pungkasan iki.<br />$3",
        "diff": "béda",
        "hist": "sajarah",
        "import-interwiki-history": "Tuladen kabèh vèrsi lawas saka kaca iki",
        "import-interwiki-templates": "Katutna kabèh cithakan",
        "import-interwiki-submit": "Impor",
-       "import-interwiki-namespace": "Bilik jeneng tujuan:",
-       "import-interwiki-rootpage": "Halaman turunan tujuan (opsional):",
        "import-upload-filename": "Jeneng berkas:",
        "import-comment": "Komentar:",
        "importtext": "Mangga èkspor berkas saka wiki sumber nganggo [[Special:Export|prangkat èkspor]].\nSimpen nèng komputer Sampéyan lan unggaha nèng kéné.",
        "tooltip-pt-mycontris": "Daftar kontribusi panjenengan",
        "tooltip-pt-login": "Panjenengan diaturi mlebu log, nanging ora dikudokaké.",
        "tooltip-pt-logout": "Log metu (oncat)",
+       "tooltip-pt-createaccount": "Panjenengan kasuwun damel akun lan mlebet log; ananging bab punika boten wajib",
        "tooltip-ca-talk": "Dhiskusi perkara isi",
        "tooltip-ca-edit": "Sunting kaca iki. Nganggoa tombol pratayang sadurungé nyimpen.",
        "tooltip-ca-addsection": "Miwiti bagèyan anyar",
index e509ee2..da6a59d 100644 (file)
@@ -22,7 +22,8 @@
                        "לערי ריינהארט",
                        "გიორგიმელა",
                        "아라",
-                       "Macofe"
+                       "Macofe",
+                       "SHOTHA"
                ]
        },
        "tog-underline": "ბმულების ხაზგასმა:",
        "pool-timeout": "ბლოკირების ლოდინის დრო ამოიწურა",
        "pool-queuefull": "მოთხოვნების დამგროვებელი სავსეა",
        "pool-errorunknown": "უცნობი შეცდომა",
+       "pool-servererror": "პულის მრიცხველის მომსახურება მიუწვდომელია ($1).",
        "poolcounter-usage-error": "გამოყენების შეცდომა: $1",
        "aboutsite": "{{SITENAME}}-ის შესახებ",
        "aboutpage": "Project:შესახებ",
        "nospecialpagetext": "<strong>თქვენ არასწორი სპეციალური გვერდი მოითხოვეთ.</strong>\n\nსწორი სპეციალური გვერდების სია შეგიძლიათ იხილოთ აქ: [[Special:SpecialPages|{{int:specialpages}}]].",
        "error": "შეცდომა",
        "databaseerror": "შეცდომა მონაცემთა ბაზაში",
+       "databaseerror-text": "მონაცემთა ბაზაში შეცდომა მოხდა.\nეს შესაძლოა პროგრამული უზრუნველყოფის შეცდომაზე მიუთითებდეს.",
+       "databaseerror-textcl": "მონაცემთა ბაზაში შეცდომა მოხდა.",
        "databaseerror-query": "მოთხოვნა: $1",
        "databaseerror-function": "ფუნქცია: $1",
        "databaseerror-error": "შეცდომა: $1",
        "readonly_lag": "მონაცემთა ბაზა ავტომატურად დაიხურა, სანამ შვილობილი ბაზის სერვერები მთავარ ბაზასთან სინქრონიზაციას ახდენს",
        "internalerror": "შიდა შეცდომა",
        "internalerror_info": "შიდა შეცდომა: $1",
+       "internalerror-fatal-exception": "ფატალური გამონაკლისის ტიპი „$1“",
        "filecopyerror": "„$1“ ფაილის „$2“-ზე კოპირება ვერ მოხერხდა.",
        "filerenameerror": "შეუძლებელია ფაილის „$1“ სათაურის შეცვლა სახელწოდებით „$2“.",
        "filedeleteerror": "ფაილის „$1“ წაშლა ვერ მოხერხდა.",
        "directorycreateerror": "დირექტორიის „$1“ შექმნა შეუძლებელია.",
+       "directoryreadonlyerror": "კატალოგი „$1“ მხოლოდ წასაკითხად არის ხელმისაწვდომი.",
+       "directorynotreadableerror": "კატალოგი „$1“ არ იკითხება.",
        "filenotfound": "ფაილის „$1“ მოძიება ვერ მოხერხდა.",
        "unexpected": "გაუთვალისწინებელი სიდიდე: „$1“=„$2“.",
        "formerror": "შეცდომა: ფორმის გაგზავნა ვერ მოხერხდა.",
        "preview": "წინასწარი გადახედვა",
        "showpreview": "წინასწარი გადახედვა",
        "showdiff": "ცვლილებების ჩვენება",
-       "anoneditwarning": "'''გაფრთხილება:''' თქვენ არ ხართ რეგისტრირებული. თქვენი IP მისამართი ჩაიწერება ამ გვერდის რედაქტირების ისტორიაში.",
+       "anoneditwarning": "<strong>გაფრთხილება:</strong> თქვენ არ ხართ ავტორიზირებული. თქვენი IP მისამართი საჯაროდ ხილული იქნება, თუკი განახორციელებთ რედაქტირებას. თუ თქვენ გაივლით <strong>[$1 ავტორიზაციას]</strong> ან <strong>[$2 შექმნით ანგარიშს]</strong>, სხვა უპირატესობებთან ერთად, თქვენი რედაქტირებები დაუკავშირდება თქვენს მომხმარებლის სახელს.",
        "anonpreviewwarning": "''თქვენ არ შესულხართ სისტემაში. თქვენი IP მისამართი შეინახება გვერდის ისტორიაში. ''",
        "missingsummary": "'''შეხსენება:''' თქვენ არ მიგითითებიათ რედაქტირების რეზიუმე.\nთუ ისევ დააწკაპუნებთ შენახვაზე, თქვენი რედაქტირება რეზიუმეს გარეშე დამახსოვრდება.",
        "missingcommenttext": "გთხოვთ კომენტარი შეიყვანოთ ქვემოთ.",
        "history-feed-empty": "თქვენს მიერ მოძიებული გვერდი არ არსებობს.\nშესაძლოა იგი წაშლილ იქნა ვიკიდან, ან მისი სათაური შეიცვალა.\nსცადეთ [[Special:Search|searching on the wiki]] მსგავსი გვერდების სანახავად.",
        "rev-deleted-comment": "(რეზიუმე წაიშალა)",
        "rev-deleted-user": "(მომხმარებლის სახელი წაიშალა)",
-       "rev-deleted-event": "(á\83\9fá\83£á\83 á\83\9cá\83\90á\83\9aá\83\98á\83¡ á\83©á\83\90á\83\9cá\83\90á\83¬á\83\94á\83 ი წაშლილია)",
+       "rev-deleted-event": "(á\83\9fá\83£á\83 á\83\9cá\83\90á\83\9aá\83\98á\83¡ á\83\93á\83\94á\83¢á\83\90á\83\9aá\83\94á\83\91ი წაშლილია)",
        "rev-deleted-user-contribs": "[მომხმარებლის სახელი ან IP დამალულია. რეაქტირება ასევე დამალულია]",
        "rev-deleted-text-permission": "გვერდის ეს ჩასწორება '''წაიშალა'''.\nგანმარტება შესაძლოა მოცემული იყოს [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} წაშლათა ჟურნალში].",
        "rev-deleted-text-unhide": "გვერდის ეს ვერსია '''წაიშალა'''.\nახსნა-განმარტება მოცემულია [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} წაშლის ჟურნალში].\nსურვილის შემთხვევაში თქვენ შეგიძლიათ [$1 იხილოთ აღნიშნული ვერსია].",
        "revdelete-legend": "შეზღუდვის დაყენება",
        "revdelete-hide-text": "შეცვლილი ტექსტი",
        "revdelete-hide-image": "ფაილის შინაარსის დამალვა",
-       "revdelete-hide-name": "á\83\93á\83\90á\83\9bá\83\90á\83\9aá\83\94á\83\97 á\83\9bá\83\9dá\83¥á\83\9bá\83\94á\83\93á\83\94á\83\91á\83\90 á\83\93á\83\90 á\83\9bá\83\98á\83¡á\83\98 á\83\9dá\83\91á\83\98á\83\94á\83¥á\83¢ი",
+       "revdelete-hide-name": "á\83\93á\83\90á\83\9bá\83\90á\83\9aá\83\94á\83\97 á\83¡á\83\90á\83\9bá\83\98á\83\96á\83\9cá\83\94 á\83\93á\83\90 á\83\9eá\83\90á\83 á\83\90á\83\9bá\83\94á\83¢á\83 á\83\94á\83\91ი",
        "revdelete-hide-comment": "რედაქტირების კომენტარი",
        "revdelete-hide-user": "რედაქტორის მომხმარებლის სახელი/IP-მისამართი",
        "revdelete-hide-restricted": "დამალეთ მონაცემები ადმინისტრატორთაგან",
        "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-interwiki-caption": "დობილი პროექტები",
        "gender-female": "ის (მდედრობითი) არედაქტირებს ვიკი-გვერდებს",
        "prefs-help-gender": "ამ პარამეტრის დაყენება არასავალდებულოა.\nპროგრამული უზრუნველყოფა ამ ინფორმაციას იყენებს მხოლოდ სწორი გრამატიკული სქესით მომართვისათვის.\nეს ინფორმაცია საჯარო იქნება ყველასათვის.",
        "email": "ელ. ფოსტა",
-       "prefs-help-realname": "á\83\9cá\83\90á\83\9bá\83\93á\83\95á\83\98á\83\9aá\83\98 á\83¡á\83\90á\83®á\83\94á\83\9aá\83\98á\83¡ á\83\9bá\83\98á\83\97á\83\98á\83\97á\83\94á\83\91á\83\90 á\83\90á\83£á\83ªá\83\98á\83\9aá\83\94á\83\91á\83\94á\83\9aá\83\98 á\83\90á\83  á\83\90á\83 á\83\98á\83¡, á\83\9bá\83\90á\83\92á\83 á\83\90á\83\9b á\83\97á\83£ á\83\9bá\83\98á\83£á\83\97á\83\98á\83\97á\83\94á\83\91á\83\97 á\83\98á\83¡ á\83\92á\83\90á\83\9bá\83\9dá\83§á\83\94á\83\9cá\83\94á\83\91á\83£á\83\9aá\83\98 á\83\98á\83¥á\83\9cá\83\94á\83\91á\83\90 á\83\97á\83¥á\83\95á\83\94á\83\9cá\83\98 á\83\9cá\83\90á\83\9bá\83£á\83¨á\83\94á\83\95á\83 á\83\98á\83¡ á\83\90á\83¦á\83¡á\83\90á\83\9cá\83\98á\83¨á\83\9cá\83\90á\83\95á\83\90á\83\93.",
+       "prefs-help-realname": "á\83\9cá\83\90á\83\9bá\83\93á\83\95á\83\98á\83\9aá\83\98 á\83¡á\83\90á\83®á\83\94á\83\9aá\83\98á\83¡ á\83\9bá\83\98á\83\97á\83\98á\83\97á\83\94á\83\91á\83\90 á\83\9cá\83\94á\83\91á\83\90á\83§á\83\9dá\83¤á\83\9aá\83\9dá\83\91á\83\98á\83\97á\83\98á\83\90.\ná\83\97á\83£ á\83\97á\83¥á\83\95á\83\94á\83\9c á\83\9bá\83\90á\83¡ á\83\9bá\83\98á\83£á\83\97á\83\98á\83\97á\83\94á\83\91á\83\97 á\83\98á\83¡ á\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\9cá\83\90á\83\9bá\83£á\83¨á\83\94á\83\95á\83 á\83\98á\83¡ á\83\90á\83¦á\83¡á\83\90á\83\9cá\83\98á\83¨á\83\9cá\83\90á\83\95á\83\90á\83\93 á\83\98á\83¥á\83\9cá\83\90á\83¡ á\83\92á\83\90á\83\9bá\83\9dá\83§á\83\94á\83\9cá\83\94á\83\91á\83£á\83\9aá\83\98.",
        "prefs-help-email": "ელ. ფოსტის მისამართი არ არის სავალდებულო, მაგრამ მისი მითითება იძლევა ახალი პაროლის გამოგზავნის საშუალებას თქვენი პაროლის დავიწყების შემთხვევაში.",
        "prefs-help-email-others": "ის აგრეთვე მისცემს საშუალებას სხვა მომხმარებლებს, დაგიკავშირდნენ თქვენს პირად გვერდზე მითითებული ბმულის მეშვეობით. თქვენი ელ. ფოსტის მისამართი არ იქნება გამხელილი, როდესაც სხვა მომხმარებლები დაგიკავშირდებიან.",
        "prefs-help-email-required": "თქვენი ელ-ფოსტის მისამართი აუცილებელია.",
        "recentchanges-label-plusminus": "ცვლილებების ზომა ბაიტებში",
        "recentchanges-legend-heading": "'''ლეგენდა:'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (იხ. აგრეთვე [[Special:NewPages|ახალი გვერდების სია]])",
-       "rcnotefrom": "ქვემოთ მოყვანილია ცვლილებები <strong>$2</strong>-დან (ნაჩვენებია არაუმეტეს <strong>$1</strong>).",
+       "rcnotefrom": "ქვემოთ {{PLURAL:$5|ნაჩვენებია ცვლილება|ნაჩვენებია ცვლილებები}} <strong>$3, $4</strong>-დან (ნაჩვენებია არაუმეტეს <strong>$1</strong>).",
        "rclistfrom": "ახალი ცვლილებების ჩვენება დაწყებული $3 $2-დან",
        "rcshowhideminor": "მცირე რედაქტირების $1",
        "rcshowhideminor-show": "ჩვენება",
        "uploaderror": "ატვირთვის შეცდომა",
        "upload-recreate-warning": "'''ყურადღება. ფაილი ამ სახელით წაიშალა ან გადატანილი იქნა.''\n\nჟურნალი იხილეთ ქვემოთ:",
        "uploadtext": "ამ ფორმის გამოყენებისას თქვენ შეძლებთ სერვერზე ფაილების ატვირთვას.\n\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": "á\83\9bá\83\98á\83¦á\83\94á\83\91á\83£á\83\9aá\83\98 á\83¤á\83\90á\83\98á\83\9aá\83\98á\83¡ á\83¢á\83\98á\83\9eá\83\94á\83\91á\83\98: $1.",
-       "upload-preferred": "á\83¡á\83\90á\83¡á\83£á\83 á\83\95á\83\94á\83\9aá\83\98 á\83¤á\83\90á\83\98á\83\9aá\83\98á\83¡ á\83¢á\83\98á\83\9eá\83\94á\83\91á\83\98: $1.",
-       "upload-prohibited": "á\83\90á\83\99á\83 á\83«á\83\90á\83\9aá\83£á\83\9aá\83\98 á\83¤á\83\90á\83\98á\83\9aá\83\98á\83¡ á\83¢á\83\98á\83\9eá\83\94á\83\91á\83\98: $1.",
+       "upload-permitted": "á\83¤á\83\90á\83\98á\83\9aá\83\98á\83¡ á\83\9cá\83\94á\83\91á\83\90á\83\93á\83\90á\83 á\83\97á\83£á\83\9aá\83\98 {{PLURAL:$2|á\83¢á\83\98á\83\9eá\83\98\83¢á\83\98á\83\9eá\83\98}}: $1.",
+       "upload-preferred": "á\83¤á\83\90á\83\98á\83\9aá\83\98á\83¡ á\83£á\83\9eá\83\98á\83 á\83\90á\83¢á\83\94á\83¡á\83\98 {{PLURAL:$2|á\83¢á\83\98á\83\9eá\83\98\83¢á\83\98á\83\9eá\83\98}}: $1.",
+       "upload-prohibited": "á\83¤á\83\90á\83\98á\83\9aá\83\98á\83¡ á\83\90á\83\99á\83 á\83«á\83\90á\83\9aá\83£á\83\9aá\83\98 {{PLURAL:$2|á\83¢á\83\98á\83\9eá\83\98\83¢á\83\98á\83\9eá\83\98}}: $1.",
        "uploadlogpage": "გადმოტვირთვის რეგისტრაცია",
        "uploadlogpagetext": "ქვემოთ არის ყველაზე ბოლოს ატვირთული ფაილების სია.",
        "filename": "ფაილის სახელი",
        "wlheader-enotif": "ელ.ფოსტით შეტყობინება ჩართულია.",
        "wlheader-showupdated": "თქვენი ბოლო ვიზიტის შემდეგ შეცვლილი გვერდები, აღნიშნულია '''მუქად'''.",
        "wlnote": "ქვემოთ {{PLURAL:$1|ნაჩვენებია ბოლო ცვლილება|ნაჩვენებია ბოლო '''$1''' ცვლილება}} უკანასკნელი {{PLURAL:$2|საათის|'''$2''' საათის}} მანძილზე, $3, $4 მდგომარეობით.",
-       "wlshowlast": "á\83\90á\83©á\83\95á\83\94á\83\9cá\83\94 á\83\91á\83\9dá\83\9aá\83\9d $1 á\83¡á\83\90á\83\90á\83\97á\83\98á\83¡ $2 á\83\93á\83¦á\83\98á\83¡",
+       "wlshowlast": "á\83\91á\83\9dá\83\9aá\83\9d $1 á\83¡á\83\90á\83\90á\83\97á\83\98á\83¡ $2 á\83\93á\83¦á\83\98á\83¡ á\83©á\83\95á\83\94á\83\9cá\83\94á\83\91á\83\90",
        "watchlist-options": "კონტროლის სიის პარამეტრები",
        "watching": "კონტროლებადი...",
        "unwatching": "არაკონტროლირებადი...",
        "unblocked": "[[User:$1|$1]] ბლოკი მოხსნილი აქვს",
        "unblocked-range": "$1 დაბლოკილი აღარ არის",
        "unblocked-id": "ბლოკი $1 მოიხსნა",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] განიბლოკა.",
        "blocklist": "დაბლოკილი მომხმარებლები",
        "ipblocklist": "დაბლოკილი მომხმარებლები",
        "ipblocklist-legend": "დაბლოკილი მომხმარებლის პოვნა",
        "change-blocklink": "ბლოკის შეცვლა",
        "contribslink": "წვლილი",
        "emaillink": "ელ-ფოსტის გაგზავნა",
-       "autoblocker": "á\83\97á\83¥á\83\95á\83\94á\83\9c á\83\90á\83\95á\83¢á\83\9dá\83\9bá\83\90á\83¢á\83£á\83 á\83\90á\83\93 á\83\91á\83\9aá\83\9dá\83\99á\83\98á\83 á\83\94á\83\91á\83£á\83\9aá\83\98 á\83®á\83\90á\83 á\83\97, á\83\95á\83\98á\83\9cá\83\90á\83\98á\83\93á\83\90á\83\9c á\83\97á\83¥á\83\95á\83\94á\83\9cá\83\98 IP á\83\9bá\83\98á\83¡á\83\90á\83\9bá\83\90á\83 á\83\97á\83\98 á\83\90á\83®á\83\9aá\83\90á\83®á\83\90á\83\9c á\83\98á\83¥á\83\9cá\83\90 á\83\92á\83\90á\83\9bá\83\9dá\83§á\83\94á\83\9cá\83\94á\83\91á\83£á\83\9aá\83\98 \"[[User:$1|$1]]\"â\80\93á\83\98á\83¡ á\83\9bá\83\98á\83\94á\83 . $1-á\83\98á\83¡ á\83\91á\83\9aá\83\9dá\83\99á\83\98á\83 á\83\94á\83\91á\83\98á\83¡ á\83\9bá\83\98á\83\96á\83\94á\83\96á\83\98: \"'''$2'''\"",
+       "autoblocker": "á\83\90á\83\95á\83¢á\83\9dá\83\91á\83\9aá\83\9dá\83\99á\83\98á\83 á\83\94á\83\91á\83\90, á\83\95á\83\98á\83\9cá\83\90á\83\98á\83\93á\83\90á\83\9c á\83\97á\83¥á\83\95á\83\94á\83\9cá\83\98 IP á\83\9bá\83\98á\83¡á\83\90á\83\9bá\83\90á\83 á\83\97á\83\98 á\83ªá\83\9dá\83¢á\83\90 á\83®á\83\9cá\83\98á\83¡ á\83¬á\83\98á\83\9c á\83\92á\83\90á\83\9bá\83\9dá\83\98á\83§á\83\94á\83\9cá\83\90 á\83\9bá\83\9dá\83\9bá\83®á\83\9bá\83\90á\83 á\83\94á\83\91á\83\94á\83\9aá\83\9bá\83\90 â\80\9e[[User:$1|$1]]â\80\9c. \n$1-á\83\98á\83¡ á\83\91á\83\9aá\83\9dá\83\99á\83\98á\83 á\83\94á\83\91á\83\98á\83¡ á\83\9bá\83\98á\83\96á\83\94á\83\96á\83\98: \"$2\"",
        "blocklogpage": "დაბლოკილთა აღრიცხვა",
        "blocklog-showlog": "ეს მომხმარებელი ამჟამად დაბლოკილია.\nქვემოთ მოყვანილია ამონაწერი ბოლირებათა ჟურნალი:",
        "blocklog-showsuppresslog": "ეს მომხმარებლი უკვე დამალულია და დაბლოკილია.\nდაბლოკვათა ჟურნალი ქვემოთ მოყვანილია:",
        "thumbnail_gd-library": "ბიბლიოთეკა GD-ს არასწორი კონფიგურაცია: $1 ფუნქცია არ არის აღმოჩენილი",
        "thumbnail_image-missing": "სავარაუდოდ $1 ფაილი არ არსებობს",
        "import": "გვერდების იმპორტი",
-       "importinterwiki": "á\83¢á\83 á\83\90á\83\9cá\83¡á\83\95á\83\98á\83\99á\83\98 იმპორტი",
+       "importinterwiki": "á\83¡á\83®á\83\95á\83\90 á\83\95á\83\98á\83\99á\83\98á\83\93á\83\90á\83\9c იმპორტი",
        "import-interwiki-text": "წარმოადგინეთ ვიკი და იმპორტირებადი გვერდის სახელი.\nცვლილებათა რიცხვები და ავტორთა სახელები შენნარჩუნდება.\nტრანსვიკი იმპორტის ყველა ოპერაცია რეგისტრირდება [[Special:Log/import|სპეციალურ ჟურნალში]].",
+       "import-interwiki-sourcewiki": "წყაროს ვიკი:",
+       "import-interwiki-sourcepage": "წყაროს გვერდი:",
        "import-interwiki-history": "ამ გვერდის ცვლილებათა ისტორიის კოპირება.",
        "import-interwiki-templates": "ყველა თარგის ჩართვა",
        "import-interwiki-submit": "იმპორტირება",
-       "import-interwiki-namespace": "სამიზნე სახელთა სივრცე",
-       "import-interwiki-rootpage": "ძირეული გვერდი (არასავალდებულო):",
        "import-upload-filename": "ფაილის სახელი:",
        "import-comment": "კომენტარი:",
        "importtext": "გთხოვთ, მოახდინოთ გვერდის ექსპორტი თავდაპირველი ვიკიდან, [[Special:Export|შესაბამისი ხელსაწყოს]] გამოყენებით. ფაილი შეინახეთ დისკზე, ხოლო შემდეგ ატვირთეთ აქ.",
        "import-rootpage-nosubpage": "სახელტა სივრცეში მითითებულ ძირეულ გვერდში „$1“ ქვეგვერდები დაუშვებელია.",
        "importlogpage": "იმპორტის ჟურნალი",
        "importlogpagetext": "ადმინისტრატორთა მიერ გვერდების იმპორტირება  ცვლილებების ჩათვლით სხვა ვიკიდან.",
-       "import-logentry-upload-detail": "$1 ცვლილება",
-       "import-logentry-interwiki-detail": "$1 ცვლილება $2-დან",
+       "import-logentry-upload-detail": "$1 {{PLURAL:$1|ვერსია|ვერსია}} იმპორტირებულია",
+       "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|ვერსია|ვერსია}} იმპორტირებულია $2-დან",
        "javascripttest": "JavaScript-ის ტესტირება",
        "javascripttest-pagetext-noframework": "ეს გვერდი დარეგისტრირებულია JavaScript-ის ტესტების გასაშვებად.",
        "javascripttest-pagetext-unknownframework": "„$1-ის“ ტესტირების უცნობი გარემო.",
        "tooltip-pt-mycontris": "თქვენი წვლილის სია",
        "tooltip-pt-login": "სასურველია დარეგისტრირდეთ, თუმცა აუცილებელია არაა.",
        "tooltip-pt-logout": "გასვლა",
+       "tooltip-pt-createaccount": "ჩვენ გთავაზობთ, შექმნათ ანგარიში და შეხვიდეთ სისტემაში; თუმცა ეს არ არის აუცილებელი",
        "tooltip-ca-talk": "შიგთავსის გვერდის განხილვა",
        "tooltip-ca-edit": "თქვენ შეგიძლიათ ამ გვერდის რედაქტირება. გთხოვთ გამოიყენოთ  წინასწარი ხედვის ღილაკი სანამ გვერდს შეინახავთ.",
        "tooltip-ca-addsection": "ახალი სექციის შექმნა",
        "autosumm-replace": "შინაარსი შეიცვალა „$1“-ით",
        "autoredircomment": "გადამისამართება [[$1]]-ზე",
        "autosumm-new": "ახალი გვერდი: $1",
+       "autosumm-newblank": "ცარიელი გვერდი შეიქმნა",
        "size-bytes": "$1 ბ",
        "size-kilobytes": "$1 კბ",
        "size-megabytes": "$1 მბ",
        "duplicate-defaultsort": "'''ყურადღება.'''სორტირების გასაღებს «$2»-ს გააჭრის წინა გასაღებს «$1»-ს.",
        "version": "ვერსია",
        "version-extensions": "დაყენებული გაფართოებები",
-       "version-skins": "á\83\98á\83\94á\83 á\83¡á\83\90á\83®á\83\94",
+       "version-skins": "á\83\93á\83\90á\83§á\83\94á\83\9cá\83\94á\83\91á\83£á\83\9aá\83\98 á\83\97á\83\94á\83\9bá\83\94á\83\91á\83\98",
        "version-specialpages": "სპეციალური გვერდები",
        "version-parserhooks": "სინტაქსური ანალიზატორის ჰუკები",
        "version-variables": "ცვალებადი",
        "tags": "ცვლილებათა მოქმედი მონიშვნები",
        "tag-filter": "[[Special:Tags|მონიშვნათა]] ფილტრი",
        "tag-filter-submit": "გაფილტვრა",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|იარლიყი|იარლიყები}}]]: $2)",
        "tags-title": "მონიშვნები",
        "tags-intro": "ამ გვერდზე წარმოდგენილია მონიშვნათა სია, რომლითაც პროგრამული უზრუნველყოფა მონიშნავს შესწორებებს, ასევე ამ მონიშვნათა მნიშვნელობა.",
        "tags-tag": "ტეგის სახელი",
        "tags-deactivate-title": "ტეგის დეაქტივაცია",
        "tags-deactivate-reason": "მიზეზი:",
        "tags-deactivate-submit": "დეაქტივაცია",
+       "tags-edit-reason": "მიზეზი:",
        "comparepages": "გვერდების შედარება",
        "compare-page1": "1 გვერდი",
        "compare-page2": "2 გვერდი",
        "compare-revision-not-exists": "თქვენ მიერ მითითებული ვერსია არ არსებობს.",
        "dberr-problems": "ბოდიში! საიტზე დროებითი ტექნიკური პრობლემებია",
        "dberr-again": "ეცადეთ რამდენიმე წუთით დაცდა და ამ გვერდის გადატვირთვა",
-       "dberr-info": "ვერ მოხერხდა ინფორმაციის $1 სერვერთან დაკავშირება",
-       "dberr-info-hidden": "(á\83\9bá\83\9dá\83\9cá\83\90á\83ªá\83\94á\83\9bá\83\97á\83\90 á\83\91á\83\90á\83\96á\83\98á\83¡ á\83¡á\83\94á\83 á\83\95á\83\94á\83 á\83\97á\83\90á\83\9c á\83\93á\83\90á\83\99á\83\90á\83\95á\83¨á\83\98á\83 á\83\94á\83\91á\83\90 á\83¨á\83\94á\83£á\83«á\83\9aá\83\94á\83\91á\83\94á\83\9aá\83\98á\83\90)",
+       "dberr-info": "(მონაცემთა ბაზებთან კავშირი არ არის: $1)",
+       "dberr-info-hidden": "(á\83\9bá\83\9dá\83\9cá\83\90á\83ªá\83\94á\83\9bá\83\97á\83\90 á\83\91á\83\90á\83\96á\83\94á\83\91á\83\97á\83\90á\83\9c á\83\99á\83\90á\83\95á\83¨á\83\98á\83 á\83\98 á\83\90á\83  á\83\90á\83 á\83\98á\83¡)",
        "dberr-usegoogle": "ამ დროს კი  შეგიძლიათ Google-ით ძიება",
        "dberr-outofdate": "გაითვალისწინეთ, რომ თქვენი კონტენტის ინდექსები შეიძლება შეუსაბამო იყოს",
        "dberr-cachederror": "ეს არის მოთხოვნილი გვერდის კეშირებული ვერსია, და შესაძლება მოძველდა.",
        "revdelete-uname-unhid": "მომხმარებლის სახელი გახსნილია",
        "revdelete-restricted": "შეზღუდვა ადმინისტრატორთათვის",
        "revdelete-unrestricted": "ადმინისტრატორთათვის შეზღუდვები მოხსნილია",
+       "logentry-block-block": "მომხმარებელმა $1 {{GENDER:$2|დაბლოკა}} {{GENDER:$4|$3}} ბლოკირების ვადაა $5 $6",
+       "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-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“ გადამისამართებაზე",
        "rightsnone": "(არცერთი)",
        "revdelete-summary": "ცვლილებების აღწერა",
        "feedback-adding": "თქვენი შეფასების შენახვა...",
+       "feedback-back": "უკან",
        "feedback-bugcheck": "კარგია! გთხოვთ, კიდევ ერთხელ შეამოწმეთ, ხომ არ არის აქ რომელიმე უკვე [$1 ნაცნობი შეცდომა].",
        "feedback-bugnew": "მე შევამოწმე. ახალი შეცდომის შეტყობინება",
        "feedback-bugornote": "თუ თქვენ მზად ხართ დეტალურად აღწეროთ ტექნიკური პრობლემა, გთხოვთ, [$1 შეგვატყობინეთ შეცდომის შესახებ].\nწინააღმდეგ შემთხვევაში თქვენ შეგიძლიათ ისარგებლოთ ამ მარტივი ფორმით. თქვენი კომენტარი დაემატება  „[$3 $2]“ გვერდზე თქვენი მომხმარებლის სახელთან და გამოყენებულ ბრაუზერთან ერთად.",
        "feedback-cancel": "გაუქმება",
        "feedback-close": "გაკეთდა",
+       "feedback-error-title": "შეცდომა",
        "feedback-error1": "შეცდომა. API-ს მოულოდნელი რეზულტატი.",
        "feedback-error2": "შეცდომა: რედაქტირება ვერ განხორციელდა",
        "feedback-error3": "შეცდომა. არ არის API-ს პასუხი .",
        "feedback-subject": "თემა:",
        "feedback-submit": "მიღება",
        "feedback-thanks": "გმადლობთ! თქვენი შეფასება განთავსებულია „[$2 $1]“ გვერდზე.",
+       "feedback-thanks-title": "გმადლობთ!",
        "searchsuggest-search": "ძიება",
        "searchsuggest-containing": "შეიცავს...",
        "api-error-badaccess-groups": "თქვენ არ გაქვთ ამ ვიკიში ფაილების ატვირთვის უფლება.",
        "log-description-pagelang": "ეს არის გვერდის ენის ცვლილებების ჟურნალი",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (ჩართულია)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''გამორთულია''')",
+       "mediastatistics-nbytes": "{{PLURAL:$1|$1 ბაიტი|$1 ბაიტი}} ($2; $3%)",
+       "mediastatistics-table-mimetype": "MIME-ტიპი",
+       "mediastatistics-table-extensions": "შესაძლო გაფართოებები",
+       "mediastatistics-table-count": "ფაილების რაოდენობა",
+       "mediastatistics-header-unknown": "უცნობი",
+       "mediastatistics-header-audio": "აუდიო",
+       "mediastatistics-header-video": "ვიდეოები",
+       "mediastatistics-header-office": "ოფისი",
+       "mediastatistics-header-text": "ტექსტური",
+       "json-error-syntax": "სინტაქსის შეცდომა",
        "headline-anchor-title": "ბმული ამ სექციაზე",
        "special-characters-group-latin": "ლათინური",
        "special-characters-group-latinextended": "ლათინური გაფართოება",
index c92e9e1..bc86057 100644 (file)
        "import-interwiki-history": "Xdem alsaru n akk tisiwal umezruy n usebter-agi",
        "import-interwiki-templates": "Sekcem akkw talɣiwin",
        "import-interwiki-submit": "Ssekcem",
-       "import-interwiki-namespace": "Azen isebtar ar isem n taɣult:",
-       "import-interwiki-rootpage": "Asebtar azaṛ n userken (axetṛan) :",
        "import-upload-filename": "Isem n ufaylu :",
        "import-comment": "Awennit :",
        "importtext": "Ilaq ad ssifeḍeḍ afaylu seg wiki aneṣli s useqdac n  [[Special:Export|ufecku ines n ussifeḍ]].",
        "import-rootpage-nosubpage": "Tallunt n isemawen « $1 » n usebtar aẓar ur yeqbel ara adu-isebtar.",
        "importlogpage": "Aɣmis n usekcam",
        "importlogpagetext": "Adeblan n usekcam n isebtar i yesɛan amezruy ubeddel seg wiki tiyaḍ.",
-       "import-logentry-upload": "Yessekcem [[$1]] s usekcam n ufaylu",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|lqem|ileqman}}",
-       "import-logentry-interwiki": "$1 s transwiki",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|lqem|ileqman}} seg $2",
        "javascripttest": "Tarmit n JavaScript",
        "javascripttest-pagetext-noframework": "Asebtar agi yeḥeṛṛ i usselkem n tirmitin JavaScript.",
index 5f9aa77..e06f053 100644 (file)
@@ -19,6 +19,7 @@
        "tog-watchdefault": "مہ ترمیم کاردو صفحاتن مہ  زیرِنظرفہرستہ شامل کورے",
        "tog-watchmoves": "آوا کیہ صفحاتن کہ منتقل کومان ھتیتان مہ زیرِنظرفہرستہ شامل کورے",
        "tog-watchdeletion": "آوا کیہ صفحاتن کہ حذف آریتام، ھتیتان مہ زیرِنظرفہرستہ شامل کورے",
+       "tog-watchrollback": "آوا کیہ صفحاتن کہ Undoآریتام ھتیتان مہ زیر نظر فہرستہ شامل کورے",
        "tog-minordefault": "تھمامو ترمیماتن ہمیشہ بطورِ معمولی ترمیم نشانزد کورے",
        "tog-previewontop": "تدوینی خاناری پروشٹی نمائش پشاؤے",
        "tog-previewonfirst": "آویلو ترمیما نمائش پشاؤے",
@@ -29,7 +30,7 @@
        "tog-shownumberswatching": "لوڑاک ممبرانن تعدادان پشاؤے",
        "tog-oldsig": "موجودہ دستخطو نمائش:",
        "tog-fancysig": "(سادہ دسخط بلا خودکار ربط)",
-       "tog-uselivepreview": "براہِ راست نمائش استعمال کورے (JavaScript ضرورت بوی)",
+       "tog-uselivepreview": "براہ راست نمائش (آزمائشی) استعمال کورے",
        "tog-forceeditsummary": "کیاوتکی آوا ترمیمی خلاصو خالی پیڅھیتام تھے متے لو دیت",
        "tog-watchlisthideown": "زیرِنظرفہرستہ مہ ترمیماتن کھوشاوے",
        "tog-watchlisthidebots": "زیرِنظرفہرستہ مہ روبالی ترمیماتن کھوشتاوے",
        "oct": "اکتوبر",
        "nov": "نومبر",
        "dec": "دسمبر",
+       "january-date": "$1 جنوری",
+       "february-date": "$1 فروری",
+       "march-date": "$1 مارچ",
+       "april-date": "$1 اپریل",
+       "may-date": "$1 مئی",
+       "june-date": "$1 جون",
+       "july-date": "$1 جولائی",
+       "august-date": "$1 اگست",
+       "september-date": "ستمبر",
+       "october-date": "$1 اکتوبر",
+       "november-date": "$1 نومبر",
+       "december-date": "$1 دسمبر",
        "pagecategories": "{{PLURAL:$1|زمرہ|زمرہ جات}}",
        "category_header": "زمرہ \"$1\" مضمون'",
        "subcategories": "ذیلی ذمرہ جات",
        "newwindow": "نوغ کھیڑکیا",
        "cancel": "کھینسل",
        "moredotdotdot": "وا...",
+       "morenotlisted": "ھیہ فہرست مکمل نو۔",
        "mypage": "مہ صفحہ",
        "mytalk": "مہ مشقولگی",
        "anontalk": "بچے لو IP ھیہ",
        "view": "لوڑے",
        "view-foreign": "$1 لوڑے",
        "edit": "ترمیم",
+       "edit-local": "ترمیم مقامی وضاحت",
        "create": "ساوزاوے",
-       "create-local": "ادخال مقامی وضاحت",
+       "create-local": "مقامی وضاحتو داخل کورے",
        "editthispage": "ھی صفحہا ترمیم کورے",
        "create-this-page": "ھیہ صفحو ساوزاوے",
        "delete": "بوغاوے",
        "deletethispage": "ھیہ صفحہو بوغاوے",
+       "undeletethispage": "ھیہ صفحو بحال کورے",
        "undelete_short": "بحال {{PLURAL:$1|ای ترمیم|$1 ترامیم}}",
+       "viewdeleted_short": "{{PLURAL:$1|ای ترمیم حذف ہوئے|$1 ترامیم حذف ہونی}}",
        "protect": "محفوظ",
        "protect_change": "تبدیل کورے",
        "protectthispage": "ھیہ صفحو محفوظ کورے",
        "categorypage": "زمرہ‌جاتی صفحہو لوڑے",
        "viewtalkpage": "تبادلۂ خیالو صفحہو لوڑے",
        "otherlanguages": "خور زبانا",
-       "redirectedfrom": "'($1 خور ژاغار گنونو ھوی)',",
+       "redirectedfrom": "'($1 خور ژاغار گنونو ھوئے)',",
        "redirectpagesub": "ھیہ صفحو خور ژاغا آلونو بیتی شیر",
        "redirectto": "ری ڈائرکٹ کاردو صفحہ:",
-       "lastmodifiedat": "آخرÛ\8c Ø¨Ø§Ø± ØªØ¯Ù\88Û\8cÙ\86 $2, $1 Ú©Ù\88رÙ\88Ù\86Ù\88 Ú¾Ù\88Û\8c",
+       "lastmodifiedat": "آخرÛ\8c Ø¨Ø§Ø± Ø§Û\8cÚ\88Ù¹ $2, $1 Ú©Ù\88رÙ\88Ù\86Ù\88 Ú¾Ù\88ئÛ\92",
        "viewcount": "ھیہ صفحہ گیونو ھوی {{PLURAL:$1|ای‌بار|$1 مرتبہ}}",
        "protectedpage": "محفوظ شدہ صفحہ",
        "jumpto": "ھیہ ووݰکی څروٹھاوے",
        "jumptonavigation": "رہنمائی",
        "jumptosearch": "تلاش",
        "view-pool-error": "معذرت: تمام سرورا موجودہ وختہ اِضافی بوجھ شیر.\nبو زیادہ صارفین موجودہ وختہ ھیہ صفحو لاڑینیان \nبرائے مہربانی! صفحو لوڑیکو بچے دوبارہ کوشش کوریکاری پروشٹی پھوکرو انتظار کورے.\n\n$1",
+       "generic-pool-error": "معذرت: تمام سرورا موجودہ وختہ اِضافی بوجھ شیر.\nبو زیادہ صارفین موجودہ وختہ ھیہ صفحو لاڑینیان \nبرائے مہربانی! صفحو لوڑیکو بچے دوبارہ کوشش کوریکاری پروشٹی پھوکرو انتظار کورے.\n\n$1",
        "pool-errorunknown": "نامعلوم خطا",
        "aboutsite": "تعارف {{SITENAME}}",
        "aboutpage": "Project:کھوار ویکیپیڈیو تعارف",
        "hidetoc": "کھوشتاوے",
        "collapsible-collapse": "خاتمہ/Collapse",
        "collapsible-expand": "فراخ کورے",
+       "confirmable-yes": "Yes/دی",
+       "confirmable-no": "نو",
        "thisisdeleted": "لوڑے  یا بحال کورے $1",
        "viewdeleted": "لوڑے $1؟",
        "restorelink": "{{PLURAL:$1|ای ترمیم حذف ہوی|$1 ترامیم حذف ہونی}}",
+       "feedlinks": "فیڈ",
+       "feed-invalid": "ناقص فیڈو قسم.",
+       "feed-unavailable": "سندیکٹی فیڈ دستیاب نیکی",
        "site-rss-feed": "$1 آر.ایس.ایس فیڈ",
        "site-atom-feed": "$1 اٹوم فیڈ",
        "page-rss-feed": "$1 آر ایس ایس فیڈ",
        "feed-atom": "اٹوم",
        "feed-rss": "آر ایس ایس",
        "red-link-title": "\n$1 (صفحہ موجود نیکی)",
+       "sort-descending": "ترتیب نزولی",
        "nstab-main": "صفحہ",
        "nstab-user": "یوزرو صفحہ",
        "nstab-media": "صفحۂ میڈیا",
        "badarticleerror": "ھیہ صفحہا ھیہ عمل انجام دیونو نو ھوی۔",
        "cannotdelete": "صفحہو $1 ڈیلیٹ کورونو نو ھوی۔ (ھیہ منکھن شیر کہ ھمو پروشٹی تان کا ڈیلیٹ کوری آسور۔)",
        "badtitle": "خراب عنوان",
-       "badtitletext": "'درخاس شدہ صفحہو عنوان ناقص، خالی، یا کیہ غلط ربط شدہ بین لسانی یا بین ویکی عنوان شیر.\nشاید ھیارا ای یا زیات ھش حروف موجود شینی کہ ھیت عنوانا استعمال نو بونیان.',",
+       "badtitletext": "'درخاس شدہ صفحہو عنوان ناقص، خالی، یا کیہ غلط ربط شدہ بین لسانی یا بین ویکی عنوان شیر.\nشاید ھیارا ای یا زیات ھݰ حروف موجود شینی کہ ھیت عنوانا استعمال نو بونیان.',",
        "perfcached": "ذیلی ڈیٹا ابطن شدہ شیر وا ھمو بیکا امکان شیر A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.",
        "perfcachedts": "ذیلی ڈیٹا ابطن شدہ شیر وا آخری بار ھمو بتاریخیت $1 کورونو ہوئے. A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.",
        "querypage-no-updates": "ھیہ صفحہو بچے بتاریخات فی الحال ناقابل ساوزینو بیتی شینی. \nھمو ڈیٹا ھنیسے تازہ کورونو نو بوئے",
        "wrongpasswordempty": "کلمۂ شناخت ندارد۔ دوبارہ کوشش کورے",
        "passwordtooshort": "تہ منتخب کردہ پارلوظ(پاسورڈ) مختصار شیر. پارلوظ کم از کم {{PLURAL:$1|1 حرف|$1 حروف}} بیلک.",
        "password-name-match": "تہ پارلوظ(پاسورڈ) تہ اسمِ صارفو ساری مختلف بیلک.",
-       "mailmypassword": "Ù\86Ù\88غ Ù¾Ø§Ø³Ù\88رÚ\88 Ø¨Ø´Ù\84Û\8c Ú©ØºØ§Ø²Ù\88 Ø²Ø±Û\8cعا Ø§Ù\86Ú\81اÙ\88ے",
+       "mailmypassword": "پاسÙ\88رÚ\88Ù\88 Ø±Û\8c Ø³Û\8cÙ¹ Ú©Ù\88رے",
        "passwordremindertitle": "نوغ عارضی کلمۂ شناخت برائے {{SITENAME}}",
        "passwordremindertext": "(IP پتاری $1) کا (یا البت تو) {{SITENAME}} ($4) \nبچے نوغ کلمۂ شناختو بچے درخاس آریر. ای عارضی کلمۂ شناخت \"$3\" \nبرائے ممبار(صارف) \"$2\" تخلیق کورونو بیتی شیر. اگر ھیہ تہ ارادہ کہ اوشوی تھے تو داخلِ نوشتہ بیکار آچی نوغ کلمۂ شناختو انتخابو کورے.\nتہ کلمۂ شناخت {{PLURAL:$5|ای بس|$5 بسار}} آچی ناکارہ بوی.\n\nاگر خور کا ھیہ درخاسو کوری آسور، یا تتے تہ پرانو کلمۂ شناخت یادی گیتی شیر،\nوا تو ھو تبدیل کوریک نو مشکیسان ،تھے تو ھیہ پیغامو نظر انداز کوریکو بوس وا تان پرانو کلمۂ شناختو استعمالو جاری لاکھیکو بوس.',",
        "noemail": "ممبارو \"$1\" بچے کیہ بشلی کغازو  پتہ درج کورونو نو بیتی شیر",
        "noemailcreate": "صحیح برقی پتہ مہیّا کورے",
        "passwordsent": "ای نوغ کلمۂ شناخت \"$1\" نامو سورا ساوز بیرو  بشلی کغازو پتہوتے انزینو بیتی شیر۔ \nکیاوتکہ ھسے توریتای تھے مہربانی کوری ھو ذریعا دوبارہ داخل بوس۔",
        "blocked-mailpassword": "تہ  آئی.پی پتہو تدوین کوریکار  روکاو کورونو بیتی شیر، تھے، ناجائز استعمالو روکاو کوریکو بچے ، تہ آئی.پی پتہو کلمۂ شناختو بحالیو فعل استعمال کوریکو اِجازت نیکی",
-       "eauthentsent": "اÛ\8c ØªØµØ¯Û\8cÙ\82Û\8c Ø¨Ø±Ù\82Û\8c Ø®Ø· نامزد کورونو بیرو برقی پتا کوری انځینو بیتی شیر.\nتہ سوم توریرو برقی خطہ دیرو ہدایاتن سورا عمل کوری تو ھیہ لوو توثیق/تصدیقو کورے کہ مذکورہ برقی پتہ تہ زاتی پتہ شیر.",
-       "throttled-mailpassword": "گزشتÛ\81 {{PLURAL:$1|Ú¯Ú¾Ù\86Ù¹Û\81|$1 Ú¯Ú¾Ù\86Ù¹Û\81}}اÙ\86 Ø§Ù\86درÛ\8cÙ\86Û\8c Ù¾Ø±Ù\88شٹÛ\8cار Û\8cرÛ\8c ØªØ§Ù\86 Ù¾Ø§Ø±Ù\84Ù\88ظÙ\88(پاسÙ\88رÚ\88Ù\88)اÛ\8c Û\8cادآÙ\88رÛ\8c Ø§Ù\86Ú\81Û\8cÙ\86Ù\88 Ø¨Û\8cتÛ\8c Ø´Û\8cر.\nÙ\86اجائز Ø§Ø³ØªØ¹Ù\85اÙ\84Ù\88 Ø³Ø¯Ù\91بابÙ\88 Ø¨Ú\86Û\92Ø\8c {{PLURAL:$1|Ú¯Ú¾Ù\86Ù¹Û\81|$1 Ú¯Ú¾Ù\86Ù¹Û\81}}اÙ\86 Ø¯Ù\88راÙ\86Û\8c ØµØ±Ù\81 Ø§Û\8c Ù¾Ø§Ø±Ù\84Ù\81ظÛ\8c Û\8cادآÙ\88ارÛ\8c Ø§Ù\86Ú\81Û\8cÙ\86Ù\88 Ø¨Ù\88Û\8c",
+       "eauthentsent": "اÛ\8c ØªØµØ¯Û\8cÙ\82Û\8c Ø¨Ø´Ù\84Û\8c Ú©ØºØ§Ø² نامزد کورونو بیرو برقی پتا کوری انځینو بیتی شیر.\nتہ سوم توریرو برقی خطہ دیرو ہدایاتن سورا عمل کوری تو ھیہ لوو توثیق/تصدیقو کورے کہ مذکورہ برقی پتہ تہ زاتی پتہ شیر.",
+       "throttled-mailpassword": "گزشتÛ\81 {{PLURAL:$1|Ú¯Ú¾Ù\86Ù¹Û\81|$1 Ú¯Ú¾Ù\86Ù¹Û\81}}اÙ\86 Ø§Ù\86درÛ\8cÙ\86Û\8c Ù¾Ø±Ù\88شٹÛ\8cار Û\8cرÛ\8c ØªØ§Ù\86 Ù¾Ø§Ø³Ù\88رÚ\88Ù\88اÛ\8c Û\8cادآÙ\88رÛ\8c Ø§Ù\86Ú\81Û\8cÙ\86Ù\88 Ø¨Û\8cتÛ\8c Ø´Û\8cر.\nÙ\86اجائز Ø§Ø³ØªØ¹Ù\85اÙ\84Ù\88 Ø³Ø¯Ù\91بابÙ\88 Ø¨Ú\86Û\92Ø\8c {{PLURAL:$1|Ú¯Ú¾Ù\86Ù¹Û\81|$1 Ú¯Ú¾Ù\86Ù¹Û\81}}اÙ\86 Ø¯Ù\88راÙ\86Û\8c ØµØ±Ù\81 Ø§Û\8c Ù¾Ø§Ø±Ù\84Ù\81ظÛ\8c Û\8cادآÙ\88ارÛ\8c Ø§Ù\86Ú\81Û\8cÙ\86Ù\88 Ø¨Ù\88ئÛ\92",
        "mailerror": "کغاز انزیکو دورانی مسلہ:$1",
        "acct_creation_throttle_hit": "تہ آئی.پی پتو ذریعا ھیہ ویکیا گیاک صارفین شوخڅیرو ای بسہ{{PLURAL:$1|1 کھاتہ ساوزے آسور|$1 کھاتے ساوزے آسونی}}، وا ھیس مذکورہ وختہ کافی شیر.\nلہٰذا، تہ آئی.پی پتو استعمال کوراک صارفین موجودہ وختہ مزید کھاتہ ساوزیکو نو بونی.",
-       "emailauthenticated": "تہ بشلی کغازو پتو تصدیق تاریخ $2 بوقت $3 بجا کورونو ھوی۔",
-       "emailnotauthenticated": "تہ برقی پتو ھنیسے  تصدیق نو بیتی شیر.\nدرج ذیل وجھو سورا کیہ دی اشناریو بچے تہ برقی پتہ کوری برقی ڈاک ارسال کورونو نو بوی.",
+       "emailauthenticated": "تہ بشلی کغازو پتو تصدیق تاریخ $2 بوقت $3 بجا کورونو ھوئے۔",
+       "emailnotauthenticated": "تہ برقی پتو ھنیسے  تصدیق نو بیتی شیر.\nدرج ذیل وجھو سورا کیہ دی اشناریو بچے تہ برقی پتہ کوری برقی ڈاک ارسال کورونو نو بوئے.",
        "noemailprefs": "ھمی خصائص یعنی فیچران کورما انگیکو بچے تان ترجیحاتہ برقی ڈاکو پتو متعین کورے.",
        "emailconfirmlink": "تان برقی پتو تصدیقو کورے",
+       "invalidemailaddress": "تہ بشلی کغاز(ای میل) قبول کورونو نو بویان کوریکو کہ ھیہ غلط شکلا شیر.\nبراہِ کرم! ای برقی پتہ(ای میل ایڈرس) صحیح شکلا درج کورے یا ژاغو خالی پیڅھے.",
        "accountcreated": "تخلیقِ کھاتہ",
        "accountcreatedtext": "تخیلقِ کھاتۂ ممبار براۓ $1۔",
        "createaccount-title": "کھاتہ سازی برائے {{SITENAME}}",
        "pt-login-button": "داخل بوس",
        "pt-createaccount": "کھاتہ ساوزاوے",
        "pt-userlogout": "لاگ آوٹ",
-       "resetpass_announce": "تو ای برقی ارسال کردہ عارضی کوڈ ورڈو سوم جستہ داخل بیتی آسوس.\nداخلِ نوشتہ بیکو عملو مکمل کوریکو بچے تہ ھیارا نوغ پاسورڈ متعین کوریلک بوی:",
+       "resetpass_announce": "تو ای برقی ارسال کردہ عارضی کوڈ ورڈو سوم جستہ داخل بیتی آسوس.\nداخلِ نوشتہ بیکو عملو مکمل کوریکو بچے تہ ھیارا نوغ پاسورڈ متعین کوریلک بوئے جما:",
        "resetpass_header": "کھاتو پاسورڈو تبدیل کورے",
        "oldpassword": "پرانو کلمۂ شناخت:",
        "newpassword": "نوغ کلمۂ شناخت",
        "resetpass-temp-password": "عارضی پاسورڈ:",
        "passwordreset": "پاسورڈو ری سیٹ کورے",
        "passwordreset-username": "ممبارو نم",
+       "passwordreset-domain": "ڈومین:",
        "changeemail-none": "(نو)",
        "bold_sample": "بوسک متن",
        "bold_tip": "بولڈ ٹیکسٹ",
        "headline_tip": "شہ سرخی درجہ دوم",
        "nowiki_sample": "غیرشکلبندشدہ متنو ھیارا درج کورور",
        "nowiki_tip": "ویکی شکلبندیو نظرانداز کورے",
-       "image_tip": "پیوستہ مسل",
+       "image_tip": "ݯوکیرو فائل",
        "media_tip": "مسلو لنک",
        "sig_tip": "تہ دستخط بمع مہرِ وخت",
        "hr_tip": "تھروسکی لکیر (زیادہ استعمال مو کورے)",
        "loginreqpagetext": "خور صفحاتن لوڑیکو بچے تہ $1 ضروری شیر.",
        "accmailtitle": "کلمہ شناخت(پاسورڈ) انځینو ھوی",
        "newarticle": "(نوغ)",
-       "newarticletext": "↓تو ای ھس صفحو ربطو پیرویو کوری اسوس کہ ھسے ھنیسے موجود نیکی.\nھیہ صفحہو تخلیق کوریکو بچے درج ذیل خانا متنو درج کورے (مزید معلوماتو بچے [$1 صفحۂ معاونت] ملاحظہ کورے).\nاگر تو ھیا غلطیو سورا کہ گیتی اسوس تھے اچھو صفحا آچی بیکو بچے تان کمپیوٹرا '''back''' بٹنو ٹک کورے.",
+       "newarticletext": "↓تو ای ھݰ صفحو ربطو پیرویو کوری اسوس کہ ھسے ھنیسے موجود نیکی.\nھیہ صفحہو تخلیق کوریکو بچے درج ذیل خانا متنو درج کورے (مزید معلوماتو بچے [$1 صفحۂ معاونت] ملاحظہ کورے).\nاگر تو ھیا غلطیو سورا کہ گیتی اسوس تھے اچھو صفحا آچی بیکو بچے تان کمپیوٹرا '''back''' بٹنو ٹک کورے.",
        "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یا [{{fullurl:{{FULLPAGENAME}}|action=edit}} تو ھیہ صفحہا ترمیم کوریکو بوس]</span>",
        "updated": "(اپ ڈیٹڈ)",
        "yourtext": "تہ تحریر",
        "storedversion": "ذخیرہ شدہ نظرثانی",
        "yourdiff": "تضادات",
-       "templatesused": "ھیہ صفحا استعمال باک  {{PLURAL:$1|سانچہ|سانچے}}:",
+       "templatesused": "ھیہ صفحہا استعمال باک {{PLURAL:$1|سانچہ|سانچا}}:",
        "templatesusedpreview": " ھیہ پیش منظرا مستعمل {{PLURAL:$1|سانچہ|سانچے}}:",
        "template-protected": "(محفوظ شدہ)",
        "template-semiprotected": "(نیم محفوظ)",
        "viewpagelogs": "ھیہ صفحہو بچے نوشتہ جاتن لوڑے",
        "currentrev-asof": "حالیہ نظرثانی بمطابق $1",
        "revisionasof": "تـجدید بـمطابق $1",
-       "revision-info": "$2 $1 ھموش نیویشیتای",
+       "revision-info": "$2 $1 ھموݰ نیویشیتائے",
        "previousrevision": "←پرانو تدوین",
        "nextrevision": "→پروشٹیو اعادہ",
        "currentrevisionlink": "حالیہ نظرثانی",
        "history-show-deleted": "صرفی حذف شدہ",
        "histfirst": "قدیم ترین",
        "histlast": "تازہ ترین",
+       "historysize": "({{PLURAL:$1|1 بائٹ|$1 بائٹس}})",
        "historyempty": "(خالی)",
+       "history-feed-title": "تاریخچۂ نظرثانی",
+       "history-feed-description": "ویکیپیڈیا ھیہ صفحو تاریخچۂ نظرثانی",
        "history-feed-item-nocomment": "$1 تا $2",
        "rev-delundel": "پشاوے/کھوشتاوے",
        "rev-showdeleted": "پشاوے",
-       "revdelete-radio-set": "Yes/دی",
-       "revdelete-radio-unset": "نو",
+       "revdelete-radio-set": "کھوشت",
+       "revdelete-radio-unset": "ظاہر",
        "revdel-restore": "ظاہریتو تبدیل کورے",
        "mergehistory-revisionrow": "$1 ($2) $3 . . $4 $5 $6",
        "revertmerge": "غیر ضم",
        "search-result-category-size": "{{PLURAL:$1|1 رُکن|$1 اراکین}} ({{PLURAL:$2|1 ذیلی زمرہ|$2 ذیلی زمرہ جات}}, {{PLURAL:$3|1 ملف|$3 ملفات}})",
        "search-redirect": "(رجوع مکرر $1)",
        "search-section": "(حصہ $1)",
-       "search-suggest": "تہ مطلب ھیہ تھے نو اوشوی: $1",
+       "search-suggest": "تہ مطلب ھیہ تھے نو اوشوئے؟: $1",
        "search-interwiki-caption": "ملگیری منصوبہ",
        "search-interwiki-default": "$1 نتائج:",
        "search-interwiki-more": "(مزید)",
+       "search-relatedarticle": "متعلقہ",
        "searchrelated": "متعلقہ",
        "searchall": "کھل",
        "search-showingresults": "{{PLURAL:$4|Result <strong>$1</strong> of <strong>$3</strong>|Results <strong>$1 - $2</strong> of <strong>$3</strong>}}",
        "search-nonefound": "استفسارو مطابقا نتائج ملاو نو ھونی.",
        "powersearch-legend": "ایڈوانس سرچ",
        "powersearch-ns": "جائے ناما تلاش:",
+       "powersearch-togglelabel": "چیک",
        "powersearch-toggleall": "سف",
+       "powersearch-togglenone": "کیاغ دی نیکی",
+       "search-external": "بیرونی تلاش",
+       "searchdisabled": "{{SITENAME}} تلاش غیرفعال.\nتو فی الحال گوگلو ذریعا تلاش کوریکو بوس.\nیاد لاکھے کہ گوگلو {{SITENAME}} اشاریہ ممکن شیر کہ پرانو دی بونی.",
        "preferences": "ترجیحات",
-       "mypreferences": "مہ ترجیہات",
+       "mypreferences": "ترجیحات",
+       "prefs-edits": "تدویناتن تعداد:",
+       "prefs-skin": "پھوست",
        "skin-preview": "نمائش",
+       "datedefault": "کیہ ترجیحات نیکی",
+       "prefs-personal": "ممبارو پروفائل",
+       "prefs-rc": "تازہ تبدیلی",
+       "prefs-watchlist": "واچ لسٹ",
+       "prefs-editwatchlist": "نوغ واچ لسٹان ایڈیٹ کورے",
+       "prefs-editwatchlist-raw": "نوغ واچ لسٹان ایڈیٹ کورے",
+       "prefs-resetpass": "پاسورڈو بدیل کورے",
+       "prefs-email": "اختیاراتِ بشلی کغاز",
+       "prefs-rendering": "ظاہریت",
+       "saveprefs": "محفوظ",
+       "restoreprefs": "تمام بےنقص ترتیباتن بحال کورے",
+       "prefs-editing": "تدوین",
+       "rows": "صف:",
+       "columns": "قطار:",
+       "searchresultshead": "Search/تلاش",
+       "stub-threshold-disabled": "غیر فعال",
+       "timezonelegend": "وختو زون",
+       "localtime": "مقامی وخت:",
+       "timezoneregion-africa": "افریقہ",
+       "timezoneregion-america": "امریکہ",
+       "timezoneregion-antarctica": "انٹارکٹیکا",
+       "timezoneregion-arctic": "قطب شمالی",
+       "timezoneregion-asia": "ایشیاء",
+       "timezoneregion-atlantic": "بحر اوقیانوس",
+       "timezoneregion-australia": "آسٹریلیا",
+       "timezoneregion-europe": "یورپ",
+       "timezoneregion-indian": "بحر ہند",
+       "timezoneregion-pacific": "بحر الکاہل",
+       "allowemail": "خور ممباراننتے بشلی کغاز نیویشیکو اختیارو دیت",
+       "prefs-searchoptions": "تلاش",
+       "prefs-namespaces": "نامان ژاغہ",
+       "default": "طے شدہ",
+       "prefs-files": "فائل",
+       "prefs-custom-css": "خودساختہ CSS",
+       "prefs-custom-js": "خودساختہ JS",
+       "prefs-emailconfirm-label": "برقی پتو تصدیق:",
        "youremail": "بشلی کغاز",
-       "username": "ممبارو نم",
+       "username": "صارف:",
        "prefs-memberingroups": "{{PLURAL:$1|گروہ|گروہاں}} رُکن:",
+       "prefs-registration": "وختِ اندراج:",
        "prefs-registration-date-time": "$1",
        "yourrealname": "* اصلی نم",
+       "yourlanguage": "زبان",
        "yournick": "دسخط",
        "badsig": "ناقص خام دسخط.\nHTML tags لوڑے.',",
        "badsiglength": "تہ دسخط کافی درونگار شیر.\nھیہ $1 {{PLURAL:$1|حرف|حروفاری}} زیات نو بیلک.",
+       "gender-male": "موش",
+       "gender-female": "عورت",
+       "email": "بشلی کغاز",
+       "prefs-help-realname": "حقیقی نام اختیاری شیر۔\nاگر تو تان حقیقی نامو کی ظاہر کوریک مݰکیسان تھے ھے نامو تہ کورمو بچے تتے ای شناخت دیکو بچے استعمال کورونو بوئے جمہ۔",
        "prefs-help-email": "برقی ڈاکو پتہ اختیاری شیر لیکن ھیہ ھتے وختہ مفید ثابت بوی کیاوتکی تو تان پاسورڈو کی روخڅیتاو",
        "prefs-help-email-others": "تو ھمو دی منتخب کوریکو بوس  کہ خور صارفین تہ تبادلۂ خیالو صفحا ای ربطو ذریعا تتے بشلی کغاز یعنی برقی ڈاک انځینی.\nکیاوتکہ دیگر صارفین تہ سوم رابطہ  کورونیان تھے تہ برقی ڈاکو پتہ افشا کورونو نو بوی",
+       "prefs-help-email-required": "برقی ڈاک پتہ ضرورت شیر.",
+       "prefs-info": "بنیادی معلومات",
+       "prefs-i18n": "بین الاقوامیت",
+       "prefs-signature": "دستخط",
+       "prefs-dateformat": "شکلبندِ تاریخ",
+       "prefs-advancedediting": "اعلی اختیارات",
+       "prefs-editor": "ایڈیٹر",
+       "prefs-preview": "نمائش",
+       "prefs-advancedrc": "اعلی اختیارات",
+       "prefs-advancedrendering": "اعلی اختیارات",
+       "prefs-advancedsearchoptions": "اعلی اختیارات",
+       "prefs-advancedwatchlist": "اعلی اختیارات",
+       "prefs-tokenwatchlist": "ٹوکن",
+       "prefs-diffs": "فرق",
+       "group": "گروہ",
+       "group-user": "یوزر",
+       "group-autoconfirmed": "تان توثیق شدہ یوزر",
+       "group-bot": "روبوٹ",
        "group-sysop": "کھوار ویکیپیڈیو منتظمین",
+       "group-bureaucrat": "بیوروکریٹ",
+       "group-suppress": "نگران",
+       "group-all": "(تمام)",
+       "group-user-member": "صارف",
+       "group-autoconfirmed-member": "تان توثیق شدہ صارف",
+       "group-bot-member": "خودکار صارف",
+       "group-sysop-member": "منتظم",
+       "group-bureaucrat-member": "{{GENDER:$1|بیوروکریٹ}}",
+       "group-suppress-member": "{{GENDER:$1|نگران}}",
+       "grouppage-user": "{{ns:project}}:ممباران",
+       "grouppage-autoconfirmed": "{{ns:project}}:تان توثیق شدہ صارف",
+       "grouppage-bot": "{{ns:project}}:روبوٹ",
        "grouppage-sysop": "{{ns:project}}:کھوار ویکیپیڈیو منتظمین",
+       "grouppage-bureaucrat": "بیورو کریٹ",
+       "grouppage-suppress": "{{ns:project}}:نگران",
        "right-movefile": "منتقل کورے",
        "right-upload": "فائل انځاوے",
        "right-writeapi": "اے پی آئی لکھائیو استعمال",
        "enhancedrc-history": "تاریخچہ",
        "recentchanges": "تازہ تبدیلی",
        "recentchanges-legend": "حالیہ تبدیلیان اختیارات",
-       "recentchanges-summary": "ھیہ صفحا کھوار ویکیپیڈیا باک تازہ تریں تبدیلیان مشاہدہ کورے",
+       "recentchanges-summary": "ھیہ صفحا ویکیپیڈیا باک تازہ تریں تبدیلیان لوڑے",
        "recentchanges-feed-description": "کھوارا ترجمہ",
        "recentchanges-label-newpage": "ھیہ ترمیم نوغ صفحہ تخلیق آریر",
        "recentchanges-label-minor": "ھیہ ای معمولی ترمیم شیر",
-       "recentchanges-label-bot": "ھیہ ایڈیٹو خود کار بوٹو زریعا انجام دیونو ہوی",
+       "recentchanges-label-bot": "ھیہ ایڈیٹو خود کار بوٹو زریعا انجام دیونو ہوئے",
        "recentchanges-label-unpatrolled": "ھیہ ترمیمو ھمونیہ پت مراجعت(Patrolled) کورونو نو بیتی شیر",
        "recentchanges-label-plusminus": "صفحو سائز تبدیل شدہ بلحاظ بائٹ مقدار",
        "recentchanges-legend-heading": "'''لیجنڈ:'''",
        "rcshowhidebots-show": "پشاوے",
        "rcshowhidebots-hide": "مو پشاوے",
        "rcshowhideliu": "داخل شدہ صارف $1",
+       "rcshowhideliu-show": "پشاوے",
        "rcshowhideliu-hide": "کھوشتاوے",
        "rcshowhideanons": "گمنام صارف $1",
        "rcshowhideanons-show": "پشاوے",
        "rcshowhideanons-hide": "مو پشاوے",
        "rcshowhidepatr": "$1 لوڑونو بیرو لکھائی",
+       "rcshowhidepatr-show": "پشاوے",
+       "rcshowhidepatr-hide": "کھوشتاوے",
        "rcshowhidemine": "ذاتی ترامیم $1",
        "rcshowhidemine-show": "پشاوے",
        "rcshowhidemine-hide": "کھوشتاوے",
        "diff": "فرق",
        "hist": "تاریخچہ",
        "hide": "مو پشاوے",
-       "show": "Ù\88Û\8cرÛ\8cغ Ú©Ù\88رے",
+       "show": "پشاÙ\88ے",
        "minoreditletter": "م",
        "newpageletter": "نوغ",
        "boteditletter": "خودکار",
        "rc-change-size-new": "$1 {{PLURAL:$1|byte|bytes}} تبدیلیاری آچی",
-       "rc-enhanced-expand": "تفصیلاتن پشاوے (JavaScript ضرورت بوی)",
+       "rc-enhanced-expand": "تفصیلاتن پشاوے (JavaScript ضرورت بوئے)",
        "rc-enhanced-hide": "تفصیلاتن کھوشتاوے",
        "recentchangeslinked": "متعلقہ تبدیلی",
        "recentchangeslinked-toolbox": "موقعی تبدیلی",
        "recentchangeslinked-title": "متعلقہ تبدیلی \"$1\"",
-       "recentchangeslinked-summary": "ھیہ ھتے تبدیلیان لسٹ شیر کہ ھیتان پھوک مدا پروشٹی ساوزینو بیتی شینی وا ھے صفحان سوم جستہ خور کیہ صفحہ چوکی شینی یا کیہ خاص زمرہ جاتو ممبرانن سوم چوکی شینی<br />\nساوزیرو [[Special:Watchlist|موڑا صفحہ]] '''بولڈ''' شینی",
+       "recentchangeslinked-summary": "ھیہ ھتے تبدیلیان لسٹ شیر کہ ھیتان پھوک مدا پروشٹی ساوزینو بیتی شینی وا ھے صفحان سوم جستہ خور کیہ صفحہ ݯوکی شینی یا کیہ خاص زمرہ جاتو ممبرانن سوم ݯوکی شینی<br />\nساوزیرو [[Special:Watchlist|موڑا صفحہ]] '''بولڈ''' شینی",
        "recentchangeslinked-page": "کھوار ویکیپیڈیو منصوبو صفحو لوڑے",
-       "recentchangeslinked-to": "کھولاو بیرو صفحو بجایا ھمو سوم چوکیرو صفحو نوغ تبدیلیان پشاوے",
+       "recentchangeslinked-to": "کھولاو بیرو صفحو بجایا ھمو سوم ݯوکیرو صفحو نوغ تبدیلیان پشاوے",
        "upload": "فائل انځاوے",
        "uploadlogpage": "نوشتۂ زبراثقال (اپ لوڈ لاگ)",
        "filename": "فایلو نام",
        "imgfile": "فائل",
        "file-anchor-link": "فائل",
        "filehist": "مسلو تاریخ",
-       "filehist-help": "ھیہ لوڑیکو بچے  کہ کیہ خاص وختہ فایل کیہ قسمہ ظاہر باو اوشتای ھتے  تاریخ یا وختہ طق(کلک) کورے",
+       "filehist-help": "ھمو لوڑیکو بچے  کہ کیہ خاص وختہ فائل کیہ قسمہ ظاہر باو اوشتائے ھتے  تاریخ یا وختہ طق(کلک) کورے",
        "filehist-revert": "آچی",
        "filehist-current": "حالیہ",
        "filehist-datetime": "تاریخ/وخت",
        "filehist-thumb": "اظفورہ",
        "filehist-thumbtext": "$1 صارفو څیق ھوٹو",
        "filehist-user": "صارف",
-       "filehist-dimensions": "ابعاد",
+       "filehist-dimensions": "ڈائیمنشنز",
        "filehist-comment": "تبصرہ",
        "imagelinks": "مسلو روابط",
        "linkstoimage": "ھیہ مسلو سوم درج ذیل {{PLURAL:$1|صفحہ مربوط شیر|$1 صفحات مربوط شینی}}",
        "upload-disallowed-here": "تو ھیہ فائلہ ترمیم کوریکو نو بوس",
        "randompage": "بےترتیب صفحہ",
        "statistics": "اعداد و شمار",
+       "statistics-pages": "صفحات",
+       "statistics-pages-desc": "(ویکی اقتباساتن کل صفحات، بشمولِ تبادلۂ خیال، رجوع مکررات وغیرہ۔)",
+       "statistics-files": "فائل انځاوے",
+       "statistics-edits": "ویکی اقتباساتہ آغازاری گنی کل صفحاتی ترمیم",
+       "statistics-edits-average": "فی صفحہ اوسط ترامیم",
+       "statistics-users": "مندرج [[خاص:فہرست صارفین، صارف فہرست|صارفین]]",
+       "statistics-users-active": "متحرک صارفین",
+       "pageswithprop-submit": "Go/بوغے",
+       "brokenredirects-edit": "ترمیم",
+       "brokenredirects-delete": "بوغاوے",
        "nbytes": "$1 {{PLURAL:$1|بایٹ|بایٹس}}",
        "nmembers": "$1 {{PLURAL:$1|ممبار|ممباران}}",
        "lonelypages": "څھوعو صفحات",
        "longpages": "درونگار ترین صفحات",
        "deadendpages": "بیردو صفحات",
        "protectedpages": "محفوظ شدہ صفحہ",
+       "protectedpages-page": "صفحہ",
+       "protectedpages-expiry": "ختم بویان:",
+       "protectedpages-unknown-timestamp": "نامعلوم",
+       "protectedpages-unknown-performer": "نامعلوم صارف",
        "protectedtitles": "محفوظ شدہ صفحہ",
        "listusers": "فہرست ارکان",
        "usercreated": "\n{{GENDER:$3|تخلیق شدہ}}  بتاریخ $1 بوقت $2",
        "pager-newer-n": "{{PLURAL:$1|نوغ1|نوغ $1}}",
        "pager-older-n": "{{PLURAL:$1|قدیم1|قدیم ترین $1}}",
        "booksources": "کتابی وسائل",
-       "booksources-search-legend": "کتابی وسایلان تلاش",
+       "booksources-search-legend": "کتابی وسائلان تلاش",
        "booksources-search": "Search/تلاش",
-       "specialloguserlabel": "یوزر",
+       "specialloguserlabel": "صارف:",
        "speciallogtitlelabel": "عنوان:",
        "log": "نوشتہ جات",
        "allpages": "سف صفحات",
        "prevpage": "آچھو صفحہ ($1)",
        "allpagesfrom": "مطلوبہ حرفاری شروع باک صفحاتن نمائش:",
        "allpagesto": "مطلوبہ حرفاری ختم باک صفحاتن نمائش:",
-       "allarticles": "تمام مقالات",
+       "allarticles": "کھل آرٹیکل",
        "allpagessubmit": "بوغے لا",
        "categories": "زمرہ جات",
        "sp-deletedcontributions-contribs": "حصہ",
        "linksearch-ns": "نامو ژاغہ:",
        "linksearch-ok": "Search/تلاش",
        "linksearch-line": "$1 مربوط شیر $2 ری",
+       "listusers-submit": "پشاوے",
+       "listusers-noresult": "ھیہ صارف ملاو نو ہوئے",
+       "activeusers": "متحرک صارفینان فہرست",
+       "activeusers-from": "مطلوبہ حرفاری شروع باک صفحاتن نمائش:",
+       "activeusers-hidebots": "کھوشت خود کار صارف",
+       "activeusers-hidesysops": "کھوشت منتظمان",
+       "activeusers-noresult": "ھیہ صارف ملاو نو ہوئے",
+       "listgrouprights-group": "گروہ",
+       "listgrouprights-rights": "اختیارات",
        "listgrouprights-members": "ممبارانن فھرست",
+       "listgrouprights-namespaceprotection-namespace": "نامو ژاغہ:",
        "emailuser": "ممباروت بشلی کغاز انڅاوے",
+       "emailuser-title-notarget": "ای میل صارف",
+       "emailpage": "ممباروت بشلی کغاز انځاوے",
+       "emailusername": "ممبارو نم",
+       "emailusernamesubmit": "داخل کورے",
+       "emailfrom": "ری",
+       "emailto": "پت",
+       "emailsubject": "موضوع:",
+       "emailmessage": "پیغام",
+       "emailsend": "انځاوے",
        "watchlist": "مہ واچ لسٹ",
-       "mywatchlist": "مہ زیرنظرفہرست",
+       "mywatchlist": "زیرنظرفہرست",
        "watchlistfor2": "براۓ $1 ($2)",
        "removedwatchtext": "ھیہ صفحہ \"[[:$1]]\" خارج کورونو ھوی[[Special:Watchlist|تہ زیر نظر فہرستاری]].",
        "watch": "زیرنظر",
        "watching": "زیر نظر",
        "unwatching": "منسوخ",
        "deletepage": "صفحہو ضائع کورے",
+       "confirm": "کنفرم",
+       "excontent": "'$1':مواد اوشوئے",
+       "excontentauthor": "حذف شدہ مواد: '$1' (وا صرفی '[[Special:Contributions/$2|$2]]' حصہ دریریتائے)",
        "confirmdeletetext": "تو ھیہ صفحو ھمو سوم ملحقہ تاریخچو سوم جستہ حذف کوریکو ارادہ کوری آسوس ۔ براۓ مہربانی تصدیق کورے کہ تو ھیہ عملو نتائجان ساری بخوبی آگاہ آسوس، وا ھیہ یقینو دی کورے کہ تو ھش [[{{MediaWiki:Policy-url}}|ویکیپیڈیو حکمت عملیو]] دائرا حال بتی کوروسان۔",
        "actioncomplete": "اقدام تکمیلوتے تورتای",
        "actionfailed": "تہ ایکشن ناکام ہوی",
        "protect-level-sysop": "صرفی منتظمینان بچے",
        "protect-expiring": "ختم بویان $1 (UTC)",
        "protect-cantedit": "تو ھیہ صفحو پروٹیکشن لیولو چینج کوریکو نوبوس، کوریکو کہ تاتے ھش کوریکو اجازت نیکی",
+       "protect-otherreason-op": "جوو وجہ",
        "restriction-type": "اجازت",
        "restriction-level": "ممنوغ لیول",
+       "minimum-size": "کم از کم سائز",
+       "maximum-size": "زیادار زیادہ سائر",
+       "pagesize": "(بائٹس)",
+       "restriction-edit": "ترمیم",
+       "restriction-move": "منتقل",
+       "restriction-create": "ساوزاوے",
        "undelete": "ضائع کاردو صفحاتن لوڑے",
+       "undeletebtn": "بحال",
        "undeletelink": "لوڑے/بحال کورے",
        "undeleteviewlink": "لوڑے",
+       "undeletecomment": "واجھہ",
        "namespace": "نامو ژاغہ:",
        "invert": "انتخاب بالعکس",
        "tooltip-invert": "تبدیلیان کھوشتیکو بچے ھیہ بکسو چیک کورے",
        "blocklogentry": "بلاک[[$1]] وختہ پت $2 $3",
        "unblocklogentry": "بلاک نو کاردو $1",
        "block-log-flags-nocreate": "کھاتہ کھولاو کوریکو سورا پاوپندی شیر",
+       "ipb_expiry_invalid": "Expiry ٹیم غلط شیر.",
+       "move-page-legend": "مـنـتـقـل کـورے",
        "movearticle": "مـنـتـقـل کـورے",
        "newtitle": "نوغ عنوان",
        "move-watch": "صفحہ زیر نظر",
        "movereason": "واجھہ",
        "revertmove": "رجوغ",
        "export": "برآمد صفحات",
+       "export-submit": "ایکسپورٹ",
        "allmessagesname": "نم",
        "allmessagesdefault": "طے شدہ متن",
+       "allmessages-filter-legend": "فلٹر",
+       "allmessages-filter-all": "سف",
+       "allmessages-language": "زبان",
+       "allmessages-filter-submit": "بوغے",
+       "allmessages-filter-translate": "ترجمہ کورے",
        "thumbnail-more": "فراخ کورے",
+       "filemissing": "فائل نیکی",
        "thumbnail_error": "$1 څیق سایزو ھوٹو ساوزیکا مسئلہ",
        "tooltip-pt-userpage": "تہ صارفی صفحہ",
        "tooltip-pt-mytalk": "تہ صفحۂ مشقولگی",
        "tooltip-feed-atom": "ھیہ صفحو بچے آٹوم فیڈ",
        "tooltip-t-contributions": "نوغ تدوین",
        "tooltip-t-emailuser": "ھیہ ممباروت بشلی کغاز(ای میل) انڅاوے",
-       "tooltip-t-upload": "اپلوڈ فایل",
+       "tooltip-t-upload": "فائلو اپلوڈ کورے",
        "tooltip-t-specialpages": "سف خاص صفحاتن فہرست",
        "tooltip-t-print": "ھیہ صفحو قابل طبع نسخہ",
        "tooltip-t-permalink": "صفحہعو موجودہ نظرثانیو مستقل لنک",
        "tooltip-compareselectedversions": "منتخب متـنو موازنہ",
        "tooltip-watch": "ھیہ صفحہو تان زیرِنظرفہرستہ شامل کورے",
        "tooltip-rollback": "\"رول بیک\" ای کلکا صفحو واپس سابقہ حالتہ گنی آلوی",
-       "tooltip-undo": "\"واپس\" یا لوظ آچیا کلک کوریکو سوم جستہ تہ صفحہ کچا تہ پشینو بوی ھے سوم جستہ تو واپس کوریکو وجہ نیویشیکو بوس",
+       "tooltip-undo": "\"Undo\" یا لوظ آچیا کلک کوریکو سوم جستہ تہ صفحہ کچا تہ پشینو بوئے ھے سوم جستہ تو واپس کوریکو وجہ نیویشیکو بوس",
        "tooltip-summary": "ای مختصار سمری ساوزاوے",
        "simpleantispam-label": "اینٹی ایسپم چیک. Do <strong>NOT</strong> fill this in!",
        "pageinfo-toolboxlink": "معلومات صفحہ",
        "previousdiff": " ← پرانو تدوین",
        "nextdiff": "صفحہو نم:",
-       "file-info-size": "$1 × $2 پکسلز, فل سایز: $3, MIME ٹایپ: $4",
-       "file-nohires": "ھموغاری لوٹ ریزولیوشن دستیاب نیکی.",
+       "file-info-size": "$1 × $2 پکسلز, فل سائز: $3, MIME ٹائپ: $4",
+       "file-nohires": "ھموغاری لوٹ ریزولیوشن موجود نیکی.",
        "svg-long-desc": "SVG فایل, nominally $1 × $2 پکسلز, فایل سایز: $3",
        "show-big-image": "اصل فائل",
        "show-big-image-preview": "ھیہ نمائشو حجم:$1",
        "metadata-help": "ھیہ فائلا خور دی معلومات شینی، شاید ھتیت ڈیجیٹل کیمرو یا سکینران زریعا کمپیوٹرو درینو بیتی شینی وا ھیتان زریعا ھمیتان ڈیجیٹل ساوزینو بیتی شیر\n\nاگر فائلو ھمو اصلی حالتہ  تبدیل کہ کورونو ھوی تھے ای کما تفصیلات تبدیل بیرو فائلو باریا موجود نیکی",
        "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-orientation": "پیشکش",
        "exif-xresolution": "تھروسکی ریزولوشن",
        "exif-yresolution": "ݯوکتو ریزولوشن",
        "external_image_whitelist": " #ھیہ لاینو ھموش تان شیکو لاکے کیچہ کہ ھیہ شیر<pre>\n#موڑا ریگولر لوان دیور((صرف ھتیتان کیاغ ھمیتان موژی شینی //) //) \n#بیریو ھوٹوان آر ایلان سوم ھمیتان میچ کورنو بوی\n# کیاغ کہ میچ ھونی ھیتان ھوٹوان سوم پشینو بوی بصورت دیگر ھیتان لنک کیاغ کی شینی ھتیتان پشینو بوی\n#لاین کیاغ کی شروع بویان  # کومنٹ جوشونو بوی۔\n#ھیہ کیس سینسیٹو شیر۔\n\n#لینو سورا ریجیکس فریگمنٹو لاکھے. ھیہ لاینو ھموش تان شیکو لاکے کیچہ کہ ھیہ شیر۔</pre>",
        "tag-filter": "[[Special:Tags|Tag]] filter:",
        "tag-filter-submit": "فلٹر",
-       "tag-list-wrapper": "([[اسپیشل:ٹیگز|{{PLURAL:$1|Tag|Tags}}]]: $2)",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tag|Tags}}]]: $2)",
        "tags-title": "Tags/ٹیگز",
        "compare-page1": "صفحہ 1",
        "logentry-delete-delete": "$1 {{GENDER:$2|حذف کورونو ہوئے}} صفحہ $3",
index a54f831..cb108dd 100644 (file)
        "import-interwiki-text": "سىرتتان الىناتىن ۋىيكىيدى جانە بەتتىڭ تاقىرىپ اتىن بولەكتەڭىز.\nتۇزەتۋ كۇن-ايى جانە وڭدەۋشى ەسىمدەرى ساقتالادى.\nۋىيكىي-اپارۋ ٴۇشىن سىرتتان الۋ بارلىق ارەكەتتەر [[{{#special:Log}}/import|سىرتتان الۋ جۋرنالىنا]] جازىلىپ الىنادى.",
        "import-interwiki-history": "بۇل بەتتىڭ بارلىق تارىيحىي نۇسقالارىن كوشىرۋ",
        "import-interwiki-submit": "سىرتتان الۋ",
-       "import-interwiki-namespace": "بەتتەردى مىنا ەسىم اياسىنا اپارۋ:",
        "import-comment": "ماندەمەسى:",
        "importtext": "قاينار ۋىيكىيدەن «{{#special:Export}}» قۋرالىن قولدانىپ فايلدى سىرتقا بەرىڭىز, دىيسكىڭىزگە ساقتاڭىز دا مىندا قوتارىپ بەرىڭىز.",
        "importstart": "بەتتەردى سىرتتان الۋدا…",
        "import-upload": "XML دەرەكتەرىن قوتارىپ بەرۋ",
        "importlogpage": "سىرتتان الۋ جۋرنالى",
        "importlogpagetext": "بەتتەردى تۇزەتۋ تارىيحىمەن بىرگە سىرتقى ۋىيكىيلەردەن اكىمشى رەتىندە الۋ.",
-       "import-logentry-upload": "«[[$1]]» دەگەندى فايل قوتارىپ بەرۋ ارقىلى سىرتتان الدى",
        "import-logentry-upload-detail": "$1 تۇزەتۋ",
-       "import-logentry-interwiki": "ۋىيكىي-اپارىلعان $1",
        "import-logentry-interwiki-detail": "$2 دەگەننەن $1 تۇزەتۋ",
        "tooltip-pt-userpage": "جەكە بەتىم",
        "tooltip-pt-anonuserpage": "بۇل IP مەكەنجايدىڭ جەكە بەتى",
index 835797f..caf8107 100644 (file)
        "editingold": "<strong>Ескерту: Осы беттің бұрынғы нұсқасын өңдеудесіз.</strong> Бұны сақтасаңыз осы нұсқадан кейінгі барлық өзгерістер жоғалады.",
        "yourdiff": "Айырмашылықтар",
        "copyrightwarning": "{{SITENAME}} жобасына қосқан барлық үлестеріңіз $2 (көбірек ақпарат үшін: $1) аясында жарияланатынын ескеріңіз.\nЕгер еңбегіңіздің еркін өңделуін және ақысыз көпшілікке таралуын қаламасаңыз мұнда жарияламаңыз<br />\nТағы да бұл мәліметті өзіңіз жазғаныңызға не қоғам қазынасынан немесе сондай ашық қорлардан көшірілгеніне бізге уәде бересіз.\n<strong>Авторлық құқықпен қорғалған мәліметті рұқсатсыз жарияламаңыз!</strong>",
-       "copyrightwarning2": "{{SITENAME}} жобасына қосқан барлық үлестеріңізді басқа үлескерлер өңдеуге, өзгертуге немесе аластауы мүмкін екенін ескеріңіз.\nЕгер еңбегіңіздің еркін өңделуін қаламасаңыз осында жарияламаңыз.<br />\nТағы да бұл мәліметті өзіңіз жазғаныңызға не қоғам қазынасынан немесе сондай ашық қорлардан көшірілгеніне бізге уәде бересіз. (көбірек ақпарат үшін $1 құжатын қараңыз).\n<strong>Авторлық құқықпен қорғалған мәліметті рұқсатсыз жарияламаңыз!",
+       "copyrightwarning2": "{{SITENAME}} жобасына қосқан барлық үлестеріңізді басқа үлескерлер өңдеуге, өзгертуге немесе аластауы мүмкін екенін ескеріңіз.\nЕгер еңбегіңіздің еркін өңделуін қаламасаңыз осында жарияламаңыз.<br />\nТағы да бұл мәліметті өзіңіз жазғаныңызға не қоғам қазынасынан немесе сондай ашық қорлардан көшірілгеніне бізге уәде бересіз. (көбірек ақпарат үшін $1 құжатын қараңыз).\n<strong>Авторлық құқықпен қорғалған мәліметті рұқсатсыз жарияламаңыз!</strong>",
        "longpageerror": "<strong>ҚАТЕЛІК: Сақтамақшы болған мәтініңіздің көлемі {{PLURAL:$1|бір килобайт|$1 килобайт}} ең көбі {{PLURAL:$2|килобайт|$2 килобайт}} рұқсат етілген көлемінен асқан.</strong>\nБұл сақталмайды.",
        "readonlywarning": "<strong>ЕСКЕРТУ: Дерекқор техникалық жұмыстар жасау үшін құлыпталған сондықтан дәл қазір өңдемеңізді сақтай алмайсыз.</strong>\nКейін сақтау үшін мәтініңізді мәтін файлына көшіріп алыпуңызға болады. \n\nАдминстратор оны құлыптау себебін келесідей түсіндіреді: $1",
        "protectedpagewarning": "<strong>Ескерту: Бұл бет өңдеуден қорғалған сондықтан тек әкімші құқықтары бар қатысушылар ғана өңдей алады.</strong>\nТөменде соңғы журнал жазбасы көрсетілген:",
        "notextmatches": "Еш бет мәтіні сәйкес емес",
        "prevn": "алдыңғы {{PLURAL:$1|$1}}",
        "nextn": "келесі {{PLURAL:$1|$1}}",
+       "prev-page": "алдыңғы бет",
+       "next-page": "келесі бет",
        "prevn-title": "Алдыңғы $1 {{PLURAL:$1|жазба|жазбалар}}",
        "nextn-title": "Келесі $1 {{PLURAL:$1|жазба|жазбалар}}",
        "shown-title": "Осы бетте {{PLURAL:$1|жазба}} көрсету.",
        "querypage-disabled": "Бұл арнайы бет өнімділік себептері үшін өшірілген",
        "booksources": "Кітап қайнарлары",
        "booksources-search-legend": "Кітап қайнарларын іздеу",
+       "booksources-search": "Іздеу",
        "booksources-text": "Төменде жаңа және қолданған кітаптар сататын тораптарының сілтемелері тізімделген және ізделген кітаптар туралы қосымша ақпарат болуы мүмкін:",
        "specialloguserlabel": "Орындаушы:",
        "speciallogtitlelabel": "Нысана (атауы немесе қатысушы):",
        "import-interwiki-history": "Бұл беттің барлық тарихи нұсқаларын көшіру",
        "import-interwiki-templates": "Кірістірілген барлық үлгілер",
        "import-interwiki-submit": "Сырттан алу",
-       "import-interwiki-namespace": "Беттерді мына есім кеңістігіне апару:",
        "import-upload-filename": "Файл атауы:",
        "import-comment": "Пікірі:",
        "importtext": "Қайнар уикиден [[Special:Export|export utility]]  қолданып файлды сыртқа беріңіз.\nКомьпютеріңізге сақтаңыз да мында жүктеп беріңіз.",
index 7e62a68..ad40f2d 100644 (file)
        "import-interwiki-text": "Sırttan alınatın wïkïdi jäne bettiñ taqırıp atın bölekteñiz.\nTüzetw kün-aýı jäne öñdewşi esimderi saqtaladı.\nWïkï-aparw üşin sırttan alw barlıq äreketter [[{{#special:Log}}/import|sırttan alw jwrnalına]] jazılıp alınadı.",
        "import-interwiki-history": "Bul bettiñ barlıq tarïxï nusqaların köşirw",
        "import-interwiki-submit": "Sırttan alw",
-       "import-interwiki-namespace": "Betterdi mına esim ayasına aparw:",
        "import-comment": "Mändemesi:",
        "importtext": "Qaýnar wïkïden «{{#special:Export}}» qwralın qoldanıp faýldı sırtqa beriñiz, dïskiñizge saqtañız da mında qotarıp beriñiz.",
        "importstart": "Betterdi sırttan alwda…",
        "import-upload": "XML derekterin qotarıp berw",
        "importlogpage": "Sırttan alw jwrnalı",
        "importlogpagetext": "Betterdi tüzetw tarïxımen birge sırtqı wïkïlerden äkimşi retinde alw.",
-       "import-logentry-upload": "«[[$1]]» degendi faýl qotarıp berw arqılı sırttan aldı",
        "import-logentry-upload-detail": "$1 tüzetw",
-       "import-logentry-interwiki": "wïkï-aparılğan $1",
        "import-logentry-interwiki-detail": "$2 degennen $1 tüzetw",
        "tooltip-pt-userpage": "Jeke betim",
        "tooltip-pt-anonuserpage": "Bul IP mekenjaýdıñ jeke beti",
index bbea687..78b706e 100644 (file)
        "import-interwiki-history": "ចម្លង គ្រប់កំណែចាស់ នៃទំព័រនេះ",
        "import-interwiki-templates": "រាប់​បញ្ចូល​ទំព័រគំរូ​ទាំងអស់​",
        "import-interwiki-submit": "នាំចូល",
-       "import-interwiki-namespace": "បញ្ជូនទំព័រទៅក្នុងលំហឈ្មោះ​៖",
        "import-upload-filename": "ឈ្មោះ​ឯកសារ​​៖",
        "import-comment": "យោបល់៖",
        "importtext": "សូមនាំចេញឯកសារនេះពីវិគីប្រភពដោយប្រើប្រាស់[[Special:Export|ឧបករណ៍នាំចេញ]]។\nរក្សាវាទុកទៅក្នុងកុំព្យូទ័ររបស់អ្នករួចផ្ទុកវាឡើងនៅទីនេះ។",
index cbd155a..06d4b65 100644 (file)
@@ -98,7 +98,7 @@
        "november": "ನವೆಂಬರ್",
        "december": "ಡಿಸೆಂಬರ್",
        "january-gen": "ಜನವರಿ",
-       "february-gen": "ಫà³\8dರà³\86ಬà³\8dರà³\81ವರಿ",
+       "february-gen": "ಫà³\86ಬà³\8dರವರಿ",
        "march-gen": "ಮಾರ್ಚ್",
        "april-gen": "ಏಪ್ರಿಲ್",
        "may-gen": "ಮೇ",
        "broken-file-category": "ಕಡತ ಕೊಂಡಿಗಳು ಮುರಿದಿರುವ ಪುಟಗಳು",
        "about": "ನಮ್ಮ ಬಗ್ಗೆ",
        "article": "ಲೇಖನ ಪುಟ",
-       "newwindow": "(ಹà³\8aಸ à²\95ಿà²\9fà²\95ಿಯನà³\8dನà³\81 ತೆರೆಯುತ್ತದೆ)",
-       "cancel": "ವà²\9cಾ à²®à²¾à²¡à²¿",
+       "newwindow": "(ಹà³\8aಸ à²\95ಿà²\9fà²\95ಿಯಲà³\8dಲಿ ತೆರೆಯುತ್ತದೆ)",
+       "cancel": "ರದà³\8dದà³\81ಮಾಡà³\81",
        "moredotdotdot": "ಇನ್ನಷ್ಟು...",
        "morenotlisted": "ಈ ಪಟ್ಟಿ ಪೂರ ಇಲ್ಲ.",
        "mypage": "ಪುಟ",
        "searchbutton": "ಹುಡುಕು",
        "go": "ಹೋಗು",
        "searcharticle": "ಹೋಗು",
-       "history": "ಪà³\81à²\9fದ à²\9aರಿತà³\8dರà³\86",
+       "history": "ಪà³\81à²\9fದ à²\87ತಿಹಾಸ",
        "history_short": "ಇತಿಹಾಸ",
        "updatedmarker": "ನನ್ನ ಕೊನೆಯ ವೀಕ್ಷಣೆಯ ನಂತರ ಬದಲಾಗಿರುವವು",
        "printableversion": "ಪ್ರಿಂಟ್ ಆವೃತ್ತಿ",
        "viewhelppage": "ಸಹಾಯ ಪುಟ ತೋರು",
        "categorypage": "ವರ್ಗ ಪುಟ ತೋರು",
        "viewtalkpage": "ಚರ್ಚೆಯನ್ನು ವೀಕ್ಷಿಸಿ",
-       "otherlanguages": "à²\87ತರ à²­à²¾à²·à³\86à²\97ಳà³\81",
+       "otherlanguages": "à²\87ತರ à²­à²¾à²·à³\86à²\97ಳಲà³\8dಲಿ",
        "redirectedfrom": "($1 ಇಂದ ಪುನರ್ನಿರ್ದೇಶಿತ)",
        "redirectpagesub": "ಪುನರ್ನಿರ್ದೇಶನ ಪುಟ",
        "redirectto": "ಪುನರ್ನಿರ್ದೇಶನ ಇದಕ್ಕೆ:",
        "aboutpage": "Project:ನಮ್ಮ ಬಗ್ಗೆ",
        "copyright": "ವಿಶೇಷವಾಗಿ ಹೇಳಲಲ್ಲಿದರೆ ಇದು \"$1\" ಕಾಪಿರೈಟ್ ಅಲ್ಲಿ ಲಭ್ಯ ಉಂಟು",
        "copyrightpage": "{{ns:project}}:ಕೃತಿಸ್ವಾಮ್ಯತೆಗಳು",
-       "currentevents": "ಪ್ರಚಲಿತ",
-       "currentevents-url": "Project:ಪ್ರಚಲಿತ",
+       "currentevents": "ಪ್ರಚಲಿತ ಸಂಗತಿಗಳು",
+       "currentevents-url": "Project:ಪ್ರಚಲಿತ ಸಂಗತಿಗಳು",
        "disclaimers": "ಅಬಾಧ್ಯತೆಗಳು",
        "disclaimerpage": "Project:ಸಾಮಾನ್ಯ ಅಬಾಧ್ಯತೆಗಳು",
        "edithelp": "ಸಂಪಾದನೆಗೆ ಸಹಾಯ",
        "newmessageslinkplural": "{{PLURAL:$1|ಒಂದು ಹೊಸ ಸಂದೇಶ|999=ಹೊಸ ಸಂದೇಶಗಳು}}",
        "newmessagesdifflinkplural": "ಇತ್ತೀಚಿನ {{PLURAL:$1|ಬದಲಾವಣೆ|999=ಬದಲಾವಣೆಗಳು}}",
        "youhavenewmessagesmulti": "$1 ಅಲ್ಲಿ ನಿಮಗೆ ಹೊಸ ಸಂದೇಶಗಳಿವೆ",
-       "editsection": "ಬದಲಾಯಿಸಿ",
+       "editsection": "ಸà²\82ಪಾದಿಸಿ",
        "editold": "ಬದಲಾಯಿಸಿ",
        "viewsourceold": "ಮೂಲವನ್ನು ನೋಡು",
        "editlink": "ಸಂಪಾದಿಸಿ",
        "viewsourcelink": "ಮೂಲವನ್ನು ವೀಕ್ಷಿಸಿ",
-       "editsectionhint": "$1 ವಿಭಾಗ ಸಂಪಾದಿಸಿ",
+       "editsectionhint": "ವಿಭಾಗ ಸಂಪಾದಿಸಿ: $1",
        "toc": "ಪರಿವಿಡಿ",
        "showtoc": "ತೋರಿಸು",
        "hidetoc": "ಅಡಗಿಸು",
        "red-link-title": "$1 (ಪುಟವು ಇನ್ನೂ ಸೃಷ್ಟಿತವಾಗಿಲ್ಲ)",
        "sort-descending": "ಇಳಿಕೆ ಕ್ರಮದಲ್ಲಿ ಜೋಡಿಸು",
        "sort-ascending": "ಏರಿಕೆ ಕ್ರಮದಲ್ಲಿ ಜೋಡಿಸು",
-       "nstab-main": "ಲà³\87à²\96ನ",
+       "nstab-main": "ಪà³\81à²\9f",
        "nstab-user": "ಸದಸ್ಯರ ಪುಟ",
        "nstab-media": "ಮೀಡಿಯ ಪುಟ",
        "nstab-special": "ವಿಶೇಷ ಪುಟ",
        "createacct-reason": "ಕಾರಣ",
        "createacct-reason-ph": "ನೀವು ಯಾಕೆ ಇನ್ನು ಒಂದು ಖಾತ ಮಾಡುತ ಇದ್ದೀರಿ ?",
        "createacct-captcha": "ಸುರಕ್ಷೆ ನಿಗ್ರಹಿಸು.",
-       "createacct-imgcaptcha-ph": "ಮೇಲೆ ಕಾಣುವಂತ ಶಬ್ದಗಳು ಮತ್ತು ಅಂಕಗಳನ್ನು ಬರಿರಿ.",
+       "createacct-imgcaptcha-ph": "ಮà³\87ಲà³\86 à²\95ಾಣà³\81ವà²\82ತ à²¶à²¬à³\8dದà²\97ಳà³\81 à²®à²¤à³\8dತà³\81 à²\85à²\82à²\95à²\97ಳನà³\8dನà³\81 à²¬à²°à³\86ಯಿರಿ.",
        "createacct-submit": "ಖಾತೆಯನ್ನು ಸೃಷ್ಟಿಸಿ",
        "createacct-another-submit": "ಇನ್ನು ಒಂದು ಖಾತ ಮಾಡಿ",
        "createacct-benefit-heading": "{{SITENAME}} ನಿಮ್ಮನ್ತವೆ ಜನರಿಂದ ಮಾಡಿದು",
        "watchthis": "ಈ ಪುಟವನ್ನು ವೀಕ್ಷಿಸಿ",
        "savearticle": "ಪುಟವನ್ನು ಉಳಿಸಿ",
        "preview": "ಮುನ್ನೋಟ",
-       "showpreview": "ಮುನ್ನೋಟ",
+       "showpreview": "ಮುನ್ನೋಟ ತೋರಿಸು",
        "showdiff": "ಬದಲಾವಣೆಗಳನ್ನು ತೋರಿಸು",
        "anoneditwarning": "'''ಎಚ್ಚರ:''' ನೀವು ಲಾಗ್ ಇನ್ ಆಗಿಲ್ಲ. ನಿಮ್ಮ ಐಪಿ ವಿಳಾಸವು ಪುಟದ ಸಂಪಾದನೆಗಳ ಇತಿಹಾಸದಲ್ಲಿ ದಾಖಲಾಗುತ್ತದೆ.",
        "anonpreviewwarning": "''ನೀವು ಲಾಗಿನ್ ಆಗಿಲ್ಲ . ಉಳಿಸಲು ಪ್ರಯತ್ನಿಸಿದಾಗ ನಿಮ್ಮ IP ವಿಳಾಸವನ್ನು ಈ ಪುಟದ ಸಂಪಾದನೆ ಇತಿಹಾಸದಲ್ಲಿ ನಮೂದಿಸಲಗುವುದು.''",
        "previousrevision": "←ಹಿಂದಿನ ಪರಿಷ್ಕರಣೆ",
        "nextrevision": "ಮುಂದಿನ ಪರಿಷ್ಕರಣೆ",
        "currentrevisionlink": "ಈಗಿನ ಪರಿಷ್ಕರಣೆ",
-       "cur": "ಸದ್ಯದ",
+       "cur": "ಸಧ್ಯದ",
        "next": "ಮುಂದಿನದು",
        "last": "ಕೊನೆಯ",
        "page_first": "ಮೊದಲ",
        "searchprofile-everything": "ಪ್ರತಿಯೊಂದು",
        "searchprofile-advanced": "ಪರಿಣತ",
        "searchprofile-articles-tooltip": "$1 ನಲ್ಲಿ ಹುಡುಕಿ",
-       "searchprofile-images-tooltip": "ಹà³\81ದà³\81à²\95ಿ  à²¹à²²à³\86ಯನà³\81",
-       "searchprofile-everything-tooltip": "ಹà³\81ದà³\81à²\95ಿ à²¯à²² à²¸à³\81ಮನà³\81 (à²\87ಥಿಯದಿ à²®à²¾à²¥à³\81 à²¹à²²à³\86)",
-       "searchprofile-advanced-tooltip": "ಹà³\81ಧà³\81à²\95ಿ à²¨à²® à²\9cಾà²\97 à²¹à³\86ಸರà³\81ಸà³\8dತಲà³\8dಲ",
+       "searchprofile-images-tooltip": "à²\95ಡತà²\97ಳನà³\8dನà³\81 à²¹à³\81ಡà³\81à²\95ಿ",
+       "searchprofile-everything-tooltip": "à²\8eಲà³\8dಲಾ à²®à²¾à²¹à²¿à²¤à²¿à²\97ಳನà³\8dನà³\81 à²¹à³\81ಡà³\81à²\95ಿ (à²\9aರà³\8dà²\9aà³\86ಯನà³\8dನà³\82 à²¸à³\87ರಿಸಿ)",
+       "searchprofile-advanced-tooltip": "ಬಳà²\95à³\86ಯ à²¨à²¾à²®à²µà²°à³\8dà²\97à²\97ಳಲà³\8dಲಿ à²¹à³\81ಡà³\81à²\95ಿ",
        "search-result-size": "$1 ({{PLURAL:$2|೧ ಪದ|$2 ಪದಗಳು}})",
        "search-redirect": "(ಪುನರ್ನಿರ್ದೇಶನ $1)",
        "search-section": "(ವಿಭಾಗ $1)",
        "recentchanges-label-minor": "ಇದು ಚುಟುಕಾದ ಬದಲಾವಣೆ",
        "recentchanges-label-bot": "ಈ ಸಂಪಾದನೆಯನ್ನು ಒಂದು ಬಾಟ್ ಮಾಡಿದೆ",
        "recentchanges-label-unpatrolled": "ಈ ಸಂಪಾದನೆಯನ್ನು ಇನ್ನೂ ಪರೀಕ್ಷೆಗೆ ಒಳಪಡಿಸಿಲ್ಲ",
+       "recentchanges-label-plusminus": "ಪುಟದ ಗಾತ್ರವು ಇಷ್ಟು ಸಂಖ್ಯೆಯ ಬೈಟ್‍ಗಳಿಂದ ಬದಲಾಯಿಸಲ್ಪಟ್ಟಿದೆ",
+       "recentchanges-legend-heading": "'''ಪರಿವಿಡಿ:'''",
        "rcnotefrom": "'''$2''' ಇಂದ ಆಗಿರುವ ಬದಲಾವಣೆಗಳು ಕೆಳಗಿವೆ (ಕೊನೆಯ '''$1'''ರವರೆಗೆ ತೋರಿಸಲಾಗಿದೆ).",
        "rclistfrom": "$3 $2 ಇಂದ ಪ್ರಾರಂಭಿಸಿ ಮಾಡಲಾದ ಬದಲಾವಣೆಗಳನ್ನು ನೋಡಿ",
        "rcshowhideminor": "ಚಿಕ್ಕಪುಟ್ಟ ಬದಲಾವಣೆಗಳನ್ನು $1",
        "rcshowhideminor-show": "ತೊರಿಸಿ",
        "rcshowhideminor-hide": "ಮರೆ ಮಾಡಿ",
        "rcshowhidebots": "ಬಾಟ್‍ಗಳನ್ನು $1",
-       "rcshowhidebots-show": "ತà³\8aರಿಸಿ",
+       "rcshowhidebots-show": "ತà³\8bರಿಸà³\81",
        "rcshowhidebots-hide": "ಮರೆ ಮಾಡಿ",
        "rcshowhideliu": "$1 ನೊಂದಾಯಿತ ಬಳಕೆದಾರರು",
        "rcshowhideliu-show": "ತೊರಿಸಿ",
        "number_of_watching_users_pageview": "[$1 ವೀಕ್ಷಿಸುತ್ತಿರುವ {{PLURAL:$1|ಸದಸ್ಯ|ಸದಸ್ಯರು}}]",
        "rc_categories": "ವರ್ಗಗಳಿಗೆ ಮಾತ್ರ ಸೀಮಿತವಾಗಿಸು (\"|\" ಇಂದ ಬೇರ್ಪಡಿಸು)",
        "rc_categories_any": "ಯಾವುದೇ",
-       "rc-change-size-new": "$1 {{PLURAL:$1|byte|bytes}} ಬದಲಾವಣೆಯ ನಂತರ change",
+       "rc-change-size-new": "$1 {{PLURAL:$1|byte|bytes}} ಬದಲಾವಣೆಯ ನಂತರ",
        "newsectionsummary": "/* $1 */ ಹೊಸ ವಿಭಾಗ",
        "rc-enhanced-expand": "ವಿವರಗಳನ್ನು ತೋರಿಸು (JavaScript ಬೇಕಾಗುತ್ತದೆ)",
        "rc-enhanced-hide": "ವಿವರಗಳನ್ನು ಅಡಗಿಸು",
        "thumbnail_error": "ಮುನ್ನೋಟ ಚಿತ್ರವನ್ನು ಸೃಷ್ಟಿಸುವಲ್ಲಿ ದೋಷ: $1",
        "import": "ಪುಟಗಳನ್ನು ಅಮದು ಮಾಡಿ",
        "import-interwiki-submit": "ಆಮದು",
-       "import-interwiki-namespace": "ಪುಟಗಳನ್ನು ಈ ಪುಟಪ್ರಬೇಧಕ್ಕೆ ವರ್ಗಾಯಿಸು:",
        "import-comment": "ಟಿಪ್ಪಣಿ :",
        "importstart": "ಪುಟಗಳು ಆಮದಾಗುತ್ತಿದೆ...",
        "import-revision-count": "$1 {{PLURAL:$1|ಬದಲಾವಣೆ|ಬದಲಾವಣೆಗಳು}}",
        "tooltip-pt-preferences": "ನನ್ನ ಆಯ್ಕೆಗಳು",
        "tooltip-pt-watchlist": "ನೀವು ಬದಲಾವಣೆಗಳ ಮೇಲೆ ನಿಗಾ ವಹಿಸುತ್ತಿರುವ ಪುಟಗಳ ಪಟ್ಟಿ",
        "tooltip-pt-mycontris": "ನಿಮ್ಮ ಕಾಣಿಕೆಗಳ ಪಟ್ಟಿ",
-       "tooltip-pt-login": "ನà³\80ವà³\81 à²²à²¾à²\97à³\8d à²\87ನà³\8d à²\86à²\97ಬà³\87à²\95à³\86à²\82ದà³\81 à²\95à³\8bರà³\81ತà³\8dತà³\87ವà³\86, à²\86ದರà³\86 à²\85ದà³\81 à²\96ಡà³\8dಡಾಯ à²\8fನà³\81 ಅಲ್ಲ.",
+       "tooltip-pt-login": "ನà³\80ವà³\81 à²²à²¾à²\97à³\8d à²\87ನà³\8d à²\86à²\97ಬà³\87à²\95à³\86à²\82ದà³\81 à²\95à³\8bರà³\81ತà³\8dತà³\87ವà³\86, à²\86ದರà³\86 à²\85ದà³\81 à²\96ಡà³\8dಡಾಯ à²\8eನà³\82 ಅಲ್ಲ.",
        "tooltip-pt-logout": "ಲಾಗ್ ಔಟ್",
-       "tooltip-pt-createaccount": "ನà³\80ವà³\81 à²¹à³\8aಸ à²\96ಾತà³\86ಯನà³\8dನà³\81 à²¤à³\86ರà³\86ದà³\81 à²²à²¾à²\97ಿನà³\8d à²\86à²\97à³\81ವà³\81ದನà³\8dನà³\81 à²¹à³\81ರಿದà³\81à²\82ಬಿಸà³\81ತà³\8dತà³\87ವà³\86; à²\86ದಾà²\97à³\8dಯà³\82, à²\87ದà³\81 à²\85ವಶà³\8dಯವà³\87ನಿಲà³\8dಲ",
+       "tooltip-pt-createaccount": "ನೀವು ಹೊಸ ಖಾತೆಯನ್ನು ತೆರೆದು ಲಾಗಿನ್ ಆಗುವುದನ್ನು ಹುರಿದುಂಬಿಸುತ್ತೇವೆ; ಆದಾಗ್ಯೂ, ಇದು ಅವಶ್ಯವೇನಲ್ಲ",
        "tooltip-ca-talk": "ಮಾಹಿತಿ ಪುಟದ ಬಗ್ಗೆ ಚರ್ಚೆ",
        "tooltip-ca-edit": "ಈ ಪುಟವನ್ನು ನೀವು ಸಂಪಾದಿಸಬಹುದು. ಉಳಿಸುವ ಮುನ್ನ ಮುನ್ನೋಟವನ್ನು ಉಪಯೋಗಿಸಿ.",
        "tooltip-ca-addsection": "ಹೊಸ ವಿಭಾಗವನ್ನು ಪ್ರಾರಂಭಿಸಿ",
        "tooltip-upload": "ಅಪ್ಲೋಡ್ ಅನ್ನು ಪ್ರಾರಂಭಿಸು",
        "tooltip-rollback": "ಕೊನೆ ಸಂಪಾದಕರ ಎಲ್ಲಾ ಸಂಪಾದನೆಗಳನ್ನು ಅಳಿಸುಹಾಕುತ್ತದೆ",
        "tooltip-undo": "\"ವಜಾ ಮಾಡಿ\" ಈ ಸಂಪಾದನೆಯನ್ನು ನಿಷ್ಕ್ರಿಯ ಗೊಳಿಸಿ ಸಂಪಾದನಾ ಪುಟವನ್ನು ಮುನ್ನೋಟದೊಂದಿಗೆ ತೆರೆಯುತ್ತದೆ.\nಇಲ್ಲಿ ಸಾರಾಂಶದಲ್ಲಿ ಕಾರಣವನ್ನು ಸೇರಿಸುವ ಅನುಮತಿ ಇದೆ.",
-       "tooltip-summary": "ಸನà³\8dನ à²\92ಪà³\8dಪಿà²\97à³\86 à²\87ಲà³\8dಲಿ à²¹à²\95ಿ",
+       "tooltip-summary": "à²\9aಿà²\95à³\8dà²\95 à²¸à²¾à²°à²¾à²\82ಶ à²\92à²\82ದನà³\8dನà³\81 à²¸à³\87ರಿಸಿ",
        "anonymous": "{{SITENAME}} ತಾಣದ ಅನಾಮಧೇಯ {{PLURAL:$1|ಬಳಕೆದಾರ|ಬಳಕೆದಾರರು}}",
        "siteuser": "{{SITENAME}} ಬಳಕೆದಾರ $1",
        "othercontribs": "$1 ರ ಕೆಲಸವನ್ನು ಆಧರಿಸಿ.",
index 04ac009..70c2c0a 100644 (file)
        "history-feed-description": "이 문서의 편집 역사",
        "history-feed-item-nocomment": "$2에 $1님의 편집",
        "history-feed-empty": "요청한 문서가 존재하지 않습니다.\n해당 문서가 삭제되었거나, 문서 이름이 바뀌었을 수 있습니다.\n[[Special:Search|위키의 검색]]을 사용해 관련 문서를 찾아보세요.",
+       "history-edit-tags": "선택한 판의 태그를 편집하기",
        "rev-deleted-comment": "(편집 요약 삭제됨)",
        "rev-deleted-user": "(사용자 이름 삭제됨)",
        "rev-deleted-event": "(기록 정보가 제거됨)",
        "right-sendemail": "다른 사용자에게 이메일 보내기",
        "right-passwordreset": "비밀번호 재설정 이메일을 보기",
        "right-managechangetags": "데이터베이스에서 [[Special:Tags|태그]]를 만들거나 지우기",
+       "right-applychangetags": "자신이 편집할 때 [[Special:Tags|태그]]를 적용하기",
+       "right-changetags": "문서의 특정 판과 특정 기록 항목에 임의의 [[Special:Tags|태그]]를 추가하거나 제거하기",
        "newuserlogpage": "사용자 만들기 기록",
        "newuserlogpagetext": "사용자가 만들어진 기록입니다.",
        "rightslog": "사용자 권한 기록",
        "action-editmyprivateinfo": "자신의 개인정보 편집",
        "action-editcontentmodel": "문서의 콘텐츠 모델을 편집",
        "action-managechangetags": "데이터베이스에서 태그를 만들거나 지울",
+       "action-applychangetags": "당신이 편집할 때 태그를 적용하기",
+       "action-changetags": "문서의 특정 판과 특정 기록 항목에 임의의 태그를 추가하거나 제거하기",
        "nchanges": "$1개 {{PLURAL:$1|바뀜}}",
        "enhancedrc-since-last-visit": "{{PLURAL:$1|마지막 방문 이후}} $1개",
        "enhancedrc-history": "역사",
        "logempty": "일치하는 항목이 없습니다.",
        "log-title-wildcard": "다음 글로 시작하는 제목 검색",
        "showhideselectedlogentries": "선택한 기록 항목 보이기/숨기기",
+       "log-edit-tags": "선택한 기록 항목의 태그를 편집",
        "allpages": "모든 문서 목록",
        "nextpage": "다음 문서 ($1)",
        "prevpage": "이전 문서 ($1)",
        "import-interwiki-history": "이 문서의 모든 역사를 가져오기",
        "import-interwiki-templates": "모든 틀을 포함하기",
        "import-interwiki-submit": "가져오기",
-       "import-interwiki-namespace": "새 이름공간:",
-       "import-interwiki-rootpage": "대상 루트 문서 (선택 사항):",
        "import-upload-filename": "파일 이름:",
        "import-comment": "요약:",
        "importtext": "원본 위키에서 [[Special:Export|내보내기]] 기능을 사용해 파일을 내려받으세요.\n그리고 당신의 컴퓨터에 저장해 둔 후 여기에 올려주세요.",
        "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",
        "tags-activate-reason": "이유:",
        "tags-activate-not-found": "\"$1\" 태그가 존재하지 않습니다.",
        "tags-deactivate-reason": "이유:",
+       "tags-update-remove-not-allowed-one": "\"$1\" 태그를 제거하는 것은 허용되지 않습니다.",
+       "tags-edit-title": "태그 편집",
+       "tags-edit-manage-link": "태그 관리",
+       "tags-edit-revision-selected": "[[:$2]]에서 {{PLURAL:$1|선택한 판}}:",
+       "tags-edit-revision-legend": "{{PLURAL:$1|이 판|$1개 판 모두}}에 태그를 추가하거나 제거",
+       "tags-edit-existing-tags": "기존 태그:",
+       "tags-edit-existing-tags-none": "''없음''",
+       "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|이 판|$1개 판}}에 수정 사항을 적용",
+       "tags-edit-failure": "수정 사항이 적용될 수 없습니다: $1",
+       "tags-edit-nooldid-title": "대상 판이 잘못되었습니다",
+       "tags-edit-nooldid-text": "이 기능을 수행할 특정 판을 제시하지 않았거나 해당 판이 없습니다.",
+       "tags-edit-none-selected": "추가하거나 제거할 최소 하나 이상의 태그를 선택하세요.",
        "comparepages": "문서 비교",
        "compare-page1": "첫 번째 문서",
        "compare-page2": "두 번째 문서",
        "logentry-newusers-create2": "$1 사용자가 $3 사용자 계정을 {{GENDER:$2|만들었습니다}}",
        "logentry-newusers-byemail": "$3 사용자 계정을 $1님이 {{GENDER:$2|만들었고}} 비밀번호는 이메일로 보냈습니다",
        "logentry-newusers-autocreate": "$1 사용자 계정을 자동으로 {{GENDER:$2|만들었습니다}}",
-       "logentry-rights-rights": "$1 사용자가 $3 사용자의 권한을 $4에서 $5로 {{GENDER:$2|바꾸었습니다}}",
+       "logentry-rights-rights": "$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-managetags-delete": "$1 {{GENDER:$2|사용자가}} \"$4\" 태그를 삭제하였습니다 ($5개 {{PLURAL:$5|판 및 기록}}에서 제거되었습니다)",
        "logentry-managetags-activate": "$1 {{GENDER:$2|사용자가}} \"$4\" 태그를 사용자나 봇이 사용하도록 활성화시켰습니다",
        "logentry-managetags-deactivate": "$1 {{GENDER:$2|사용자가}} \"$4\" 태그를 사용자나 봇이 사용하지 못하도록 비활성화시켰습니다",
+       "log-name-tag": "태그 기록",
        "rightsnone": "(없음)",
        "revdelete-summary": "편집 요약",
        "feedback-adding": "문서에 피드백을 올리는 중...",
        "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": "제출",
        "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 문자",
index 2c3b40c..ea8ba2b 100644 (file)
        "disclaimers": "Джууаблылыкъны унамау",
        "disclaimerpage": "Project:Джууаблылыкъны унамау",
        "edithelp": "Тюрлендириуню юсюнден болушлукъ",
+       "helppage-top-gethelp": "Ангылатыу",
        "mainpage": "Баш бет",
        "mainpage-description": "Баш бет",
        "policy-url": "Project:Джорукъла",
        "showhideselectedversions": "Сайланнган версияланы кёргюз/джашыр",
        "editundo": "ызына алыу",
        "diff-empty": "(башхалыкъ джокъ)",
+       "diff-multi-sameuser": "(бу къошулуучу этген {{PLURAL:$1|бир аралы версия|$1 аралы версия}} кёргюзюлмегенди)",
        "diff-multi-manyusers": "($2 {{PLURAL:$2|къошулуучудан}} кёб этген {{PLURAL:$1|бир аралыкъ тюрлениу|$1 аралыкъ тюрлениу}} кёргюзюлмегенди)",
        "difference-missing-revision": "Бу тенглешдириу ($1) ючюн {{PLURAL:$2|бир версия|$2 версия}} {{PLURAL:$2|табылмады}}.\n\n\nБу, эскирген джибериу бла кетерилген бетни версияларын тенглешдириуге кёчген сагъатда кёбюсюне болады.\nТолуракъ информация [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} кетериулени журналында] болургъа боллукъду.",
        "searchresults": "Излеуню эсеби",
        "uploadnewversion-linktext": "Бу файлны джангы версиясын джюклеу",
        "shared-repo-from": "$1-дан",
        "shared-repo": "Ортакъ сакълау джер",
+       "upload-disallowed-here": "Бу файлны юсюню джазаргъа болмайды.",
        "filerevert": "$1 файлны эски халына къайтыу",
        "filerevert-legend": "Файлны эски халына къайтар",
        "filerevert-intro": "'''[[Media:$1|$1]]''' медиясыны [$4 $3, $2 замандагъы версиясы]ны ызына къайтарыгъыз.",
        "undelete-show-file-submit": "Хоу",
        "namespace": "Атла алам:",
        "invert": "Сайланнганны айландыр",
+       "tooltip-invert": "Батледе тюрлениулени джашырыр ючюн: сайланнган ат аламда (неда, белгиленнген эсе, байланнган ат аламлада) бу энни салыгъыз",
        "namespace_association": "Байламлы ат алам",
+       "tooltip-namespace_association": "Сайланнган ат алам бла байламлы сюзюу атланы аламын да къошар ючюн бу энни салыгъын",
        "blanknamespace": "(Баш)",
        "contributions": "{{GENDER:$1|Къошулуучуну}} къошуму",
        "contributions-title": "$1 къошулуучуну къошагъы",
        "import-interwiki-history": "Бу бетни бютеу тюрлениу тарихин копия эт",
        "import-interwiki-templates": "Бютеу шаблонланы ичине сал",
        "import-interwiki-submit": "Импорт",
-       "import-interwiki-namespace": "Нюзюр ат алам:",
        "import-upload-filename": "Файлны аты:",
        "import-comment": "Эсгериу:",
        "importtext": "Бетни къайнакъ викиден [[Special:Export|адырны хайырландырыб]] эскпорт этигиз. Файлны дискде сакълагъыз эм былайгъа джюклегиз.",
        "tooltip-pt-mycontris": "Сизни тюрлендириулеригизни тизмеси",
        "tooltip-pt-login": "Былайда системада регистрация этерге боллукъду, алай а ол ажымсыз керекли тюйюлдю",
        "tooltip-pt-logout": "Чыгъыу",
+       "tooltip-pt-createaccount": "Ажымсыз керек болмагъанлыкъгъа, тергеу джазыу (аккаунт) къураб системагъа кирирге теджейбиз.",
        "tooltip-ca-talk": "Бетни ичиндегин сюзюу",
        "tooltip-ca-edit": "Бу бетни тюрлендирирге болады. Сакълагъынчы ал къарауну хайырландырыгъыз.",
        "tooltip-ca-addsection": "Джангы бёлюм къура",
index b63de8d..d8843b1 100644 (file)
        "no-null-revision": "Mer kunnte kein onveränderte neue Väsjohn vun dä Sigg „$1“ aanlääje.",
        "badtitle": "Verkihrte Üvverschreff",
        "badtitletext": "De Üvverschreff es esu nit en Odenung. Et muss jet dren stonn.\nEt künnt sin, dat ein vun de speziell Zeiche dren steiht,\nwat en Üvverschrefte nit erlaub es.\nEt künnt ussinn, wie ene InterWikiLink,\ndat jeiht ävver nit.\nMuss De repareere.",
+       "title-invalid-empty": "De jewönschter Övverschrevv vun dä Sigg es läddesch, udder et es blohs e Appachtemang aam Aanfang dren.",
+       "title-invalid-interwiki": "En dä Övverschrevv es ene Engerwikkilengk dren.",
+       "title-invalid-leading-colon": "En dä jewönschter Övverschrevv för di Sigg es ene onjöllteje Dubbelpungk aam Aanfang dren.",
        "perfcached": "Di Daate heh noh kumme usem Zweschespeicher (cache) un künnte nit mieh janz de allerneuste sin.\n{{PLURAL:$1|Bloß ein Antwoot es|Nit mieh wi $1 Antwoote sin|Kein Antwoot es}} doh faßjehallde un ze han.",
        "perfcachedts": "De Daate heenoh kumme usem Zweschespeicher (<i lang=\"en\">cache</i>) un woodte aam $2 öm $3 opjenumme. Se künnte nit janz de allerneuste sin.\n{{PLURAL:$4|Bloß ein Antwoot es|Nit mieh wi $4 Antwoote sind|Kein Antwoot es}} doh ze han.",
        "querypage-no-updates": "'''Heh die Sigg weed nit mieh op ene neue Stand jebraat.'''",
        "import-interwiki-history": "All de Versione vun dä Sigg heh kopeere",
        "import-interwiki-templates": "All Schablone metnämme",
        "import-interwiki-submit": "Huhlade!",
-       "import-interwiki-namespace": "Dun de Sigge emporteere en dat Appachtemeng:",
-       "import-interwiki-rootpage": "De Aanfangssigg (kann läddesch bliive):",
+       "import-mapping-default": "Aan de schtanndattmähßeje Pläz emmpottehre:",
+       "import-mapping-namespace": "En heh dat Appachtemang emmpotehre:",
+       "import-mapping-subpage": "Als Ongersigge vun heh dä emmpottehre:",
        "import-upload-filename": "Dä Name fun dä Dattei:",
        "import-comment": "Jrond:",
        "importtext": "Dun de Daate met däm „[[Special:Export|Export]]“ vun doh vun enem Wiki Exporteere un - etwa bei Dir om Rechner - avspeichere, un dann heh wider huhlade.",
        "tags-edit-reason": "Jrond:",
        "tags-edit-revision-submit": "Maach Änderongea an heh dä {{PLURAL:$1|Väsjohn|Väsjohne|kein Väsjohne}}",
        "tags-edit-logentry-submit": "Maach Änderongea an {{PLURAL:$1|heh däm Enndraach|heh dä Enndrähsch|keine Enndrähch}} em Logbohch",
-       "tags-edit-success": "<strong>De Änderuoge sin jemaat.</strong>",
-       "tags-edit-failure": "<strong>De jewollte Änderonge lehße sesch nit maache:</strong>\n$1",
+       "tags-edit-success": "De Änderuoge sin jemaat.",
+       "tags-edit-failure": "De jewollte Änderonge lehße sesch nit maache:\n$1",
        "tags-edit-nooldid-title": "Onjöltijje Väsjohn för et Zihl",
        "tags-edit-nooldid-text": "De Väsjohn derför wohd nit aanjejovve udder et jit se nit.",
        "tags-edit-none-selected": "Söhk winneschßdens ein Makehrong uß för derbei ze donn udder fott ze nämme.",
index f970484..399c403 100644 (file)
@@ -14,7 +14,8 @@
                        "The Evil IP address",
                        "Welathêja",
                        "아라",
-                       "Bikarhêner"
+                       "Bikarhêner",
+                       "Uygar"
                ]
        },
        "tog-underline": "Xetekê di bin girêdanê de çêke:",
        "tog-extendwatchlist": "Lîsteya şopandinê berfireh bike ji bo dîtina hemû guherandinan, ne tenê yên nû",
        "tog-usenewrc": "Weşandina zêdetir (JavaScript pêwîst e)",
        "tog-numberheadings": "Sernavan otomatîk bihejmêre",
-       "tog-showtoolbar": "Tiştên guherandinê bibîne (JavaScript bibîne)",
-       "tog-editondblclick": "Rûpelan bi du klîkan biguherîne (Java Script gireke)",
-       "tog-editsectiononrightclick": "Beşekê bi rast-klîkekê biguherîne (JavaScript gireke)",
-       "tog-watchcreations": "Rûpelên min çêkirin, têxe nav lîsteya min a şopandinê",
-       "tog-watchdefault": "Rûpelên min guhertin, têxe nav lîsteya min a şopandinê",
+       "tog-showtoolbar": "Çoyê sererastkirinê nîşan bide",
+       "tog-editondblclick": "Rûpelan bi du klîkan biguherîne",
+       "tog-editsectiononrightclick": "Beşekê bi rast-klîkekê biguherîne",
+       "tog-watchcreations": "Rûpelên min çêkirin û dosyeyên min barkirin, têxe nav lîsteya min a şopandinê",
+       "tog-watchdefault": "Rûpelên min guhertin û dosyeyên min barkirin, têxe nav lîsteya min a şopandinê",
        "tog-watchmoves": "Rûpelên min navê wan guhertin, têxe nav lîsteya min a şopandinê",
-       "tog-watchdeletion": "Rûpelên min jêbirin, têxe nav lîsteya min a şopandinê",
+       "tog-watchdeletion": "Rûpel û dosyeyên min jêbirin, têxe nav lîsteya min a şopandinê",
        "tog-minordefault": "Her guhertinekê weke guhertineke biçûk nîşan bide",
        "tog-previewontop": "Pêşdîtina gotarê li jorî cihê guherandinê nîşan bide",
        "tog-previewonfirst": "Li cem guherandinê hertim yekemîn pêşdîtinê nîşan bide",
-       "tog-enotifwatchlistpages": "Heke rûpeleke ez dişopînim hate guhertin ji min re E-nameyekê bişîne",
+       "tog-enotifwatchlistpages": "Heke rûpel an dosyeyek ez dişopînim were guhertin ji min re e-nameyekê bişîne",
        "tog-enotifusertalkpages": "Dema rûpela min a Gotûbêjê hate guhertin e-nameyekê ji min re bişîne",
        "tog-enotifminoredits": "Ji bo guhertinên biçûk jî E-nameyekê ji min re bişîne",
        "tog-enotifrevealaddr": "Navnîşana e-nameya min di agahdariyên e-nameyan de nîşan bide",
        "tog-shownumberswatching": "Nîşan bide, çiqas bikarhêner dişopînin",
        "tog-oldsig": "Pêşdîtina îmzeya heye:",
        "tog-fancysig": "Di îmzeyê de girêdana otomatîk a bikarhêner betal bike",
-       "tog-uselivepreview": "Pêşdîtina \"zindî\" bi kar bîne (JavaScript pêwîst e) (ceribandinî)",
+       "tog-uselivepreview": "Pêşdîtina \"zindî\" bi kar bîne",
        "tog-forceeditsummary": "Hinga kurteyeke vala hate tomarkirin min agahdar bike",
        "tog-watchlisthideown": "Guherandinên min ji lîsteya şopandinê veşêre",
        "tog-watchlisthidebots": "Guherandinên bot'an ji lîsteya şopandinê veşêre",
        "permalink": "Girêdana daîmî",
        "print": "Çap",
        "view": "Bibîne",
+       "view-foreign": "$1 nîşan bide",
        "edit": "Biguherîne",
        "create": "Biafirîne",
        "editthispage": "Vê rûpelê biguherîne",
        "otherlanguages": "Bi zimanên din",
        "redirectedfrom": "(Ji $1 hate beralîkirin)",
        "redirectpagesub": "Rûpelê beralî bike",
+       "redirectto": "Beralîye vir bike:",
        "lastmodifiedat": "Ev rûpel cara dawî di $2, $1 de hate guherandin.",
        "viewcount": "Ev rûpel {{PLURAL:$1|carekê|caran}} tê xwestin.",
        "protectedpage": "Rûpela parastî",
        "jumpto": "Here cem:",
        "jumptonavigation": "navîgasyon",
        "jumptosearch": "lêgerîn",
-       "view-pool-error": "Bibore, server niha zêde barkirî ne. Gelek bikarhêner niha hewl didin ku vê rûpelê bibînin. Ji kerema xwe kêlîkekê bisekine, berî ku tu dîsa hewl bidî rûpelê bibînî.",
+       "view-pool-error": "Bibore, server niha zêde barkirî ne. Gelek bikarhêner niha hewl didin ku vê rûpelê bibînin. Ji kerema xwe kêlîkekê bisekine, berî ku tu dîsa hewl bidî rûpelê bibînî.\n\n$1",
        "pool-errorunknown": "Çewtiyeke nenas",
+       "poolcounter-usage-error": "Çewtîyê bikaranînê: $1",
        "aboutsite": "Der barê {{SITENAME}} de",
        "aboutpage": "Project:Der barê",
        "copyright": "Naverok di $1 de derbasdar e.",
        "nospecialpagetext": "<strong>Rûpela taybet a te xwestî tune ye.</strong>\n\nHemû rûpelên taybet dikarin di [[Special:SpecialPages|lîsteya rûpelên taybet]] de werin dîtin.",
        "error": "Çewtî",
        "databaseerror": "Çewtiya bingeha daneyan",
+       "databaseerror-query": "Pirs: $1",
        "databaseerror-error": "Çewtî:$1",
        "laggedslavemode": "'''Zanibe:''' Dibe ku di vê rûpelê de rojanekirinên dawî nîn bin.",
        "readonly": "Bingeha daneyan hatiye girtin",
        "formerror": "Çewtî: Ew nivîs pêk nehat.",
        "badarticleerror": "Ev çalakî di vê rûpelê de nabe.",
        "cannotdelete": "Ev rûpel an wêne nikare were jêbirin. Dibe ku kesekî din ev rûpel jêbiribe.",
+       "cannotdelete-title": "Rûpela \"$1\" nikare bê jêbirin",
        "badtitle": "Sernivîsa nebaş",
        "badtitletext": "Sernavê rûpelê yê xwestî ne derbasdar, vala an jî ne xwediyê girêdaneke rast e.\nDibe ku di sernavê de karakterên nayên bikaranîn hatibin nivîsandin.",
+       "title-invalid-interwiki": "Sernav girêdaneka înterwikiyê dihewîne",
        "perfcached": "Ev dane hatine veşartin û belkî ne rojane bin. A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.",
        "perfcachedts": "Ev dane hatiye veşartin û cara paşîn $1 hatiye rojanekirin. A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.",
        "querypage-no-updates": "Fonksiyona rojanekirinê ya vê rûpelê hatiye sekinandin. Daneyên vir nayên rojanekirin.",
        "editinginterface": "'''Hişyarî:''' Tu rûpeleke ku di Wîkîpediya de ji bo sîstemê girîng e diguherînî. Guherandinên di vê rûpelê de wê ji aliyê hemû bikarhêneran ve werin dîtin. Ji bo wergerê ji kerema xwe di [//translatewiki.net/wiki/Main_Page?setlang=ku-latn translatewiki.net] de bixebite, projeya MediaWiki.",
        "cascadeprotected": "Ev rûpel hatiye parastin ji ber guherandinê, ji ber ku ev rûpela di {{PLURAL:$1|vê rûpelê|van rûpelan da}} tê bikaranîn:\n$2",
        "namespaceprotected": "Destûra te ji bo guhertina vê rûpelê '''$1''' di valahiya nav de nîne.",
+       "customjsprotected": "Destûra te tune ye ku tu vê rûpela JavaScriptê biguherînî ji ber ku ew eyarên kesane yên bikarhênerên din dihewîne.",
+       "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.",
        "virus-unknownscanner": "Antîvîrusa nenas:",
        "userlogin-yourpassword-ph": "Şîfreya xwe binivîse",
        "createacct-yourpassword-ph": "Şîfreya xwe binivîse",
        "yourpasswordagain": "Şîfreyê dîsa binivîse:",
+       "createacct-yourpasswordagain": "Şîfreye bipejirîne",
        "createacct-yourpasswordagain-ph": "Şîfreyê ji nû ve têkeve",
        "remembermypassword": "Şifreya min di her têketina min de bîne bîra xwe (herî zêde $1 {{PLURAL:$1|rojekê|rojan}})",
        "userlogin-remembermypassword": "Min têketî bihêle",
        "createacct-emailoptional": "E-name",
        "createacct-email-ph": "E-nameya xwe binivîse",
        "createacct-another-email-ph": "E-nameya xwe têkeve",
-       "createaccountmail": "Use a temporary random password and send it to the email address specified below",
+       "createaccountmail": "Şîfreyek ji bo ji bo demeke kin bikarbînin û ji navnîşana hatiye diyarkirin re e-nameyek bişînin.",
        "createacct-realname": "Navê te ya rast (Ko tu bixwazi bikeve, pêdivî nîne)",
        "createaccountreason": "Sedem:",
        "createacct-reason": "Sedem",
+       "createacct-reason-ph": "Çima hesabek din çedikîy",
+       "createacct-captcha": "Kontrola asayîşê",
        "createacct-imgcaptcha-ph": "Nivîsa ku tu li jor dibînî binivîse",
        "createacct-submit": "Hesabê xwe biafirîne",
+       "createacct-another-submit": "Hesabek din çêke",
+       "createacct-benefit-heading": "{{SITENAME}} ji alî mirovên wek te tên çêkirin.",
+       "createacct-benefit-body1": "{{PLURAL:$1|guhertin}}",
        "createacct-benefit-body2": "{{PLURAL:$1|rûpel}}",
        "badretype": "Her du şîfreyên ku te nivîsîn li hevdu nayên.",
        "userexists": "Ev navî bikarhênerî berê tê bikaranîn. Xêra xwe navekî din dake.",
        "loginerror": "Çewtiya têketinê",
+       "createacct-error": "Çewtîya çêkirine hesabê",
        "nocookiesnew": "Hesabê bikarhêner hatibû çêkirin, lê te xwe qeyd nekiriye. {{SITENAME}} ji bo qeydkirina bikarhêneran cookie'yan bikartîne. Te bikaranîna cookie'yan girtiye. Xêra xwe cookie'yan qebûl bike, piştre bi navê bikarhêner û şîfreya xwe têkeve.",
        "nocookieslogin": "Ji bo qeydkirina bikarhêneran {{SITENAME}} \"cookies\" bikartîne. Te fonksîyona \"cookies\" girtîye. Xêra xwe kerema xwe \"cookies\" gengaz bike û careke din biceribîne.",
        "noname": "Navê ku te nivîsand derbas nabe.",
        "passwordtooshort": "Şîfreya te netê qebûlkirin: Şîfreya te gereke bi kêmani {{PLURAL:$1|nîşaneka|$1 nîşanên}} xwe hebe û ne wek navî tê wek bikarhêner be.",
        "password-name-match": "Divê şîfreya te ji navê te yê bikaranînê cuda be.",
        "password-login-forbidden": "Bikaranîna vî navî û vê şîfreyê hatiye qedexekirin.",
-       "mailmypassword": "Şîfreyeke nû bi e-mail ji min re bişîne",
+       "mailmypassword": "Şîfreyê nû bike",
        "passwordremindertitle": "Şîfreyeke nû ya ji hesabekî {{SITENAME}} re",
        "passwordremindertext": "Kesek (têbê tu, bi IP'ya $1) xwast ku şîfreyeke nû ji {{SITENAME}} ($4) ji te ra were şandin. Şîfreya nû ya bikarhêner \"$2\" niha \"$3\" e. Tu dikarî niha têkevê û şîfreya xwe biguherînê.\n\nEger kesekî din vê xastinê ji te ra xast ya şîfreya kevin dîsa hate bîrê te, tu dikarê guh nedê vê peyamê û tu dikarê bi şîfreya xwe yê kevin hên karbikê.",
        "noemail": "Navnîşana bikarhênerê/î \"$1\" nehat tomar kirine.",
        "throttled-mailpassword": "Berî {{PLURAL:$1|saetekê|$1 saetan}} şîfreyeke nû hate xwestin. Ji bo şaşbûn bi vê fonksiyonê çênebin, serê her {{PLURAL:$1|saetekê|$1 saetan}} tenê şîfreyeke nû dikare were xwestin.",
        "mailerror": "Şaşbûnek li cem şandina e-nameyekê: $1",
        "acct_creation_throttle_hit": "Bibexşe! Te hesabê bikarhêneriyê $1 vekiriye. Tu êdî nikarî hesabên din vekî.",
-       "emailauthenticated": "Adresa e-nameya te hate naskirin: $1.",
-       "emailnotauthenticated": "Adresa e-nameyan yê te hên nehatîye naskirin. Fonksyonên e-nameyan piştî naskirina te dikarin ji te werin kirin.",
+       "emailauthenticated": "Adresa e-nameya te ji $2 $3ê hate rastandin.",
+       "emailnotauthenticated": "Adresa e-nameya te hêj nehatîye naskirin. Fonksyonên e-nameyan piştî naskirina te dikarin ji te werin kirin.",
        "noemailprefs": "'''Te hên adresa e-nameyan nenivîsandîye''', fonksyonên e-nameyan hên ji te ra ne tên qebûlkirin.",
        "emailconfirmlink": "E-Mail adresê xwe nasbike",
        "invalidemailaddress": "Adresa e-nameyan yê te ne tê qebûlkirin, ji ber ku formata xwe qedexe ye (belkî nîşanên qedexe). Xêra xwe adreseka serrast binivisîne ya vê derê vala bêle.",
+       "cannotchangeemail": "E-nameya hesabê bo vê wîkiyê nikare bê guherandin.",
+       "emaildisabled": "Ev sîte e-nameya nikara bişîne.",
        "accountcreated": "Hesab hate çêkirin",
        "accountcreatedtext": "Hesabê bikarhêneran ji $1 ra hate çêkirin.",
        "createaccount-title": "Çêkirina hesabekî ji {{SITENAME}}",
        "pt-userlogout": "Derkeve",
        "user-mail-no-addy": "Hewl da e-nameyekê bê navnîşana e-nameyê bişîne",
        "changepassword": "Şîfreyê biguherîne",
-       "resetpass_announce": "Te xwe bi şîfreyekê tomar kiriye ku bi riya e-nameyekê ji te re hatiye şandin.\nJi bo xelaskirina tomarkirinê, divê tu niha şîfreyeke nû binivîsî:",
+       "resetpass_announce": "Ji bo xelaskirina tomarkirinê, divê tu şîfreyeke nû binivîsî.",
        "resetpass_text": "<!-- Nivîsê li vir binivisîne -->",
        "resetpass_header": "Şîfreya hesabê xwe biguherîne",
        "oldpassword": "Şîfreya kevn",
        "newpassword": "Şîfreya nû",
        "retypenew": "Şîfreya nû careke din binîvîse",
        "resetpass_submit": "Şîfreyê pêkbîne û têkeve",
-       "changepassword-success": "Şîfreya te hate guherandin! Niha tu tê qeydkirin...",
+       "changepassword-success": "Guhertine şîfreya te serkeftî bû!",
        "resetpass_forbidden": "Şîfre nikarin werin guhertin",
        "resetpass-submit-loggedin": "Şîfre biguherîne",
        "resetpass-submit-cancel": "Betal bike",
        "passwordreset-text-one": "Ji bo ji nû ve sazkirina şîfreyê vê formê dagire.",
        "passwordreset-legend": "Şîfreyê nû bike",
        "passwordreset-username": "Navê bikarhêner:",
+       "passwordreset-domain": "Domain:",
        "passwordreset-email": "Navnîşana E-nameyê:",
        "passwordreset-emailtitle": "Hûragahiyên hesab li ser {{SITENAME}}",
        "passwordreset-emailelement": "Navê bikarhêner:$1\nŞîfreya niha:$2",
        "changeemail-newemail": "Navnîşana E-nameya nû:",
        "changeemail-none": "(nîne)",
        "changeemail-submit": "E-nameyê biguherîne",
+       "resettokens": "Mifteya jê bibe",
+       "resettokens-legend": "Mifteya jê bibe",
        "bold_sample": "Nivîsa stûr",
        "bold_tip": "Nivîsa stûr",
        "italic_sample": "Nivîsa xwehr (îtalîk)",
        "blockednoreason": "sedem nehatiye gotin",
        "whitelistedittext": "Ji bo guherandina rûpelan, $1 pêwîst e.",
        "confirmedittext": "Tu gireke adrêsa e-nameya xwe nasbikê berî tu rûpelan diguherînê. Xêra xwe adrêsa e-nameya ya xwe di [[Special:Preferences|tercihên xwe]] da binivisîne û nasbike.",
-       "nosuchsectiontitle": "Beşekî wisa tune ye",
+       "nosuchsectiontitle": "Beşek wisa tune ye",
        "nosuchsectiontext": "Te dixast beşekê biguherînê yê tune ye.",
        "loginreqtitle": "Têketin pêwîst e",
        "loginreqlink": "têkeve",
        "updated": "(Hate rojanekirin)",
        "note": "'''Nîşe:'''",
        "previewnote": "'''Ji bîr neke ku ev tenê pêşdîtinek e.'''\nGuhertinên te hê nehatine tomarkirin!",
-       "continue-editing": "Guhertinê bidomîne",
+       "continue-editing": "Here qada sazandinê",
        "editing": "Biguherîne: \"$1\"",
        "creating": "$1 tê çêkirin",
        "editingsection": "Tê guherandin: $1 (beş)",
-       "editingcomment": "$1 (şîrove) tê guherandin.",
+       "editingcomment": "$1 (beşek nû) tê guherandin.",
        "editconflict": "Têkçûna guherandinan: $1",
        "explainconflict": "Ji dema te dest bi guherandinê kir heta niha kesekê/î din ev rûpel guherand.\nLi jor guhertoya heyî tê dîtîn.\nGuherandinên te li jêr tên nîşandan.\nDivê tu wan bikî yek.\nHeke niha tomar bikî, '''bi tenê''' nivîsara qutiya jor wê bê tomarkirin.",
        "yourtext": "Nivîsara te",
        "semiprotectedpagewarning": "'''Hişyarî:''' Ev rûpel tê parastin, lewma tenê bikarhênerên tomarkirî dikarin vê biguherînin.\nGuhertina herî dawî bi referansa li jêr hatiye piştrastkirin:",
        "templatesused": "{{PLURAL:$1|Şablona|Şablonên}} ku li ser vê rûpelê {{PLURAL:$1|tê|tên}} bikaranîn:",
        "templatesusedpreview": "{{PLURAL:$1|Şablona|Şablonên}} di vê pêşdîtinê de {{PLURAL:$1|tê|tên}} bikaranîn:",
-       "templatesusedsection": "Şablonên ku di vê parçeyê de tên bikaranîn:",
+       "templatesusedsection": "{{PLURAL:$1|Şablona ku di vê beşê de tê bikaranîn|Şablonên ku di vê beşê de tên bikaranîn}}:",
        "template-protected": "(tê parastin)",
        "template-semiprotected": "(nîv-parastî)",
        "hiddencategories": "Ev rûpel endamê {{PLURAL:$1|1 kategoriya veşartî|$1 kategoriyên veşartî}} ye:",
        "sectioneditnotsupported-title": "Guhertina beşê nayê piştgirîkirin",
        "sectioneditnotsupported-text": "Guhertina beşê di vê rûpelê de nayê piştgirîkirin.",
-       "permissionserrors": "Çewtiyên destûrê",
+       "permissionserrors": "Çewtiyê destûrê",
        "permissionserrorstext": "Tu nikanê vê tiştî bikê, ji bo {{PLURAL:$1|vê sedemê|van sedeman}}:",
        "permissionserrorstext-withaction": "Mafên te bo $2 tune ye ji bo {{PLURAL:$1|vê sedemê|van sedeman}}:",
        "recreate-moveddeleted-warn": "'''Zanibe: Tu kê rûpelekê çêkê yê niha hate jêbirin!'''\n\nZanibe ku nuhçêkirinê vê rûpelê hêja ye ya na.\nÎnformasyon li ser jêbirinê vê rûpelê li vir e:",
        "log-fulllog": "Tevahiya wê bibîne",
        "edit-conflict": "Têkçûna guherandinan.",
        "edit-no-change": "Guherandina te nehate hesibandin, ji ber ku guherandinên nivîsê tune bûn.",
+       "postedit-confirmation-created": "Ev rûpel hate çêkirin.",
+       "postedit-confirmation-restored": "Ev rûpel hate restorekirin.",
        "postedit-confirmation-saved": "Guhertina te hate tomarkirin.",
        "edit-already-exists": "Nikarî rûpeleka nuh çêke.\nEw berê heye.",
+       "content-model-wikitext": "wîkînivîs",
+       "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "content-json-empty-object": "Objeya vala",
+       "content-json-empty-array": "Rêza vala",
        "undo-success": "Ev guherandin dikare were şûndekirin. Ji kerema xwe ferqa piştî tomarkirinê bibîne, bê ka tu dixwazî vê guhertoyê tomar bikî an na. Ger te şaşîtiyek kir, ji kerema xwe derkeve.",
        "undo-failure": "Ev guhertin ji ber guherandinên piştî wê re nikare were şûndekirin.",
        "undo-summary": "Guhertoya $1 ya [[Special:Contributions/$2|$2]] ([[User talk:$2|gotûbêj]]) şûnde kir",
        "histlegend": "Rênîşan: ({{int:cur}}) = cudahiya nav vê û versiyona niha, ({{int:last}}) = cudahiya nav vê û ya berî vê, '''{{int:minoreditletter}}''' = guhertina biçûk",
        "history-fieldset-title": "Li dîrokê bigere",
        "history-show-deleted": "Tenê yên jêbirî",
-       "histfirst": "Kevintirîn",
-       "histlast": "Nûtirîn",
+       "histfirst": "kevintirîn",
+       "histlast": "nûtirîn",
        "historysize": "({{PLURAL:$1|1 byte|$1 bytes}})",
        "historyempty": "(vala)",
        "history-feed-title": "Dîroka guhertoyê",
        "revisiondelete": "Guhertoyan jê bibe/nebe",
        "revdelete-show-file-submit": "Erê",
        "revdelete-legend": "Guherandina qebûlkirina dîtinê",
-       "revdelete-hide-text": "Nivîsa guhertoyê veşêre",
+       "revdelete-hide-text": "Nivîsa guhertoyê",
        "revdelete-hide-image": "Naveroka pelê veşêre",
-       "revdelete-hide-name": "Çalakî û hedefê veşêre",
-       "revdelete-hide-comment": "Nivîsandinê kurte yê guherandinê veşêre",
-       "revdelete-hide-user": "Navê bikarhêner/IP'yê veşêre",
+       "revdelete-hide-name": "Çalakî û parametreya veşêre",
+       "revdelete-hide-comment": "Kurteya guherandinê",
+       "revdelete-hide-user": "Navê edîtorê/Navnîşanê IP'ye",
        "revdelete-hide-restricted": "Ev qebûlkirinan ji koordînatoran ra ye jî û ev rûpela tê girtin",
        "revdelete-radio-same": "(neguherîne)",
-       "revdelete-radio-set": "Erê",
-       "revdelete-radio-unset": "Na",
+       "revdelete-radio-set": "Veşartî",
+       "revdelete-radio-unset": "Xuya",
        "revdelete-suppress": "Sedema jêbirinê ji rêveberan re jî veşêre",
        "revdelete-log": "Sedem",
        "revdel-restore": "xuyakirinê biguherîne",
        "compareselectedversions": "Guhertoyan bide ber hev",
        "showhideselectedversions": "Revîzyonên bijartî nîşan bide/veşêre",
        "editundo": "betal bike",
+       "diff-empty": "(Cudahî nîne)",
        "searchresults": "Encamên lêgerînê",
        "searchresults-title": "Encamên lêgerrînê bo \"$1\"",
        "titlematches": "Dîtinên di sernivîsên gotaran de",
        "searchprofile-advanced": "Pêşketî",
        "searchprofile-articles-tooltip": "Di $1 da lêbigere",
        "searchprofile-images-tooltip": "Li pelan bigere",
+       "searchprofile-everything-tooltip": "Di hemû naverokada bigere (tevî gotûbêja)",
        "search-result-size": "$1 ({{PLURAL:$2|peyvek|$2 peyv}})",
        "search-redirect": "(beralîkirin $1)",
        "search-section": "(beş $1)",
+       "search-category": "(kategorî $1)",
+       "search-file-match": "(bi naveroka dosye re lê te)",
        "search-suggest": "Gelo mebesta te ev bû: $1",
        "search-interwiki-caption": "Projeyên hevçeng",
        "search-interwiki-default": "$1 encam:",
        "search-external": "Lêgerrîna derveyî",
        "searchdisabled": "<p>Tu dikarî li {{SITENAME}} bi Google an Yahoo! bigere. Têbînî: Dibe ku encamen lêgerîne ne yên herî nû ne.\n</p>",
        "preferences": "Tercîhên min",
-       "mypreferences": "Tercihên min",
+       "mypreferences": "Hevyazên min",
        "prefs-edits": "Hejmarê guherandinan:",
        "prefs-skin": "Pêste",
        "skin-preview": "Pêşdîtin",
        "prefs-personal": "Profîla bikarhêner",
        "prefs-rc": "Guherandinên dawî",
        "prefs-watchlist": "Lîsteya şopandinê",
+       "prefs-editwatchlist": "Lîsteya şopandinê biguherîne",
        "prefs-watchlist-days-max": "Maximum $1 {{PLURAL:$1|day|days}}",
        "prefs-watchlist-edits-max": "Hejmara mezintirîn: 1000",
        "prefs-misc": "Eyarên cuda",
        "prefs-email": "Vebijarkên E-nameyê",
        "prefs-rendering": "Rû",
        "saveprefs": "Tercîhan tomar bike",
-       "restoreprefs": "Hemû eyarên berê ji nû ve ava bike",
+       "restoreprefs": "Hemû eyarên berê ji nû ve ava bike (di hemû beşa da)",
        "prefs-editing": "Guherandin",
        "rows": "Rêz",
        "columns": "Stûn:",
        "timezoneregion-indian": "Okyanûsa Hindî",
        "timezoneregion-pacific": "Okyanûsa Mezin",
        "allowemail": "Ji bikarhênerên dî e-nameyan qebûl bike",
-       "prefs-searchoptions": "Tercihên lêgerînê",
+       "prefs-searchoptions": "Lê bigere",
        "prefs-namespaces": "Valahiyên nav",
        "default": "asayî",
        "prefs-files": "Dosya",
        "prefs-emailconfirm-label": "Piştrastkirina E-nameyê:",
        "youremail": "E-nameya te:",
        "username": "{{GENDER:$1|Navê bikarhêner}}:",
-       "prefs-memberingroups": "Endamê/a {{PLURAL:$1|komê|koman}}:",
+       "prefs-memberingroups": "{{GENDER:$2|Endamê|Endama|Endamê/a}} {{PLURAL:$1|komê|koman}}:",
        "prefs-registration": "Dema xweqeydkirinê:",
        "yourrealname": "Navê te yê rast:",
        "yourlanguage": "Ziman",
        "badsig": "Îmzeya ne derbasdar! Li HTML binêre ka sedema şaşbûnê çiye.",
        "badsiglength": "Navê te zêde dirêj e; pêwîst e di bin {{PLURAL:$1|nîşanekê|nîşanan}} de be.",
        "yourgender": "Zayend:",
-       "gender-unknown": "Veşartî",
-       "gender-male": "Nêr",
+       "gender-unknown": "Ez negotin çêtir dibinim",
+       "gender-male": "Ew rûpelên wîkiyê diguherîne",
        "gender-female": "Mê",
        "email": "E-name",
        "prefs-help-realname": "Navê rastî ne pêwîst e. Heke tu navê xwe binivisî, ewê ji bo karê te were bikaranîn.",
        "prefs-signature": "Îmze",
        "prefs-dateformat": "Formata dîrokê",
        "prefs-timeoffset": "Cudahiya demê",
-       "prefs-advancedediting": "Vebijarkên berfireh",
+       "prefs-advancedediting": "Vebijarkên gelemperî",
+       "prefs-editor": "Edîtor",
+       "prefs-preview": "Pêşdîtin",
        "prefs-advancedrc": "Vebijarkên berfireh",
        "prefs-advancedrendering": "Vebijarkên berfireh",
        "prefs-advancedsearchoptions": "Vebijarkên berfireh",
        "group-sysop": "Rêveber",
        "group-bureaucrat": "Burokrat",
        "group-all": "(hemû)",
-       "group-user-member": "Bikarhêner",
+       "group-user-member": "{{GENDER:$1|bikarhêner}}",
        "group-bot-member": "{{GENDER:$1|bot}}",
        "group-sysop-member": "{{GENDER:$1|rêveber}}",
        "group-bureaucrat-member": "{{GENDER:$1|burokrat}}",
        "action-userrights": "hemû mafên bikarhêneran biguherîne",
        "action-userrights-interwiki": "mafê bikarhênerên li ser wîkiyên din biguherîne",
        "action-sendemail": "e-nameyan bişîne",
+       "action-editmywatchlist": "lîsteya şopandinê biguherîne",
+       "action-viewmywatchlist": "lîsteya xwe ya şopandinê nîşan bide",
+       "action-viewmyprivateinfo": "agahîyên xwe ye taybet nîşan bide",
+       "action-editmyprivateinfo": "agahîyên xwe ên taybet biguherîne",
        "nchanges": "$1 {{PLURAL:$1|guherandinek|guherandin}}",
        "enhancedrc-history": "dîrok",
        "recentchanges": "Guherandinên dawî",
        "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-newpage": "{{int:recentchanges-label-newpage}} (here [[Taybet:Rûpelên_nû|lîsteya rûpelên nû]])",
+       "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",
        "rcshowhideminor-show": "nîşan bide",
        "rcshowhideanons-show": "nîşan bide",
        "rcshowhideanons-hide": "veşêre",
        "rcshowhidepatr": "Guherandinên kontrolkirî $1",
+       "rcshowhidepatr-show": "Nîşan bide",
+       "rcshowhidepatr-hide": "Veşêre",
        "rcshowhidemine": "Guherandinên min $1",
        "rcshowhidemine-show": "nîşan bide",
        "rcshowhidemine-hide": "veşêre",
        "number_of_watching_users_pageview": "[{{PLURAL:$1|bikarhênerek|$1 bikarhêner}} vê rûpelê {{PLURAL:$1|dişopîne|dişopînin}}.]",
        "rc_categories_any": "Hîç",
        "newsectionsummary": "/* $1 */ beşeke nû",
-       "rc-enhanced-expand": "Hûragahiyan nîşan bide (JavaScript pêdivî ye)",
+       "rc-enhanced-expand": "Hûragahiyan nîşan bide",
        "rc-enhanced-hide": "Kitûmatan veşêre",
        "recentchangeslinked": "Guherandinên têkilîdar",
        "recentchangeslinked-feed": "Guherandinên peywend",
        "recentchangeslinked-toolbox": "Guherandinên peywend",
-       "recentchangeslinked-summary": "Ev rûpela taybetî guherandinên dawî ji rûpelên lînkkirî nîşandide. Ew rûpel yê di lîsteya te ya şopandinê da ne bi nivîsa '''estûr''' tên nîşandan.",
+       "recentchangeslinked-summary": "Ev lîste, ji rûpela destnîşankirî (an jî endamên destnîşankirî) re rûpelê lîsteya guherandinên dawî ji rûpelên lînkkirî nîşandide. Ew rûpel yê di [[Special:Watchlist|lîsteya te ya şopandinê]] da bi nivîsa <strong>estûr<strong> tên nîşandan.",
        "recentchangeslinked-page": "Navê rûpelê",
        "upload": "Wêneyekî bar bike",
        "uploadbtn": "Wêneyekî bar bike",
        "reuploaddesc": "Barkirinê biskîne û dîsa here rûpela barkirinê.",
        "uploadnologin": "Xwe tomar nekir",
-       "uploadnologintext": "Ji bo barkirina wêneyan divê ku tu [[Special:UserLogin|têkevî]].",
+       "uploadnologintext": "Ji kerema xwe re ji bo barkirina dosyeyan $1 dake.",
        "uploaderror": "Çewtiya barkirinê",
        "upload-recreate-warning": "'''Agahdarî: Peleke bi vî navî hatiye jêbirin an jî raguhestin.'''",
        "uploadtext": "Berê tu wêneyên nû bar bikî, ji bo dîtin an vedîtina wêneyên ku ji xwe hene binêre: [[Special:FileList|lîsteya wêneyên barkirî]]. Herwisa wêneyên ku hatine barkirin an jî jê birin li vir dikarî bibînî: [[Special:Log/upload|reşahîya barkirîyan]].\n\nYek ji lînkên jêr ji bo bikarhînana wêne an file'ê di gotarê de bikar bihîne:\n'''<nowiki>[[</nowiki>{{ns:file}}:File.jpg<nowiki>]]</nowiki>''',\n'''<nowiki>[[</nowiki>{{ns:file}}:File.png|alt text<nowiki>]]</nowiki>''',\nanjî ji bo file'ên dengî '''<nowiki>[[</nowiki>{{ns:media}}:File.ogg<nowiki>]]</nowiki>'''",
        "upload-permitted": "Cureyên pelan yên tên qebûlkirin: $1.",
        "upload-preferred": "Cureyên pelan yên tên xwestin: $1.",
-       "upload-prohibited": "Cureyên pelan yên qedexekirî: $1.",
+       "upload-prohibited": "{{PLURAL:$2|Cureyê|Cureyên}} pelan yên qedexekirî: $1.",
        "uploadlogpage": "Barkirina belgeyan",
        "filename": "Navê pelê",
        "filedesc": "Danasîn",
        "filetype-unwanted-type": "'''\".$1\"''' formatekî nexastî ye.\nFormat {{PLURAL:$3|yê tê|yên tên}} qebûlkirin {{PLURAL:$3|ev e|ev in}}: $2.",
        "filetype-banned-type": "'''\".$1\"''' formatekî qedexe ye.\nFormat {{PLURAL:$3|yê tê|yên tên}} xwestin {{PLURAL:$3|ev e|ev in}}: $2.",
        "filetype-missing": "Piştnavê pelê tune (wek \".jpg\").",
+       "filename-tooshort": "Navê dosyeye zêde kurte.",
+       "filetype-banned": "Dosyeyên bi vê cureye hatîye qedexekirin.",
+       "verification-error": "Ev dosye, rastandina dosyeye derbas nekir.",
        "unknown-error": "Çewtiyeke nenas pêk hat.",
        "large-file": "Mezinbûna pelê bila ji $1 ne mezintir be; ev pel $2 e.",
        "emptyfile": "Data'ya barkirî vala ye. Sedemê valabûnê belkî şaşnivîsek di navê data'yê da ye. Xêra xwe seke, ku tu rast dixazê vê data'yê barbikê.",
        "upload-failure-subj": "Pirsgirêka barkirinê",
        "upload-warning-subj": "Hişyariya barkirinê",
        "upload-file-error": "Çewtiya navxweyî",
+       "uploadstash-refresh": "Lîsteya dosyeya nû bike",
+       "img-auth-accessdenied": "Gihandin hate astengkirin",
+       "img-auth-nofile": "Dosyeye \"$1\" tine.",
+       "img-auth-streaming": "\"$1\" te lîstandin.",
+       "http-invalid-url": "URL'ya nederbasdar: $1",
+       "http-invalid-scheme": "URL'yên bi şemaye \"$1\" naye piştgirîkirin.",
+       "http-request-error": "Xwestina HTTP ji ber çevtîyek nenas bi ser neket.",
+       "http-read-error": "Çewtîya xwendina HTTP.",
+       "http-timed-out": "Xwestina HTTP demborî bû.",
+       "http-curl-error": "Çewtîyek di hildana URL'de: $1",
        "license": "Lîsans:",
        "license-header": "Lîsans",
        "nolicense": "Ya hilbijartî nîne",
        "license-nopreview": "Pêşdîtin ne gengaz e.",
+       "listfiles-delete": "jê bibe",
        "listfiles_search_for": "Li navê wêneyî bigere:",
        "imgfile": "dosye",
        "listfiles": "Lîsteya wêneyan",
        "filehist-filesize": "Mezinahiya pelê",
        "filehist-comment": "Şîrove",
        "imagelinks": "Bikaranîna pelê",
-       "linkstoimage": "Di van rûpelan de lînkek ji vî wêneyî re heye:",
+       "linkstoimage": "Di van rûpelan de {{PLURAL:$1|page links|$1  lînkek}} ji vî dosyeye re heye:",
        "nolinkstoimage": "Rûpelekî ku ji vî wêneyî re girêdankê çêdike nîne.",
        "linkstoimage-redirect": "$1 (beralîkirina pelê) $2",
        "sharedupload-desc-here": "Ev pel ji $1 û dibe ku ji aliyê projeyên din ve jî hatibe bikaranîn.\nAgahdariya li ser [$2 rûpela danasîna pelê] li jêr tê nîşandan.",
        "filedelete-reason-otherlist": "Sedemên din",
        "filedelete-reason-dropdown": "*Sedemên jêbirina wêneyan\n** wêneyekî nebaş e\n** kopiyek e",
        "filedelete-edit-reasonlist": "Sedemên jêbirinê biguherîne",
-       "mimesearch": "Gerrîna li MIME",
+       "mimesearch": "Lêgerîna li MIME",
        "download": "daxistin",
        "unwatchedpages": "Rûpelên nayên şopandin",
        "listredirects": "Lîsteya beralîkirinan",
        "mostlinked": "Rûpelên bi bêhtirîn girêdan",
        "mostlinkedcategories": "Kategoriyên bi bêhtirîn girêdan",
        "mostcategories": "Rûpelên bi pir kategorî",
+       "mostinterwikis": "Rûpelên bi bêhtirîn girêdanên înterwîkiyê",
        "prefixindex": "Hemû rûpelên bi pêşbendik",
        "shortpages": "Rûpelên kurt",
        "longpages": "Rûpelên dirêj",
        "deadendpages": "Rûpelên bê dergeh",
        "protectedpages": "Rûpelên parastî",
+       "protectedpages-noredirect": "Beralîkirinan veşêre",
+       "protectedpagesempty": "Niha ti rûpelên ku bi vê parametreyê parastî ne, tine ne.",
+       "protectedpages-page": "Rûpel",
+       "protectedpages-reason": "Sedem",
+       "protectedpages-unknown-timestamp": "Nenas",
+       "protectedpages-unknown-performer": "Bikarhênera nenas",
        "protectedtitles": "Sernavên parastî",
        "listusers": "Lîsteya bikarhêneran",
        "listusers-editsonly": "Tenê bikarhênerên bi guherrandinan nîşan bide",
        "all-logs-page": "Hemû têketin",
        "alllogstext": "Hemû têketinên {{SITENAME}} li jêr tên nîşandan.\nTu dikarî ji xwe re têketinekê hilbijêrî, navê bikarhêneriyê an navê rûpelekê binivîse û agahiyan li ser wê bibîne.",
        "logempty": "Tiştek di vir de nîne.",
-       "log-title-wildcard": "Li sernavan bigere, yê bi vê destpêdikin",
+       "log-title-wildcard": "Li sernavên bi vê dest pê dikin bigere",
        "allpages": "Hemû rûpel",
        "nextpage": "Rûpela pêşî ($1)",
        "prevpage": "Rûpelê berî vê ($1)",
        "listgrouprights-members": "(lîsteya endaman)",
        "listgrouprights-addgroup-all": "Hemû koman tevlî bike",
        "listgrouprights-removegroup-all": "Hemû koman jê bibe",
+       "trackingcategories-name": "Navê peyamê",
        "mailnologin": "Navnîşanê neşîne",
        "mailnologintext": "Te gireke xwe [[Special:UserLogin|qeydbikê]] û adrêsa e-nameyan di [[Special:Preferences|tercihên xwe]] da nivîsandibe ji bo şandina e-nameyan ji bikarhênerên din ra.",
        "emailuser": "Ji bikarhêner re e-name bişîne",
        "delete-toobig": "Dîroka vê rûpelê pir mezin e, zêdetirî $1 guherandin. Jêbirina van rûpelan hatîye sînorkirin, ji bo pir şaşbûn (error) di {{SITENAME}} da çênebin.",
        "delete-warning-toobig": "Dîroka vê rûpelê pir mezin e, zêdetirî $1 guherandin. Jêbirina van rûpelan dikarin şaşbûnan di database'ê {{SITENAME}} da çêkin; zandibe tu çi dikê!",
        "rollbacklink": "bizîvirîne pêş",
+       "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''\".",
        "invert": "Hemûyan bibîne",
        "namespace_association": "Navê têkilîdar",
        "blanknamespace": "(Sereke)",
-       "contributions": "Beşdariyên bikarhêner",
+       "contributions": "Beşdariyên {{GENDER:$1|bikarhêner}}",
        "contributions-title": "Beşdariyên ji bo $1",
        "mycontris": "Beşdariyên min",
        "contribsub2": "Ji bo $1 ($2)",
-       "uctop": "(ser)",
+       "uctop": "(rojane)",
        "month": "Ji meha (û zûtir):",
        "year": "Ji sala (û zûtir):",
        "sp-contributions-newbies": "Tenê beşdariyên bikarhênerên nû nîşan bide",
        "unblockip": "IP'yekê dîsa veke",
        "unblockiptext": "Nivîsara jêr bikarwîne ji bo qebûlkirina nivîsandinê bikarhênerekî ya IP'yeka berê astengkirî.",
        "ipusubmit": "Vê astengkirinê rake",
-       "unblocked": "[[User:$1|$1]] niha vê astengkirinê ye",
+       "unblocked": "[[User:$1|$1]] hatiye astengkirin.",
        "unblocked-range": "$1 hat astengkirin.",
        "unblocked-id": "$1 dîsa vê astengkirinê ye",
        "blocklist": "Bikarhênerên astengkirî",
        "allmessages-filter-modified": "Guhertî",
        "allmessages-language": "Ziman",
        "allmessages-filter-submit": "Gotar",
+       "allmessages-filter-translate": "Wergerîne",
        "thumbnail-more": "Mezin bike",
        "filemissing": "Rûpel tune",
        "import": "Rûpelan wîne (import)",
        "importbadinterwiki": "Interwiki-lînkekî xerab",
        "importsuccess": "Împort çêbû!",
        "importlogpage": "Têketina tevlîkirinê",
+       "javascripttest": "JavaScript tê testkirin",
        "tooltip-pt-userpage": "Rûpela min",
-       "tooltip-pt-anonuserpage": "The user page for the ip you",
+       "tooltip-pt-anonuserpage": "Rûpela bikarhênerê ji bo navnîşana ÎP ku tu sererast dikî wekî",
        "tooltip-pt-mytalk": "Gotûbêja min",
        "tooltip-pt-preferences": "Tercîhên min",
        "tooltip-pt-watchlist": "The list of pages you",
        "tooltip-feed-atom": "Atom feed'ên ji bo vê rûpelê",
        "tooltip-t-contributions": "Lîsteya beşdariyên bikarhêner bibîne",
        "tooltip-t-emailuser": "Jê re name bişîne",
+       "tooltip-t-info": "Bêhtir agahî di derbarê vê rûpelê de",
        "tooltip-t-upload": "Wêneyan bar bike",
        "tooltip-t-specialpages": "Lîsteya hemû rûpelên taybetî",
        "tooltip-t-print": "Versiyona çapkirinê ya vê rûpelê",
        "spamprotectiontitle": "Parastina spam",
        "spamprotectiontext": "Rûpela ku tu dixwazî tomar bikî ji ber parastina spamê hate astengkirin.\nJi ber ku girêdaneke derve di wê rûpelê de heye ev pirsgirêk pêk hat.",
        "spamprotectionmatch": "Ev nivîsa parastinê spam vêxist: $1",
-       "pageinfo-header-edits": "Guherandin",
+       "pageinfo-header-basic": "Agahiyên sereke",
+       "pageinfo-header-edits": "Dîrokê biguherîne",
        "pageinfo-header-restrictions": "Parastina rûpelê",
+       "pageinfo-header-properties": "Taybetmendiyên rûpelê",
        "pageinfo-watchers": "Hejmara kesên dişopînin",
        "pageinfo-subpages-name": "Binrûpelên vê rûpelê",
        "pageinfo-edits": "Hejmara guherandinan",
        "pageinfo-redirectsto-info": "agahî",
        "pageinfo-contentpage-yes": "Erê",
        "pageinfo-protect-cascading-yes": "Erê",
+       "pageinfo-category-info": "Agahiyên kategoriyê",
        "pageinfo-category-pages": "hejmara rûpelan",
        "pageinfo-category-subcats": "Hejmara binkategoriyan",
        "markaspatrolleddiff": "Wek serrastkirî nîşan bide",
        "file-info-size": "$1 × $2 pixel, mezinbûnê data: $3, MIME-typ: $4",
        "file-nohires": "Versyonekî jê mezintir tune.",
        "svg-long-desc": "Daneya SVG, mezinbûna rast: $1 × $2 pixel; mezinbûna daneyê: $3",
-       "show-big-image": "Mezînbûn",
+       "show-big-image": "Dosyeya orjînal",
+       "show-big-image-size": "$1 × $2 pixel",
        "newimages": "Pêşangeha wêneyên nû",
        "imagelisttext": "Jêr lîsteyek ji $1 file'an heye, duxrekirin $2.",
        "newimages-summary": "Ev rûpela taybet dosyeyên ku herî dawî hatine barkirin, nîşan dide.",
        "metadata-collapse": "Detayên dirêj veşêre",
        "exif-imagewidth": "Panbûn",
        "exif-imagelength": "Dirêjbûn",
+       "exif-orientation": "Beralîkirin",
        "exif-jpeginterchangeformatlength": "Byte'ên daneya JPEG",
        "exif-imagedescription": "Navê wêne",
        "exif-model": "Modela kamerayê",
+       "exif-software": "Nivîsbarîya tê bikaranîn",
        "exif-artist": "Nûser",
+       "exif-exifversion": "Versiyona exif",
        "exif-pixelydimension": "Firehiya wêne",
        "exif-pixelxdimension": "Dirêjiya wêne",
        "exif-usercomment": "Şîroveyên bikarhêner",
+       "exif-datetimedigitized": "Dema pencekîkirinê",
        "exif-exposuretime-format": "$1 sanî ($2)",
        "exif-brightnessvalue": "Zelalî",
        "exif-flash": "Flaş",
        "exif-disclaimer": "Ferexetname",
        "exif-unknowndate": "Dîroka nayê zanîn",
        "exif-orientation-1": "Normal",
+       "exif-exposureprogram-1": "Manûel",
        "exif-exposureprogram-2": "Programa normal",
        "exif-meteringmode-0": "Nenas",
        "exif-meteringmode-255": "Yên din",
        "confirmemail_loggedin": "Navnîşana te ya E-Nameyê hate qebûlkirin.",
        "confirmemail_body": "Kesek, dibê tu, bi IP adressê $1, xwe li {{SITENAME}} bi vê navnîşana e-name tomar kir (\"$2\") .\n\nEger ev rast qeydkirinê te ye û di dixwazî bikaranîna e-nama ji te ra çêbibe li {{SITENAME}}, li vê lînkê bitikîne:\n\n$3\n\nLê eger ev *ne* tu bû, li lînkê netikîne. Ev e-nameya di rojê $4 da netê qebûlkirin.",
        "scarytranscludefailed": "[Anîna şablona $1 biserneket; biborîne]",
-       "scarytranscludetoolong": "[URL zêde dirêj e; bibore]",
+       "scarytranscludetoolong": "[URL zêde dirêj e]",
        "deletedwhileediting": "'''Hişyarî:''' Piştî te dest bi guherandinê kir ev rûpel hate jêbirin!",
        "confirmrecreate": "Piştî te dest bi guherandinê kir, bikarhêner [[User:$1|$1]] ([[User talk:$1|gotûbêj]]) ev rûpel jê bir. Sedema jêbirinê ev bû:\n: ''$2''\nJi kerema xwe zanibe ku tu bi rastî dixwazî vê rûpelê dîsa çêkî.",
        "recreate": "Dîsa çêke",
        "table_pager_first": "Rûpela pêşîn",
        "table_pager_last": "Rûpela dawî",
        "table_pager_limit_submit": "Here",
-       "autosumm-blank": "Rûpel hate vala kirin",
+       "autosumm-blank": "Rûpel hat valakirin",
        "autosumm-replace": "'$1' ket şûna rûpelê.",
        "autoredircomment": "Ji bo [[$1]] hate beralîkirin",
        "autosumm-new": "Rûpela nû: \"$1\"",
        "version-specialpages": "Rûpelên taybet",
        "version-other": "yên din",
        "version-version": "($1)",
-       "version-license": "Destûr",
+       "version-license": "Lîsansa MediaWiki",
        "version-software-product": "Berhem",
        "version-software-version": "Guherto",
        "version-entrypoints-header-url": "URL",
        "specialpages": "Rûpelên taybet",
        "specialpages-note": "* Rûpelên taybetî ji her kesan ra\n* <strong class=\"mw-specialpagerestricted\">Rûpelên taybetî ji bikarhêneran bi mafên zêdetir ra</strong>",
        "specialpages-group-other": "Rûpelên taybetî yên din",
-       "specialpages-group-login": "Têkeve",
+       "specialpages-group-login": "Têkeve / hesabekî nû çêke",
        "specialpages-group-changes": "Guherandinên dawî û têketin",
        "specialpages-group-media": "Nameyên medyayan û barkirinan",
        "specialpages-group-users": "Bikarhêner û maf",
        "blankpage": "Rûpela vala",
        "tag-filter": "Parzûna [[Special:Tags|nîşankirinê]]:",
        "tag-filter-submit": "Parzûn",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Etîket}}]]: $2)",
        "tags-title": "Nîşankirin",
        "tags-tag": "Tag name",
        "tags-edit": "biguherîne",
        "htmlform-selectorother-other": "Yên din",
        "htmlform-no": "Na",
        "htmlform-yes": "Erê",
-       "logentry-delete-delete": "$1 rûpela $3 jê bir",
+       "logentry-delete-delete": "$1 rûpela $3 {{GENDER:$2|jê bir}}",
        "revdelete-content-hid": "naverok veşartî ye",
        "revdelete-uname-hid": "navê bikarhêneriyê yê veşartî",
-       "logentry-move-move": "$1 navê $3 weke $4 guherand",
+       "logentry-move-move": "$1 rûpela $3 ji $4e re {{GENDER:$2|barkir}}",
        "logentry-move-move-noredirect": "$1 navê $3 guherand û kir $4",
        "logentry-move-move_redir": "$1 navê $3 guherand û kir $4",
        "logentry-newusers-newusers": "$1 hesabekî bikarhêneriyê çêkir",
-       "logentry-newusers-create": "$1 hesabekî bikarhêneriyê çêkir",
+       "logentry-newusers-create": "Hesabe bikarhêneriyê $1 {{GENDER:$2|hate çêkirin}}",
+       "logentry-upload-upload": "$1 {{GENDER:$2|hate barkirin}} $3",
        "rightsnone": "(tune)",
        "revdelete-summary": "kurteyê biguherîne",
        "feedback-back": "Paşve",
index 94f5b4b..17cccc2 100644 (file)
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|a wayas}} an folen $3 dhe $4 heb gasa daskedyans",
        "logentry-move-move_redir": "$1 {{GENDER:$2|a wayas}} an folen $3 dhe $4 dres daskedyans",
        "searchsuggest-search": "Hwilas",
-       "searchsuggest-containing": "ynni..."
+       "searchsuggest-containing": "ynni...",
+       "special-characters-group-latin": "Latin",
+       "special-characters-group-latinextended": "Latin ystynnys",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Arwodhyow",
+       "special-characters-group-greek": "Greka",
+       "special-characters-group-arabic": "Arabek",
+       "special-characters-group-arabicextended": "Arabek ystynnys",
+       "special-characters-group-persian": "Persek",
+       "special-characters-group-hebrew": "Ebrow",
+       "special-characters-group-bangla": "Bengalek",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Sinhala",
+       "special-characters-group-gujarati": "Gujarati",
+       "special-characters-group-thai": "Tay",
+       "special-characters-group-lao": "Laosek",
+       "special-characters-group-khmer": "Khmer"
 }
index 0212208..0a78ffd 100644 (file)
        "import-interwiki-history": "Бул барактын бүткүл өзгөртүү тарыхын көчүрүү",
        "import-interwiki-templates": "Бардык калыптарды камтуу",
        "import-interwiki-submit": "Импорттоо",
-       "import-interwiki-namespace": "Максаттык ат мейкиндиги:",
-       "import-interwiki-rootpage": "Максаттык түпкү барагы (сөзсүз эмес):",
        "import-upload-filename": "Файл аты:",
        "import-comment": "Эскертүү:",
        "importstart": "Барактарды импорттоо...",
index 77734a2..1c48612 100644 (file)
@@ -29,7 +29,7 @@
        "tog-hideminor": "Celare recensiones minores in indice nuper mutatorum",
        "tog-hidepatrolled": "Redactiones censae inter nuper mutatas celandae",
        "tog-newpageshidepatrolled": "Paginae censae inter nouissime creatas celandae",
-       "tog-extendwatchlist": "Indicem paginarum obseruandarum cunctas mutatas praeter nouissimas includere decet",
+       "tog-extendwatchlist": "Extendere indicem paginarum observatarum ut omnes emendationes monstrentur, non solum emendationes recentissimae",
        "tog-usenewrc": "Indice nuper mutatarum excelsa uti",
        "tog-numberheadings": "Subtituli numeris adornandi",
        "tog-showtoolbar": "Affigere trabem redigentem",
        "actions": "Actiones",
        "namespaces": "Spatia nominalia",
        "variants": "Variantes",
+       "navigation-heading": "Tabula navigationis",
        "errorpagetitle": "Erratum",
        "returnto": "Redire ad $1.",
        "tagline": "E {{grammar:ablative|{{SITENAME}}}}",
        "createacct-error": "Error in ratione creanda",
        "createaccounterror": "Rationem creare non potuit: $1",
        "nocookiesnew": "Ratio usoris creata est, sed conventum non apertum est. {{SITENAME}} ''Cookies'' utitur in usorum conventa aperiendo. Cookies tua debiles sunt. Eis potestatem fac, tum conventum aperi cum nomine usoris tesseraque tua nova.",
-       "nocookieslogin": "{{SITENAME}} ''Cookies'' utitur in usorum conventa aperiendo. Cookies tua debiles sunt. Eis potestatem fac, tum conare denuo.",
+       "nocookieslogin": "{{SITENAME}} ''Cookies'' in conventis collatorum aperiendis adhibentur. ''Cookies'' tua debilitata sunt. Eis potestatem fac, tum conare denuo.",
        "noname": "Nomen usoris ratum non designavisti.",
        "loginsuccesstitle": "Conventum prospere apertum est",
        "loginsuccess": "'''Apud {{grammar:accusative|{{SITENAME}}}} agnosceris nomine \"$1\".'''",
        "mimesearch": "Quaerere per MIME",
        "mimetype": "Typus MIME:",
        "download": "depromere",
-       "unwatchedpages": "Paginae incustoditae",
+       "unwatchedpages": "Paginae non observatae",
        "listredirects": "Redirectiones",
        "unusedtemplates": "Formulae non in usu",
        "unusedtemplateswlh": "nexus alii",
        "import": "Paginas importare",
        "importinterwiki": "Adportatio transvici",
        "import-interwiki-submit": "Importare",
-       "import-interwiki-namespace": "Spatium nominale destinatum:",
        "import-upload-filename": "Nomen fasciculi:",
        "import-comment": "Sententia:",
        "importstart": "Adportare paginas...",
        "tooltip-pt-mycontris": "Index conlationum tuarum",
        "tooltip-pt-login": "Te conventum aperire hortamur, non autem requisitum",
        "tooltip-pt-logout": "Conventum concludere",
+       "tooltip-pt-createaccount": "Hortamur ut conventum crees, sed non est necesse",
        "tooltip-ca-talk": "Disputatio de hac pagina",
        "tooltip-ca-edit": "Hanc paginam recensere potes. Quaesumus praevisum inspice antequam servas.",
        "tooltip-ca-addsection": "Novam partem creare",
        "metadata-help": "Hic fasciculus alias res continet, saepius a machina originatore additas, et (si fasciculus postea recensus sit) fortasse corrigendas.",
        "metadata-expand": "Plura ostende",
        "metadata-collapse": "Partim celare",
+       "metadata-fields": "Campi metadatorum imaginis in hoc nuntio enumerati in pagina imaginis includentur cum tabula metadatorum occludatur.\nAlii abscondentur nisi actio contraria faciatur.\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": "Amplitudo",
        "exif-imagelength": "Altitudo",
        "exif-bitspersample": "Biti per componentem",
index cb8c698..543e8ef 100644 (file)
        "no-null-revision": "Déi nei Nullversioun fir d'Säit \"$1\" konnt net ugeluecht ginn",
        "badtitle": "Schlechten Titel",
        "badtitletext": "De gewënschten Titel ass net valabel, eidel, oder een net korrekten Interwiki Link.",
+       "title-invalid-interwiki": "Am Titel ass en Interwiki-Link",
        "perfcached": "Dës Date kommen aus dem Tëschespäicher a si méiglecherweis net aktuell. Maximal {{PLURAL:$1|ee Resultat ass|$1 Resultater sinn}} am Tësche späicher disponibel.",
        "perfcachedts": "Dës Donnéeë kommen aus dem Tëschespäicher, a goufe fir d'lescht den $1 aktualiséiert. Maximal {{PLURAL:$4|ee Resultat ass|$4 Resultater sinn}} am Tëschespäicher disponibel.",
        "querypage-no-updates": "D'Aktualiséierung vun dëser Säit ass zur Zäit ausgeschalt. D'Date gi bis op weideres net aktualiséiert.'''",
        "missingcommentheader": "<strong>Denkt drun:</strong> Dir hutt keen Titel/Sujet fir dës Bemierkung aginn.\nWann Dir nach en Kéier op \"{{int:savearticle}}\" klickt da gëtt Är Ännerung ouni Titel gespäichert.",
        "summary-preview": "Resumé kucken ouni ofzespäicheren:",
        "subject-preview": "Sujet/Iwwerschrëft kucken:",
+       "previewerrortext": "Beim Versuch fir Är Ännerungen ze weisen, ass e Feeler geschitt.",
        "blockedtitle": "Benotzer ass gespaart",
        "blockedtext": "Äre Benotzernumm oder Är IP-Adress gouf gespaart.\n\nD'Spär gouf vum $1 gemaach. Als Grond gouf ''$2'' uginn.\n\n* Ufank vun der Spär: $8\n* Enn vun der Spär: $6\n* Spär betrëfft: $7\n\nDir kënnt den/d' $1 kontaktéieren oder ee vun den aneren [[{{MediaWiki:Grouppage-sysop}}|Administrateure]] fir iwwer d'Spär ze schwätzen.\n\nDëst sollt Der besonnesch maachen, wann Der d'Gefill hutt, datt de Grond fir d'Spären net bei Iech läit.\nD'Ursaach dofir ass an deem Fall, datt der eng dynamesch IP hutt, iwwer en Access-Provider, iwwer deen och aner Leit fueren.\nAus deem Grond ass et recommandéiert, sech e Benotzernumm zouzeleeën, fir all Mëssverständnes z'evitéieren.\n\nDir kënnt d'Funktioun \"Dësem Benotzer eng E-Mail schécken\" nëmme benotzen, wann Dir eng gëlteg E-Mail Adress bei Ären [[Special:Preferences|Astellungen]] aginn hutt.\nÄr aktuell IP-Adress ass $3 an d'Nummer vun der Spär ass #$5.\nSchreift all dës Informatioune w.e.g. bei all Ufro derbäi.",
        "autoblockedtext": "Är IP-Adress gouf automatesch gespaart, well se vun engem anere Benotzer gebraucht gouf, an dee vum $1 gespaart gouf.\nDe Grond dofir war:\n\n:''$2''\n\n* Ufank vun der Spär: $8\n* Dauer vun der Spär: $6\n* D'Spär leeft of: $7\n\nDir kënnt de(n) $1 oder soss een [[{{MediaWiki:Grouppage-sysop}}|Administrateur]] kontaktéieren, fir iwwer déi Spär ze diskutéieren.\n\nBedenkt datt Dir d'Funktioun \"Dësem Benotzer eng E-Mail schécken\" benotze kënnt wann Dir eng gëlteg E-Mail-Adress an Ären [[Special:Preferences|Astellungen]] uginn hutt a wann dat net fir Iech gespaart gouf.\n\nÄr aktuell IP-Adress ass $3 an d'Nummer vun Ärer Spär ass $5.\nGitt dës Donnéeë w.e.g bei allen Ufroen zu dëser Spär un.",
        "content-model-css": "CSS",
        "content-json-empty-object": "Eidelen Objet",
        "content-json-empty-array": "Eidel Tabell",
+       "duplicate-args-category": "Säiten, déi duebel Argumenter a Schablounenopriff gebrauchen",
        "expensive-parserfunction-warning": "'''Opgepasst:'' Dës Säit huet ze vill Ufroe vu komplexe Parserfunktiounen.\n\nEt däerfen net méi wéi $2 {{PLURAL:$2|Ufro|Ufroe}} sinn, aktuell {{PLURAL:$2|ass et $1 Ufro|sinn et $1 Ufroe}}.",
        "expensive-parserfunction-category": "Säiten, déi komplex Parserfunktiounen ze dacks opruffen",
        "post-expand-template-inclusion-warning": "Opgepasst: D'Gréisst vun den agebonnene Schablounen ass ze grouss, e puer Schabloune kënnen net agebonne ginn.",
        "protect-dropdown": "*Déi heefegst Grënn fir eng Säit ze spären\n** Weblink-Spam\n** Permanenten Ännerungskonflikt\n** Dacks benotzt Schablounen\n** Säit déi dacks gekuckt gëtt",
        "protect-edit-reasonlist": "Grënn vun der Protektioun änneren",
        "protect-expiry-options": "1 Stonn:1 hour,1 Dag:1 day,1 Woch:1 week,2 Wochen:2 weeks,1 Mount:1 month,3 Méint:3 months,6 Méint:6 months,1 Joer:1 year,onbegrenzt:infinite",
-       "restriction-type": "Berechtigung:",
+       "restriction-type": "Autorisatioun:",
        "restriction-level": "Niveau vun de Limitatiounen:",
        "minimum-size": "Mindestgréisst",
        "maximum-size": "Maximalgréisst:",
        "import-interwiki-history": "Importéier all d'Versioune vun dëser Säit",
        "import-interwiki-templates": "Mat alle Schablounen",
        "import-interwiki-submit": "Import",
-       "import-interwiki-namespace": "Zil-Nummraum:",
-       "import-interwiki-rootpage": "Zil-Stamm-Säit (fakultativ):",
        "import-upload-filename": "Numm vum Fichier:",
        "import-comment": "Bemierkung:",
        "importtext": "Exportéiert de Fichier w.e.g. vun der Source-Wiki mat der [[Special:Export|Export-Funktioun]].\nSpäichert en op Ärem Computer of a luet en hei nees erop.",
        "tags-edit-new-tags": "Nei Markéierungen (tags):",
        "tags-edit-add": "Dës Markéierungen (tags) dobäisetzen:",
        "tags-edit-reason": "Grond:",
-       "tags-edit-success": "<strong>D'Ännerunge goufen applizéiert.</strong>",
+       "tags-edit-revision-submit": "Ännerungen op {{PLURAL:$1|dës Versioun|$1 Versiounen}} uwennen",
+       "tags-edit-success": "D'Ännerunge goufen applizéiert.",
+       "tags-edit-failure": "D'Ännerunge konnten net applizéiert ginn: $1",
        "comparepages": "Säite vergläichen",
        "compare-page1": "Säit 1",
        "compare-page2": "Säit 2",
        "special-characters-group-arabic": "Arabesch",
        "special-characters-group-arabicextended": "Arabesch, erweidert",
        "special-characters-group-persian": "Persesch",
-       "special-characters-group-hebrew": "Hebräisch",
+       "special-characters-group-hebrew": "Hebräesch",
        "special-characters-group-bangla": "Bangalesch",
        "special-characters-group-tamil": "Tamilesch",
        "special-characters-group-telugu": "Telugu",
index 7e6ddf6..8372a30 100644 (file)
        "import-interwiki-history": "Volledige gesjiedenis van deze pazjena ouch kopiëre",
        "import-interwiki-templates": "Alle sjablone opnaeme",
        "import-interwiki-submit": "Importere",
-       "import-interwiki-namespace": "Doelnaamruumdje:",
        "import-upload-filename": "Bestandjsnaam:",
        "import-comment": "Opmèrking:",
        "importtext": "Gebroek de functie [[Special:Export|export]] in de wiki wo de informatie vanaaf kömp. \nSlaon de oetveur op dien eige systeem op, en voeg dae dao nao hiej toe.",
index 996172a..d06846d 100644 (file)
        "no-null-revision": "سی بلگه$1 وانئری خنثی نه راس بکید",
        "badtitle": "داسون گن",
        "badtitletext": "داسون بلگه حاسته بیه معتور نی،یا  یه گل مئن زونی یا مئن ویکی داسون غلطه.\nیه شایت د ور گرته یکی با یا بیشتر کاراکتریا نبوئه سی ای داسونیا وه کار گرته بوئن",
+       "title-invalid-empty": "داسون بلگه حاستنی حالیه یا فقط مینونه دار یه گل نوم یا نومجائه.",
+       "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": "داسون بلگه حاستنی فره گپه. د حال و بار رازینه کاری UTF-8 انازه وه نواس د $1 بایت گپتر بوئه.",
+       "title-invalid-leading-colon": "داسون بلگه حاستنی مینونه دار یه گل کلون نامعتور د شرو کارشه.",
        "perfcached": "رسینه یا نهایی د ویرگه نهونی موکشت بینه و شایت هنی وه هنگوم سازی نبینه.بیشترونه {{جمی:$4|یه گل نتیجه|$4 یه گل نتیجه}} د ویرگه نهونی هان د دسرس.",
        "perfcachedts": "رسینه یا نهایی د ویرگه نهونی موکشت بینه و شایت هنی وه هنگوم سازی نبینه.بیشترونه {{جمی:$4|یه گل نتیجه|$4 یه گل نتیجه}} د ویرگه نهونی هان د دسرس.",
        "querypage-no-updates": "نبوئه ای بلگه وه هنگوم سازی با.\nرسینه یا ایچه تازه نبیه.",
        "revdelete-submit": "سی {{جمی:$1|وانیری|وانیریا}} انتخاو بیه وه کار بوریتو",
        "revdelete-success": "'''دیئن وانیری وه خوئی وه هنگوم بی.'''",
        "revdelete-failure": "'''دیئن وانیری وه خوئی وه هنگوم نبی:'''$1",
-       "logdelete-success": "<strong>پهرستنومه دیار بیین د خوئی میزونکاری بی.</strong>",
-       "logdelete-failure": "<strong>پهرستنومه دیار بیین نبوئه میزونکاری با.</strong> $1",
+       "logdelete-success": "پهرستنومه دیار بیین د خوئی میزونکاری بی.",
+       "logdelete-failure": "پهرستنومه دیار بیین نبوئه میزونکاری با. $1",
        "revdel-restore": "آلشت حال و بال ديئن",
        "pagehist": "ويرگار بلگه",
        "deletedhist": "ویرگار پاکسا بیه",
        "import-interwiki-history": "ؤرداشتن ویرگار همه وانئریا سی ای بلگه",
        "import-interwiki-templates": "همه چوئه یا",
        "import-interwiki-submit": "وامین اوردن",
-       "import-interwiki-namespace": "نومجا مقصد:",
-       "import-interwiki-rootpage": "ریشه بلگه مقصد(دل به حایی):",
+       "import-mapping-default": "وامین اوردن جاگه یا پیش فرض",
+       "import-mapping-namespace": "وامین اوردن یه گل نومجا:",
+       "import-mapping-subpage": "وامین اوردن یه گل بلگه چی یه گل زیر بلگه:",
        "import-upload-filename": "نوم جانیا:",
        "import-comment": "ویر و باور:",
        "importtext": "لطف بکیت  جانیا نه د ویکی سرچشمه وا هومیاری [[Special:Export|اوزار وه در دئن]] بئریت.\nاوسه ونه د دسگایا خوتو اماییه کاری بکیت و ایچه ونه سوار بکیت.",
        "tags-edit-reason": "دلیل:",
        "tags-edit-revision-submit": "وه کار گرتن سردیسیا د {{PLURAL:$1|د ای وانئری|وانئریا $1}}",
        "tags-edit-logentry-submit": "وه کار گرتن سردیسیا د {{PLURAL:$1|د ای پهرستنومه|پهرستنومه یا $1}}",
-       "tags-edit-success": "<strong>آلشتکاریا وا خوش سرانجومی وه کار گرته بیین.</strong>",
-       "tags-edit-failure": "<strong>نبوئه آلشتکاریا وه کار گرته بان.</strong>",
+       "tags-edit-success": "آلشتکاریا وا خوش سرانجومی وه کار گرته بیین.",
+       "tags-edit-failure": "نبوئه آلشتکاریا وه کار گرته بان.",
        "tags-edit-nooldid-title": "وانیری حاستنی نامعتوره",
        "tags-edit-nooldid-text": "شما یه گل وانئری دالکاری بیه سی یه که ای پیوندگر نه انجوم بیه تیار کاری نکردیته، یا وانئری که تیار کاری نبیه.",
        "tags-edit-none-selected": "لطف بکیت یه حداقل یه گل سردیسی سی اضاف کردن یا جا وه جاکاری انتخاو بکیت.",
index 115bf81..3d7cb68 100644 (file)
        "july": "liepos",
        "august": "rugpjūčio",
        "september": "Rugsėjo",
-       "october": "Spalio",
+       "october": "spalio",
        "november": "lapkričio",
        "december": "gruodžio",
        "january-gen": "Sausio",
        "import-interwiki-history": "Kopijuoti visas istorijos versijas šiam puslapiui",
        "import-interwiki-templates": "Įtraukti visus šablonus",
        "import-interwiki-submit": "Importuoti",
-       "import-interwiki-namespace": "Paskirties vardų sritis:",
-       "import-interwiki-rootpage": "Paskirties namų puslapis (pasirinktinai):",
        "import-upload-filename": "Failo pavadinimas:",
        "import-comment": "Paaiškinimas:",
        "importtext": "Prašome eksportuoti iš projekto-šaltinio failo, naudojant [[Special:Export|eksportavimo pagalbininką.]]\nIšsaugokite jį savo kompiuteryje ir įkelkite jį čia.",
index cafbea4..69e59e3 100644 (file)
@@ -71,7 +71,7 @@
        "editfont-sansserif": "Bezserifa fonts",
        "editfont-serif": "Serifa fonts",
        "sunday": "svētdiena",
-       "monday": "Pirmdiena",
+       "monday": "pirmdiena",
        "tuesday": "otrdiena",
        "wednesday": "trešdiena",
        "thursday": "ceturtdiena",
        "thu": "Ce",
        "fri": "Pk",
        "sat": "Se",
-       "january": "Janvāris",
-       "february": "Februāris",
-       "march": "Marts",
-       "april": "Aprīlis",
-       "may_long": "Maijs",
-       "june": "Jūnijs",
-       "july": "Jūlijs",
-       "august": "Augusts",
-       "september": "Septembris",
-       "october": "Oktobris",
-       "november": "Novembris",
-       "december": "Decembris",
+       "january": "janvārī,",
+       "february": "februārī,",
+       "march": "martā,",
+       "april": "aprīlī,",
+       "may_long": "maijā,",
+       "june": "jūnijā,",
+       "july": "jūlijā,",
+       "august": "augustā,",
+       "september": "septembrī,",
+       "october": "oktobrī,",
+       "november": "novembrī,",
+       "december": "decembrī,",
        "january-gen": "Janvāra",
        "february-gen": "Februāra",
        "march-gen": "Marta",
        "disclaimers": "Saistību atrunas",
        "disclaimerpage": "Project:Saistību atrunas",
        "edithelp": "Labošanas palīdzība",
+       "helppage-top-gethelp": "Palīdzība",
        "mainpage": "Sākumlapa",
        "mainpage-description": "Sākumlapa",
        "policy-url": "Project:Politika",
        "querypage-disabled": "Šī īpašā lapā ir atspējota veiktspējas iemeslu dēļ.",
        "booksources": "Grāmatu avoti",
        "booksources-search-legend": "Meklēt grāmatu avotus",
+       "booksources-search": "Meklēt",
        "specialloguserlabel": "Izpildītājs:",
        "speciallogtitlelabel": "Mērķis (nosaukums vai lietotājs):",
        "log": "Reģistri",
        "import-interwiki-history": "Nokopēt visas šīs lapas hronoloģijā atrodamās versijas",
        "import-interwiki-templates": "Iekļaut visas veidnes",
        "import-interwiki-submit": "Importēt",
-       "import-interwiki-namespace": "Mērķa vārdtelpa:",
        "import-upload-filename": "Faila nosaukums:",
        "import-comment": "Komentārs:",
        "importstart": "Importē lapas...",
index 674c343..46c4e7f 100644 (file)
        "import-interwiki-sourcepage": "源頁:",
        "import-interwiki-history": "審、誌同匯",
        "import-interwiki-submit": "入匯",
-       "import-interwiki-namespace": "入名集:",
        "import-upload-filename": "檔名:",
        "import-comment": "註:",
        "importtext": "請[[Special:Export|出匯]]儲之。\n再入匯於此。",
index ffa712d..9b646e0 100644 (file)
        "import-interwiki-history": "अए पन्नाक सभटा इतिहास संशोधनक द्वितीयक बनाउ",
        "import-interwiki-templates": "सभटा नमूना शामिल करू",
        "import-interwiki-submit": "आनू",
-       "import-interwiki-namespace": "लक्ष्य नामगाम:",
        "import-upload-filename": "संचिकानाम:",
        "import-comment": "समीक्षा:",
        "importtext": "मूल विकी [[Special:Export|export utility]] क प्रयोग कऽ संचिका पठाउ।\nअपन संगणकमे एकरा सुरक्षित करू आ एतए उपारोपित करू।",
index 46f6d38..2e0ae65 100644 (file)
        "import-interwiki-history": "Копияфтомс тя лопать сембе историянь верзиенза",
        "import-interwiki-templates": "Сувафтомс сембе шаблотт",
        "import-interwiki-submit": "Таргамс",
-       "import-interwiki-namespace": "Пачфтема лемботма:",
-       "import-interwiki-rootpage": "Ёнонь юрлопась (кочкамать коряс):",
        "import-upload-filename": "Файллем:",
        "import-comment": "Мяльполаткс:",
        "importtext": "Эняльттяма таргак файлать Вики лисьмостонза [[Special:Export|вима лезкссь]]. Ванфтк содама машиназот ди тонк тяза.",
        "import-options-wrong": "Аф виде {{PLURAL:$2|кочкама|кочкамат}}: <nowiki>$1</nowiki>",
        "importlogpage": "Таргамань лувома",
        "importlogpagetext": "Администрациеса лопань таргаматне петнемань историяснон мархта иля Викиста.",
-       "import-logentry-upload": "таргаф [[$1]] файлонь тонгомать вельде",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|илякстоптома|илякстоптомат}}",
-       "import-logentry-interwiki": "шашфтф Викитнень ёткса $1",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|илякстоптома|илякстоптомат}} $2-ста",
        "tooltip-pt-userpage": "Тонь тиинь лопаце",
        "tooltip-pt-anonuserpage": "Тиить лопанц IP потмоса, конань эса тон петнесак кода",
index 8f39d3d..0072654 100644 (file)
        "revdelete-submit": "Hampiharina amin'ny versiona nofidiana {{PLURAL:$1}}",
        "revdelete-success": "'''Voaova soa aman-tsara ny fahitana ny versiona.'''",
        "revdelete-failure": "'''Ny fisehon'ity versiona ity dia tsy afaka natao update'''\n$1",
-       "logdelete-success": "<strong>Voaova soa aman-tsara ny fisehon'ny laogy.</strong>",
-       "logdelete-failure": "<strong>Tsy afaka novaina ny fisehon'ny laogy</strong>\n$1",
+       "logdelete-success": "Voaova soa aman-tsara ny fisehon'ny laogy.",
+       "logdelete-failure": "Tsy afaka novaina ny fisehon'ny laogy\n$1",
        "revdel-restore": "Ovay ny fahitàna",
        "pagehist": "Tantaran'ilay pejy",
        "deletedhist": "Tantara voafafa",
        "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-interwiki-namespace": "Anaran-tsehatra tanjona :",
-       "import-interwiki-rootpage": "Foto-pejy tanjona (azo tsy fenoina):",
        "import-upload-filename": "Anaran-drakitra :",
        "import-comment": "Resaka :",
        "importstart": "Am-pampidirana ny pejy…",
index e63929f..018e415 100644 (file)
        "importstart": "Mangimpor laman...",
        "importnosources": "Indak ado sumber impor transwiki nan lah dibuek dan pamuatan riwayaik sacaro langsuang alah dinon-aktipan.",
        "importlogpagetext": "Administrasi laman impor jo riwayaik panyuntiangannyo dari wiki lain.",
-       "import-logentry-upload": "mangimpor [[$1]] malalui pangunggahan berkas",
        "tooltip-pt-userpage": "Laman pangguno Sanak",
        "tooltip-pt-anonuserpage": "Laman pangguno IP Sanak",
        "tooltip-pt-mytalk": "Laman rundiang Sanak",
        "expand_templates_xml_output": "Hasil XML",
        "expand_templates_ok": "OK",
        "expand_templates_remove_comments": "Hapuih komentar",
-       "expand_templates_preview": "Pratonton"
+       "expand_templates_preview": "Pratonton",
+       "special-characters-group-latin": "Latin",
+       "special-characters-group-latinextended": "Latin tambahan",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Simbol",
+       "special-characters-group-greek": "Yunani",
+       "special-characters-group-cyrillic": "Sirilik",
+       "special-characters-group-arabic": "Arab",
+       "special-characters-group-arabicextended": "Arab tambahan",
+       "special-characters-group-persian": "Persia",
+       "special-characters-group-hebrew": "Ibrani",
+       "special-characters-group-bangla": "Bangla",
+       "special-characters-group-tamil": "Tamil",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Sinhala",
+       "special-characters-group-gujarati": "Gujarat",
+       "special-characters-group-devanagari": "India kuno",
+       "special-characters-group-thai": "Siam",
+       "special-characters-group-lao": "Lao",
+       "special-characters-group-khmer": "Khmer",
+       "special-characters-title-endash": "en dash",
+       "special-characters-title-emdash": "em dash",
+       "special-characters-title-minus": "tando kurang"
 }
index 358f748..e02ba2e 100644 (file)
        "no-null-revision": "Не можев да направам нова ништовна преработка на страницата „$1“",
        "badtitle": "Неисправен наслов",
        "badtitletext": "Бараниот наслов е грешен, празен или неисправно поврзан меѓујазичен или меѓувики наслов. \nМоже да содржи недопуштени знаци.",
+       "title-invalid-empty": "Бараниот наслов е празен или го содржи само називот на именскиот простор.",
+       "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 бајти, шифриран според UTF-8.",
+       "title-invalid-leading-colon": "Бараниот наслов содржи неважечки две точки на почетокот.",
        "perfcached": "Следните податоци се меѓускладирани и може да не се тековни. Во меѓускладот {{PLURAL:$1|е достапен највеќе еден резултат|се достапни највеќе $1 резултати}}.",
        "perfcachedts": "Следните податоци се меѓускладирани, последен пат подновени на $1. Во меѓускладот {{PLURAL:$4|е достапен највеќе еден резултат|се достапни највеќе $4 резултати}}.",
        "querypage-no-updates": "Подновите на оваа страница моментално се оневозможени.\nПодатоците овде во моментов нема да се подновуваат.",
        "import-interwiki-history": "Копирај ги сите постари верзии за оваа страница",
        "import-interwiki-templates": "Вклучи ги сите шаблони",
        "import-interwiki-submit": "Увези",
-       "import-interwiki-namespace": "Целен именски простор:",
-       "import-interwiki-rootpage": "Целна основна страница (незадолжително):",
+       "import-mapping-default": "Увези во стандардните места",
+       "import-mapping-namespace": "Увези во именскиот простор:",
+       "import-mapping-subpage": "Увези како потстраници на следнава страница:",
        "import-upload-filename": "Податотека:",
        "import-comment": "Коментар:",
        "importtext": "Извезете ја податотеката од изворното вики користејќи ја [[Special:Export|алатката за извоз]].\nЗачувајте ја на вашиот сметач и подигнете ја овде.",
        "tags-edit-reason": "Причина:",
        "tags-edit-revision-submit": "Примени измени врз {{PLURAL:$1|преработкава|$1 преработки}}",
        "tags-edit-logentry-submit": "Примени измени врз {{PLURAL:$1|овој дневнички запис|$1 дневнички записи}}",
-       "tags-edit-success": "<strong>Измените се успешно применети.</strong>",
-       "tags-edit-failure": "<strong>Не можев да ги применам измените:</strong>\n$1",
+       "tags-edit-success": "Измените се успешно применети.",
+       "tags-edit-failure": "Не можев да ги применам измените:\n$1",
        "tags-edit-nooldid-title": "Неважечка целна преработка",
        "tags-edit-nooldid-text": "Немате укажано целна преработка врз која би се примениле измените, или пак укажаната преработка не постои.",
        "tags-edit-none-selected": "Одберете барем една ознака за додавање или отстранување.",
index 036d191..5c320a6 100644 (file)
        "no-null-revision": "\"$1\" എന്ന താളിന് പുതിയ ശൂന്യമായ മാറ്റമുള്ള നാൾപ്പതിപ്പ് സൃഷ്ടിക്കാൻ കഴിഞ്ഞില്ല",
        "badtitle": "അസാധുവായ തലക്കെട്ട്",
        "badtitletext": "താങ്കൾ ആവശ്യപ്പെട്ട തലക്കെട്ടുള്ള ഒരു താൾ നിലവിലില്ല. ഇതു തെറ്റായി അന്തർഭാഷാ/അന്തർവിക്കി കണ്ണി ചെയ്യപ്പെട്ടതു മൂലമോ, തലക്കെട്ടിൽ ഉപയോഗിക്കരുതാത്ത അക്ഷരരൂപങ്ങൾ ഉപയോഗിച്ചതു മൂലമോ സംഭവിച്ചതായിരിക്കാം.",
+       "title-invalid-empty": "ആവശ്യപ്പെട്ട താളിന്റെ തലക്കെട്ട് ശൂന്യമാണ് അല്ലെങ്കിൽ ഒരു നാമമേഖലയുടെ പേര് മാത്രം ഉൾക്കൊള്ളുന്നതാണ്.",
+       "title-invalid-utf8": "ആവശ്യപ്പെട്ട താളിന്റെ തലക്കെട്ടിൽ അസാധുവായ യു.ടി.എഫ്.-8 ശ്രേണി ആണുള്ളത്.",
+       "title-invalid-interwiki": "തലക്കെട്ടിൽ ഒരു അന്തർവിക്കി കണ്ണി ഉണ്ട്",
+       "title-invalid-talk-namespace": "ആവശ്യപ്പെട്ട താളിന്റെ തലക്കെട്ട് നിലവിലില്ലാത്ത ഒരു സംവാദത്താളിനെയാണ് സൂചിപ്പിക്കുന്നത്.",
+       "title-invalid-characters": "ആവശ്യപ്പെട്ട താളിന്റെ തലക്കെട്ടിൽ അസാധുവായ അക്ഷരങ്ങളുണ്ട്: \"$1\".",
        "perfcached": "താഴെ കൊടുത്തിരിക്കുന്ന വിവരം ശേഖരിച്ചു വെച്ചിരിക്കുന്നതാണ്, അതുകൊണ്ട് ചിലപ്പോൾ പുതിയതായിരിക്കണമെന്നില്ല. പരമാവധി {{PLURAL:$1|ഒരു ഫലം|$1 ഫലങ്ങൾ}} ശേഖരിച്ചുവെച്ചിരിക്കുന്നവയിൽ ഉണ്ട്.",
        "perfcachedts": "താഴെയുള്ള വിവരങ്ങൾ ശേഖരിച്ച് വെച്ചവയിൽ പെടുന്നു, അവസാനം പുതുക്കിയത് $1-നു ആണ്‌. പരമാവധി {{PLURAL:$4|ഒരു ഫലം|$4 ഫലങ്ങൾ}} ശേഖരിച്ചുവെച്ചിരിക്കുന്നവയിൽ ഉണ്ട്.",
        "querypage-no-updates": "ഈ താളിന്റെ പുതുക്കൽ തൽക്കാലം നടക്കുന്നില്ല. ഇവിടുള്ള വിവരങ്ങൾ ഏറ്റവും പുതിയതാവണമെന്നില്ല.",
        "import-interwiki-history": "ഈ താളിന്റെ എല്ലാ പൂർവ്വചരിത്രവും പകർത്തുക",
        "import-interwiki-templates": "എല്ലാ ഫലകങ്ങളും ഉൾപ്പെടുത്തുക",
        "import-interwiki-submit": "ഇറക്കുമതി",
-       "import-interwiki-namespace": "ഉദ്ദിഷ്ട നാമമേഖല:",
-       "import-interwiki-rootpage": "ലക്ഷ്യമിട്ട മൂലതാൾ (ഐച്ഛികം):",
        "import-upload-filename": "പ്രമാണത്തിന്റെ പേര്‌",
        "import-comment": "കുറിപ്പ്:",
        "importtext": "ദയവായി സ്രോതസ്സ് വിക്കിയിൽ നിന്ന് [[Special:Export|കയറ്റുമതി ഉപകരണം]] ഉപയോഗിച്ച് പ്രമാണം കയറ്റുമതി ചെയ്യുക.\nഅത് താങ്കളുടെ കമ്പ്യൂട്ടറിൽ ശേഖരിച്ച് ഇവിടെ അപ്‌‌ലോഡ് ചെയ്യുക.",
        "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-reason": "കാരണം:",
+       "tags-delete-submit": "പിൻവലിക്കാനാവാത്തവിധം ഈ ടാഗ് മായ്ക്കുക",
+       "tags-delete-not-found": "\"$1\" എന്ന ടാഗ് നിലവിലില്ല.",
+       "tags-activate-title": "ടാഗ് സജ്ജമാക്കുക",
        "tags-activate-reason": "കാരണം:",
+       "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-edit-title": "ടാഗുകൾ തിരുത്തുക",
        "tags-edit-manage-link": "ടാഗുകൾ കൈകാര്യം ചെയ്യുക",
index 7fe9c72..084057a 100644 (file)
        "import-interwiki-history": "Энэ хуудсын бүх хувилбаруудын түүхийг хуулах",
        "import-interwiki-templates": "Бүх загварыг оруулах",
        "import-interwiki-submit": "Импортлох",
-       "import-interwiki-namespace": "Зорьсон хуудсын төрөл:",
        "import-upload-filename": "Файлын нэр:",
        "import-comment": "Тайлбар:",
        "importtext": "[[Special:Export|экспорт багажийг]]  ашиглан файлыг эх үүсвэр викигээс татаад, өөрийн дискэнд хадгалж, энд оруулна уу.",
        "import-invalid-interwiki": "Өгөгдсөн викигээс оруулах боломжгүй байна.",
        "importlogpage": "Оруулалтын лог",
        "importlogpagetext": "Администраторуудын бусад викигээс засварын түүхтэй нь оруулсан хуудсууд.",
-       "import-logentry-upload": "файлын оруулалтаар [[$1]]-г орууллаа",
        "import-logentry-upload-detail": "$1 засвар",
-       "import-logentry-interwiki": "$1-г транс-викидлээ",
        "import-logentry-interwiki-detail": "$2-с авсан $1 засвар",
        "javascripttest": "JavaScript туршилт",
        "javascripttest-pagetext-noframework": "Уг хуудсыг JavaScript тест хийхэд ашиглана.",
index ead4fef..e028891 100644 (file)
        "import-interwiki-history": "या पानाकरिताची साऱ्या इतिहास आवर्तनांची नक्कल करा",
        "import-interwiki-templates": "साचे आंतरभूत करा",
        "import-interwiki-submit": "आयात",
-       "import-interwiki-namespace": "पाने नामविश्वात स्थानांतरीत करा:",
-       "import-interwiki-rootpage": "स्थानकाचे मुळ-पृष्ठ (वैकल्पिक):",
        "import-upload-filename": "संचिकानाव:",
        "import-comment": "प्रतिक्रीया:",
        "importtext": "कृपया [[Special:Export|निर्यात सुविधा]] वापरून स्रोत विकिकडून संचिका निर्यात करा,ती तुमच्या तबकडीवर जतन करा आणि येथे चढवा.",
index 14b518c..b69882b 100644 (file)
        "import-interwiki-history": "Salin semua versi sejarah bagi laman ini",
        "import-interwiki-templates": "Sertakan semua templat",
        "import-interwiki-submit": "Import",
-       "import-interwiki-namespace": "Ruang nama destinasi:",
-       "import-interwiki-rootpage": "Halaman akar tujuan (tidak wajib):",
        "import-upload-filename": "Nama fail:",
        "import-comment": "Komen:",
        "importtext": "Sila eksport fail daripada sumber wiki dengan menggunakan [[Special:Export|utiliti eksport]].\nSimpan dalam komputer anda dan muat naiknya di sini.",
        "import-rootpage-nosubpage": "Ruang nama \"$1\" halaman akar tidak membenarkan subhalaman.",
        "importlogpage": "Log import",
        "importlogpagetext": "Senarai tindakan import laman dengan keseluruhan sejarah suntingannya daripada wiki lain.",
-       "import-logentry-upload": "mengimport [[$1]] dengan memuat naik fail",
        "import-logentry-upload-detail": "$1 semakan diimportkan",
-       "import-logentry-interwiki": "$1 dipindahkan ke wiki lain",
        "import-logentry-interwiki-detail": "$1 semakan diimportkan daripada $2",
        "javascripttest": "Ujian JavaScript",
        "javascripttest-pagetext-noframework": "Laman ini ditempah untuk menjalankan ujian JavaScript.",
        "json-error-utf8": "Aksara UTF-8 cacat, mungkin salah dikodkan",
        "json-error-recursion": "Sekurang-kurangnya satu rujukan rekursif untuk dikodkan di dalam nilai berkenaan",
        "json-error-inf-or-nan": "Sekurang-kurangnya satu nilai NAN atau INF untuk dikodkan di dalam nilai berkenaan",
-       "json-error-unsupported-type": "Diberikannya nilai jenis yang tidak boleh dikodkan"
+       "json-error-unsupported-type": "Diberikannya nilai jenis yang tidak boleh dikodkan",
+       "special-characters-group-latin": "Rumi",
+       "special-characters-group-latinextended": "Rumi lanjutan",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Simbol",
+       "special-characters-group-greek": "Yunani",
+       "special-characters-group-cyrillic": "Cyril",
+       "special-characters-group-arabic": "Arab",
+       "special-characters-group-arabicextended": "Arab lanjutan",
+       "special-characters-group-persian": "Parsi",
+       "special-characters-group-hebrew": "Ibrani",
+       "special-characters-group-bangla": "Benggala",
+       "special-characters-group-tamil": "Tamil",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Sinhala",
+       "special-characters-group-gujarati": "Gujarati",
+       "special-characters-group-devanagari": "Devanagari",
+       "special-characters-group-thai": "Thai",
+       "special-characters-group-lao": "Lao",
+       "special-characters-group-khmer": "Khmer",
+       "special-characters-title-endash": "sengkang en",
+       "special-characters-title-emdash": "sengkang em",
+       "special-characters-title-minus": "tanda tolak"
 }
index 3c55d64..b9e8e4e 100644 (file)
        "november-gen": "Novembru",
        "december-gen": "Diċembru",
        "jan": "Jan",
-       "feb": "Fra",
+       "feb": "Frar",
        "mar": "Mar",
        "apr": "Apr",
-       "may": "Mej",
+       "may": "Mejj",
        "jun": "Ġun",
        "jul": "Lul",
-       "aug": "Awi",
-       "sep": "Set",
+       "aug": "Awwi",
+       "sep": "Sett",
        "oct": "Ott",
        "nov": "Nov",
        "dec": "Diċ",
        "personaltools": "Għodda personali",
        "articlepage": "Ara l-artiklu",
        "talk": "Diskussjoni",
-       "views": "Veduti",
+       "views": "Dehriet",
        "toolbox": "Għodda",
        "userpage": "Ara l-paġna tal-utent",
        "projectpage": "Ara l-paġna tal-proġett",
        "viewhelppage": "Ara l-paġna tal-għajnuna",
        "categorypage": "Ara l-kategorija",
        "viewtalkpage": "Ara d-diskussjoni",
-       "otherlanguages": "F'lingwi oħrajn",
+       "otherlanguages": "B'lingwi oħrajn",
        "redirectedfrom": "(Rindirizzat minn $1)",
        "redirectpagesub": "Paġna ta' rindirizz",
        "redirectto": "Rindirizza lejn:",
        "versionrequired": "Hija meħtieġa l-verżjoni $1 ta' MedjaWiki",
        "versionrequiredtext": "Hija meħtieġa l-verżjoni $1 ta' MedjaWiki biex tuża din il-paġna. Ara [[Special:Version|paġna tal-verżjoni]].",
        "ok": "OK",
-       "retrievedfrom": "Miġjub minn \"$1\"",
+       "retrievedfrom": "Miksub minn \"$1\"",
        "youhavenewmessages": "Għandek $1 ($2).",
        "youhavenewmessagesfromusers": "Għandek $1 minn {{PLURAL:$3|utent ieħor|$3utenti oħra}} ($2).",
        "youhavenewmessagesmanyusers": "Għandek $1 mingħand ħafna utenti ($2).",
        "currentrev": "Reviżjoni kurrenti",
        "currentrev-asof": "Reviżjoni kurrenti ta' $1",
        "revisionasof": "Reviżjoni ta' $1",
-       "revision-info": "Reviżjoni ta' $1 minn $2",
+       "revision-info": "Reviżjoni ta' $1 minn {{GENDER:$6|$2}}$7",
        "previousrevision": "←Reviżjoni eqdem",
        "nextrevision": "Reviżjoni iġded→",
        "currentrevisionlink": "Reviżjoni kurrenti",
        "compareselectedversions": "Qabbel il-verżjonijiet magħżula",
        "showhideselectedversions": "Uri/aħbi reviżjonijiet magħżula",
        "editundo": "ħassar",
+       "diff-multi-sameuser": "(Mhux qed {{PLURAL:$1|tintwera r-reviżjoni intermedja|jintwerew $1 r-reviżjonijiet intermedji}} mill-istess awtur)",
        "diff-multi-manyusers": "(Mhux qed {{PLURAL:$1|tintwera reviżjoni intermedja|jintwerew $1 reviżjonijit intermedji}} mingħand iktar minn $2 {{PLURAL:$2|utent|$2 utenti}})",
        "searchresults": "Riżultat tat-tfittxija",
        "searchresults-title": "Riżultati tat-tfittxija għal \"$1\"",
        "shown-title": "Uri {{PLURAL:$1|riżultat|$1 riżultati}} kull paġna",
        "viewprevnext": "Ara ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-exists": "'''Hemm paġna bl-isem ta' \"[[:$1]]\" fuq din il-wiki'''",
-       "searchmenu-new": "'''Oħloq il-paġna \"[[:$1]]\" fuq din il-wiki!'''",
+       "searchmenu-new": "<strong>Oħloq il-paġna \"[[:$1]]\" fuq din il-wiki!</strong> \n{{PLURAL:$2|0=|Ara wkoll l-paġna li sibt bit-tfittxija tiegħek.|Ara wkoll ir-riżultati li sibt.}}",
        "searchprofile-articles": "Paġni ta' kontenut",
        "searchprofile-images": "Multimedja",
        "searchprofile-everything": "Kollox",
        "searchrelated": "relatati",
        "searchall": "kollha",
        "showingresults": "Hawn taħt ġie inkluż massimu ta' {{PLURAL:$1|riżultat '''1''' li jibda|'''$1''' riżultat li jibdew}} bin-numru '''$2'''.",
+       "search-showingresults": "{{PLURAL:$4|Riżultat <strong>$1</strong> ta' <strong>$3</strong>|Riżultati <strong>$1 - $2</strong> ta' <strong>$3</strong>}}",
        "search-nonefound": "It-tfittxija ma tat l-ebda riżultat.",
        "powersearch-legend": "Tfittxija avvanzata",
        "powersearch-ns": "Fittex fl-ispazju tal-isem:",
        "action-siteadmin": "timblokka jew tiżblokka d-databażi",
        "action-sendemail": "ibgħat l-ittri-e",
        "nchanges": "{{PLURAL:$1|modifika $1 |$1 modifiki}}",
-       "recentchanges": "Tibdil riċenti",
+       "enhancedrc-history": "kronoloġija",
+       "recentchanges": "Bidliet riċenti",
        "recentchanges-legend": "Opzjonijiet tat-tibdil riċenti",
        "recentchanges-summary": "Din il-paġna turi l-modifiki l-aktar riċenti għal kontenut tas-sit.",
        "recentchanges-noresult": "L-ebda bidla ma saret matul il-perjodu mogħti li tissodisfa dawn il-kriterji.",
        "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-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",
        "rcshowhideminor": "$1 modifiki żgħar",
        "rcshowhideminor-show": "Uri",
+       "rcshowhideminor-hide": "Aħbi",
        "rcshowhidebots": "$1 bot",
        "rcshowhidebots-show": "Uri",
-       "rcshowhideliu": "Utenti reġistrati: $1",
+       "rcshowhidebots-hide": "Aħbi",
+       "rcshowhideliu": "$1 utenti reġistrati",
        "rcshowhideliu-show": "Uri",
+       "rcshowhideliu-hide": "Aħbi",
        "rcshowhideanons": "Utenti anonimi: $1",
        "rcshowhideanons-show": "Uri",
+       "rcshowhideanons-hide": "Aħbi",
        "rcshowhidepatr": "$1 modifiki kontrollati",
        "rcshowhidepatr-show": "Uri",
        "rcshowhidemine": "$1 modifiki tiegħi",
        "rcshowhidemine-show": "Uri",
+       "rcshowhidemine-hide": "Aħbi",
        "rclinks": "Uri l-aħħar $1 modifiki fl-aħħar $2 ġranet<br />$3",
        "diff": "diff",
        "hist": "kron",
        "delete-warning-toobig": "Din il-paġna għandha kronoloġija ta' modifikar kbira, l-fuq minn $1 {{PLURAL:$1|reviżjoni|reviżjonijiet}}.\nTħassara tista' toħloq problema ta' funżjoni fid-database ta' {{SITENAME}}; moħħok hemm.",
        "rollback": "Ħassar il-modifiki",
        "rollbacklink": "rollback",
+       "rollbacklinkcount": "Erġa' lura $1 {{PLURAL:$1|modifika|modifiki}}",
        "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]]).",
        "import-interwiki-history": "Kopja l-verżjonijiet tal-kronoloġija kollha għal din il-paġna",
        "import-interwiki-templates": "Inkludi l-mudelli kollha",
        "import-interwiki-submit": "Importa",
-       "import-interwiki-namespace": "Ittrasferixxi l-paġni fl-ispazju tal-isem:",
        "import-upload-filename": "Isem tal-fajl:",
        "import-comment": "Kumment:",
        "importtext": "Jekk jogħġbok esporta l-fajl mis-sit wiki tal-oriġini bil-funzjoni [[Special:Export|funzjoni ta' esportazzjoni]], salvah fuq id-diska tiegħek u imbagħad tellgħu hawn.",
        "tooltip-pt-preferences": "Il-preferenzi tiegħek",
        "tooltip-pt-watchlist": "Il-lista ta' paġni li qiegħed tosserva",
        "tooltip-pt-mycontris": "Lista tal-kontribuzzjonijiet tiegħek",
-       "tooltip-pt-login": "Ir-reġistrazzjoni hija mħeġġa, għalkemm mhijiex obbligatorja",
+       "tooltip-pt-login": "Inħeġġuk tidħol fil-kont tiegħek, għalkemm dan mhux obbligatorju",
        "tooltip-pt-logout": "Oħroġ (illogja 'l barra)",
-       "tooltip-ca-talk": "Diskussjoni dwar il-kontenut tal-paġna",
+       "tooltip-pt-createaccount": "Nagħtuk parir toħloq kont u tidħol fih; però dan mhux obligatorju.",
+       "tooltip-ca-talk": "Diskussjoni dwar il-paġna ta' kontenut",
        "tooltip-ca-edit": "Tista' timmodifika din il-paġna. Jekk jogħġbok uża l-buttuna tad-dehra proviżorja qabel ma ssalva l-modifiki.",
        "tooltip-ca-addsection": "Ibda sezzjoni ġdida",
        "tooltip-ca-viewsource": "Din il-paġna hija protetta. Tista' tara s-sors tagħha.",
        "tooltip-ca-watch": "Żid din il-paġna mal-lista ta' osservazzjoni tiegħek",
        "tooltip-ca-unwatch": "Neħħi din il-paġna mill-osservazzjonijiet speċjali tiegħek",
        "tooltip-search": "Fittex fil-{{SITENAME}}",
-       "tooltip-search-go": "Mur fil-paġna bit-titlu indikat, jekk teżisti",
-       "tooltip-search-fulltext": "Fittex it-test indikat fil-paġni",
-       "tooltip-p-logo": "Il-Paġna prinċipali",
+       "tooltip-search-go": "Mur fil-paġna b'dan it-titlu eżatt, jekk teżisti",
+       "tooltip-search-fulltext": "Fittex dan it-test fil-paġni",
+       "tooltip-p-logo": "Żur il-paġna prinċipali",
        "tooltip-n-mainpage": "Żur il-Paġna Prinċipali",
        "tooltip-n-mainpage-description": "Żur il-paġna prinċipali",
        "tooltip-n-portal": "Dwar il-proġett, x'tista' tagħmel, fejn tista' ssib l-affarijiet",
        "tooltip-n-currentevents": "Sib aktar informazzjoni dwar il-ġrajjiet kurrenti",
-       "tooltip-n-recentchanges": "Il-lista tat-tibdil riċenti fil-wiki",
+       "tooltip-n-recentchanges": "Il-lista tal-bidliet riċenti fil-wiki",
        "tooltip-n-randompage": "Uri paġna kwalunkwe",
-       "tooltip-n-help": "Il-Post fejn issir taf.",
+       "tooltip-n-help": "Il-post fejn issir taf iżjed.",
        "tooltip-t-whatlinkshere": "Lista tal-paġni tal-wiki kollha li jwasslu hawn",
        "tooltip-t-recentchangeslinked": "Link għal modifiki riċenti ta' paġni relatati",
        "tooltip-feed-rss": "Feed RSS għal din il-paġna",
        "spam_reverting": "Erġa' lura għall-aħħar verżjoni li m'għandiex link għal $1",
        "spam_blanking": "Paġna svojtjata, kull verżjoni kellu link għal $1",
        "spam_deleting": "Paġna mħassra, ir-reviżjonijiet kollha kellhom ħoloq lejn $1",
+       "simpleantispam-label": "Konroll anti-spam.\n<strong>TIMLIHIEX</strong> din!",
        "pageinfo-title": "Informazzjoni għal \"$1\"",
        "pageinfo-not-current": "Jiddispjaċina, imma huwa impossibbli li tingħata informazzjoni fuq reviżjonijiet qodma.",
        "pageinfo-header-basic": "Informazzjoni bażika",
        "file-info-size-pages": "$1 × $2 pixels, daqs tal-fajl: $3, tip MIME: $4, $5 {{PLURAL:$5|paġna|paġni}}",
        "file-nohires": "Mhux disponibli verżjonijiet b'risoluzzjoni akbar.",
        "svg-long-desc": "Fajl fil-format SVG, dimensjoni nominali $1 × $2 pixel, dimensjoni tal-fajl: $3",
-       "show-big-image": "Verżjoni b'risoluzzjoni sħiħa",
+       "show-big-image": "Fajl oriġinali",
        "show-big-image-preview": "Daqs tad-dehra proviżorja: $1.",
        "show-big-image-other": "{{PLURAL:$2|Riżoluzzjoni|Riżoluzzjonijiet}} oħra: $1",
        "show-big-image-size": "$1 × $2 pixels",
        "tags": "Tikketti ta' modifika validi",
        "tag-filter": "Iffilitra skont it-[[Special:Tags|tikketta]]:",
        "tag-filter-submit": "Filtru",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tag|Tags}}]]: $2)",
        "tags-title": "Tikketti",
        "tags-intro": "Din il-paġna telenka t-tikketti li s-softwer jista' jassoċja ma' modifika u t-tifsira tagħhom.",
        "tags-tag": "Isem tat-tikketta",
        "htmlform-selectorother-other": "Oħrajn",
        "sqlite-has-fts": "$1 bil-possibilità ta' tfittxija kompluta fit-test",
        "sqlite-no-fts": "$1 mingħajr il-possibilità ta' tfittxija kompluta fit-test",
-       "logentry-delete-delete": "$1 ħassar il-paġna $3",
+       "logentry-delete-delete": "$1 {{GENDER:$2|ħassar|ħassret}} il-paġna $3",
        "logentry-delete-restore": "$1 reġġa' lura l-paġna $3",
        "logentry-delete-event": "$1 biddel il-viżibilità ta' {{PLURAL:$5|azzjoni tar-reġistru|$5 azzjonijiet tar-reġistru}} ta' $3: $4",
        "revdelete-content-hid": "kontenut moħbi",
        "revdelete-uname-unhid": "isem tal-utent muri mill-ġdid",
        "revdelete-restricted": "limiti applikati 'l amministraturi",
        "revdelete-unrestricted": "neħħi l-limiti 'l amministraturi",
-       "logentry-move-move": "$1 mexxa l-paġna $3 għal $4",
+       "logentry-move-move": "$1 {{GENDER:$2|mexxa l|mexxiet il}}-paġna $3 għal $4",
        "logentry-move-move-noredirect": "$1 mexxa l-paġna $3 għal $4 mingħajr ma ħalla rindirizz",
        "logentry-move-move_redir": "$1 mexxa l-paġna $3 għal $4 fuq rindrizz",
        "logentry-move-move_redir-noredirect": "$1 mexxa l-paġna $3 għal $4 fuq rindirizz mingħajr ma ħalla rindirizz",
        "logentry-newusers-newusers": "Il-kont $1 ġie maħluq",
-       "logentry-newusers-create": "Il-kont $1 ġie maħluq",
+       "logentry-newusers-create": "Inħoloq il-kont $1",
        "logentry-newusers-create2": "Il-kont $3 ġie maħluq minn $1",
        "logentry-newusers-autocreate": "Il-kont $1 ġie maħluq awtomatikament",
        "logentry-rights-rights": "$1 {{GENDER:$2|biddel|biddlet}} is-sħubija ta' $3 minn $4 għal $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|biddel|biddlet}} is-sħubija fil-gruppi ta' $3",
        "logentry-rights-autopromote": "$1 {{GENDER:$2|ġie|ġiet}} awtomatikament {{GENDER:$2|promoss|promossa}} minn $4 għal $5",
+       "logentry-upload-upload": "$1 {{GENDER:$2|tella'|tellgħet}} $3",
        "rightsnone": "(xejn)",
        "revdelete-summary": "Taqsira tal-modifika",
        "feedback-bugcheck": "Tajjeb ħafna! Ivverifika li mhux diġà fost id-[$1 difetti magħrufa].",
index da14248..c35e221 100644 (file)
        "import": "Таргамс лопатнень",
        "import-interwiki-templates": "Совавтомс весе лопа парцунтнэнь",
        "import-interwiki-submit": "Таргамс",
-       "import-interwiki-namespace": "Норовазь лемпотмось:",
        "import-upload-filename": "Файла лемесь:",
        "import-comment": "Арсемат-мельть:",
        "importstart": "Лопатне совавтовить...",
        "duration-decades": "$1 {{PLURAL:$1|1=кеменьие|кеменьиеть}}",
        "duration-centuries": "$1 {{PLURAL:$1|1=пинге|пингеть}}",
        "duration-millennia": "$1 {{PLURAL:$1|1=тёжтьие|тёжтьиеть}}",
-       "expand_templates_preview": "Васнянь неевтезэ"
+       "expand_templates_preview": "Васнянь неевтезэ",
+       "special-characters-group-latin": "Латиница",
+       "special-characters-group-symbols": "Тешкстт",
+       "special-characters-group-cyrillic": "Кириллица"
 }
index e6704e3..19e6916 100644 (file)
        "logentry-newusers-newusers": "$1  بساتن اتا حساب کاروری",
        "logentry-newusers-create": "$1  بساتن اتا حساب کاروری",
        "rightsnone": "(هچّی)",
-       "feedback-subject": "موضوع:",
-       "feedback-message": "پیغوم:",
-       "feedback-cancel": "ول هاکردن",
-       "feedback-submit": "ارسال پیشنهادات و انتقادات",
        "feedback-adding": "بی‌یشتن پیشنهادات و انتقادات...",
+       "feedback-cancel": "ول هاکردن",
        "feedback-error1": "خطا: جواب‌ئون نشناسی‌یه API جه",
        "feedback-error2": "خطا: شکست دچی‌ین سر",
        "feedback-error3": "خطا: جواب ندائن API",
+       "feedback-message": "پیغوم:",
+       "feedback-subject": "موضوع:",
+       "feedback-submit": "ارسال پیشنهادات و انتقادات",
        "api-error-badaccess-groups": "شما اجازهٔ باربی‌یشتن پرونده‌ها ره این ویکی دله ندارنی.",
        "api-error-badtoken": "خطای داخلی: کد امنیتی اشتبائه (Bad token).",
        "api-error-copyuploaddisabled": "باربی‌یشتن با استفاده از نشونی اینترنتی این کارساز دله غیرفعاله.",
index f16cbc5..4609c7e 100644 (file)
        "no-null-revision": "Nun se può crià na nnova revisione nulla p' 'a paggena \"$1\"",
        "badtitle": "'O nnomme nun è jùsto",
        "badtitletext": "'O titolo d' 'a paggena richiesta è abbacante, sbagliato o pure nun è linkato buono a 'o titolo inter-lengua o inter-wiki.\nPutesse pure tené uno o cchiù carattere ca nun se ponno usà dint'e titule.",
+       "title-invalid-empty": "'O titulo d' 'a paggena addimannata è abbacante o cuntene surtanto 'o nomme 'e nu namespace.",
+       "title-invalid-utf8": "'O titulo 'e paggena addimannato cuntene na sequenza invalida UTF-8.",
+       "title-invalid-interwiki": "'O titulo cuntene nu link interwiki",
+       "title-invalid-talk-namespace": "'O titulo 'e paggena addimannato riferisce a na paggena 'e chiacchiera ca putesse nun esistere.",
+       "title-invalid-characters": "'O titulo 'e paggena addimannato cuntene carattere invalide: \"$1\".",
+       "title-invalid-relative": "'O titulo tene nu nnerizzo relativo. 'E titule 'e paggene relative (./, ../) nun songhe valide, pecché nun se putessero trasì quanno s'ausasse nu navigatore 'utente.",
+       "title-invalid-magic-tilde": "'O titulo 'e paggena addimannato cuntene na sequenza che facesse maggie, e nun serve (<nowiki>~~~</nowiki>).",
+       "title-invalid-too-long": "'O titulo 'e paggena addimannato è troppo luongo. Nun s'avesse 'e ffà cchiù luongo 'e $1 byte dint'a na codifica UTF-8.",
+       "title-invalid-leading-colon": "'O titulo 'e paggena addimannato cuntene na culonna invalida addò 'o cummencio.",
        "perfcached": "Può darse, ch' 'e ddate ca stanno ccà (\"ncache\") nun song'agghiurnate. Nu massimo 'e {{PLURAL:$1|unu risultato è|$1 risultate songhe}} a disposizione 'n \"cache\".",
        "perfcachedts": "'E ddate ca stanno ccà songhe asciute 'a na copia \"cache\" d' 'o database, 'o cuale tene l'úrdemo agghiurnamento 'o $1. Nu massimo 'e {{PLURAL:$4|unu risultato è|$4 risultate songhe}} a disposizione dint'a \"cache\".",
        "querypage-no-updates": "Ll'agghiurnamente pe' sta paggena songo sospese mmo'. 'E ddate cuntenute ccà nun s'agghiurnarranno.",
        "import-interwiki-history": "Copia tutt' 'a storia d' 'e verziune 'e sta paggena",
        "import-interwiki-templates": "Include tutt' 'e template",
        "import-interwiki-submit": "Mpurta",
-       "import-interwiki-namespace": "Namespace 'e destinazione:",
-       "import-interwiki-rootpage": "Paggena princepale 'e destinazione (opzionale):",
+       "import-mapping-default": "Importa a pizze prescigliute",
+       "import-mapping-namespace": "Importa a nu namespace:",
+       "import-mapping-subpage": "Importa comme fossero subpaggene d' 'a paggena ccà:",
        "import-upload-filename": "Nomme d' 'o file",
        "import-comment": "Commento:",
        "importtext": "Pe' piacere spurtate 'o file d' 'a wiki surgente ausanno l'[[Special:Export|utilità 'e sportazione]].\nScarrecatevella dint' 'o computer d' 'o vuosto e carrecate n'ata vota ccà.",
        "tags-edit-reason": "Mutivo:",
        "tags-edit-revision-submit": "Appreca cagnamiente a {{PLURAL:$1|sta verziona|$1 verziune}}",
        "tags-edit-logentry-submit": "Appreca cagnamiente a {{PLURAL:$1|sta entrata 'e riggistro|sti $1 entrate 'e riggistro}}",
-       "tags-edit-success": "<strong>'E cagnamiente se so' apprecate.</strong>",
-       "tags-edit-failure": "<strong>'E cagnamiente nun se putevano apprecà:</strong>\n$1",
+       "tags-edit-success": "'E cagnamiente se so' apprecate.",
+       "tags-edit-failure": "'E cagnamiente nun se putevano apprecà:\n$1",
        "tags-edit-nooldid-title": "Verziona nun specificata",
        "tags-edit-nooldid-text": "Nun avite specificato nu target 'e verziona addò s'avess'apprecà sta funzione, o 'a verziona specificata nun esiste.",
        "tags-edit-none-selected": "Pe' piacere sciglite minimo nu tag pe' luvà o azzeccà.",
index 2e761fc..98f487f 100644 (file)
        "history-feed-description": "Revisjonshistorikk for denne siden",
        "history-feed-item-nocomment": "$1 på $2",
        "history-feed-empty": "Den etterspurte siden finnes ikke.\nDen kan ha blitt slettet fra wikien, eller fått et nytt navn.\nPrøv å [[Special:Search|søke]] etter beslektede sider.",
+       "history-edit-tags": "Rediger merkene til de valgte revisjonene",
        "rev-deleted-comment": "(redigeringskommentar fjernet)",
        "rev-deleted-user": "(brukernavn fjernet)",
        "rev-deleted-event": "(loggoppføring fjernet)",
        "listfiles-delete": "slett",
        "listfiles-summary": "Denne spesialsiden viser alle opplastede filer.",
        "listfiles_search_for": "Søk etter filnavn:",
+       "listfiles-userdoesnotexist": "Brukerkontoen «$1» er ikke registrert.",
        "imgfile": "fil",
        "listfiles": "Filliste",
        "listfiles_thumb": "Miniatyrbilde",
        "import-interwiki-history": "Kopier all historikk for denne siden",
        "import-interwiki-templates": "Inkluder alle maler",
        "import-interwiki-submit": "Importer",
-       "import-interwiki-namespace": "Målnavnerom:",
-       "import-interwiki-rootpage": "Destinasjonens grunnside (valgfri):",
        "import-upload-filename": "Filnavn:",
        "import-comment": "Kommentar:",
        "importtext": "Importer filen fra kildewikien med [[Special:Export|eksporteringsverktøyet]].\nLagre den på din egen datamaskin og last den opp her.",
        "patrol-log-page": "Patruljeringslogg",
        "patrol-log-header": "Dette er en logg over patruljerte sideversjoner.",
        "log-show-hide-patrol": "$1 patruljeringslogg",
+       "log-show-hide-tag": "$1 merkelogg",
        "deletedrevision": "Slettet gammel revisjon $1.",
        "filedeleteerror-short": "Feil under filsletting: $1",
        "filedeleteerror-long": "Feil oppsto under filsletting:\n\n$1",
index 640e2c2..721933a 100644 (file)
        "preview": "Naokieken",
        "showpreview": "Bewarking naokieken",
        "showdiff": "Verschil bekieken",
-       "anoneditwarning": "'''Waorschuwing:''' je bin niet an-emeld.\nJoew IP-adres zal op-esleugen wörden a'j wiezigingen op disse zied anbrengen.",
+       "anoneditwarning": "<strong>Waorschuwing:</strong> je bin niet an-emeld.\nJoew IP-adres zal op-esleugen wörden a'j wiezigingen op disse zied anbrengen. A'j je eigen <strong>[$1 anmelden]</strong> of <strong>[$2 inschrieven]</strong> dan koemen joew bewarkingen onder joew gebrukersnaam te staon, samen mit aandere veurdelen.",
        "anonpreviewwarning": "''Je bin niet an-emeld.''\n''Deur de bewarking op te slaon wörden joew IP-adres op-esleugen in de ziedgeschiedenisse.''",
        "missingsummary": "'''Herinnering:''' je hebben gien samenvatting op-egeven veur de bewarking. A'j noen weer op ''Opslaon'' klikken wörden de bewarking zonder samenvatting op-esleugen.",
        "missingcommenttext": "Plaots joew opmarking hieronder.",
        "showhideselectedversions": "Ekeuzen versies bekieken/verbargen",
        "editundo": "weerummedreien",
        "diff-empty": "(Gien verschil)",
+       "diff-multi-sameuser": "({{PLURAL:$1|n Tussenliggende versie|$1 tussenliggende versies}} deur de zelfde gebruker is verbörgen)",
        "diff-multi-manyusers": "($1 tussenliggende {{PLURAL:$1|versie|versies}} deur meer as $2 {{PLURAL:$2|gebruker|gebrukers}} niet weeregeven)",
        "difference-missing-revision": "{{PLURAL:$2|Eén versie|$2 versies}} van disse verschillen ($1) {{PLURAL:$2|is|bin}} niet evunnen.\n\nDit kömp meestentieds deur t volgen van n verouwerde verwiezing naor n zied die vortedaon is.\nWaorschienlik ku'j der meer gegevens over vienen in t [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} vortdologboek].",
        "searchresults": "Zeukresultaoten",
        "searchrelated": "verwaant",
        "searchall": "alles",
        "showingresults": "Hieronder {{PLURAL:$1|steet '''1''' resultaot|staon '''$1''' resultaoten}}  <b>$1</b> vanaof nummer <b>$2</b>.",
+       "search-showingresults": "{{PLURAL:$4|Resultaot <strong>$1</strong> van <strong>$2</strong>|Resultaoten <strong>$1 - $2</strong> van <strong>$3</strong>}}",
        "search-nonefound": "Der bin gien resultaoten veur de zeukopdrachte.",
        "powersearch-legend": "Uutgebreid zeuken",
        "powersearch-ns": "Zeuken in naamruumten:",
        "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-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",
        "rcshowhidemine-show": "Bekiek",
        "rcshowhidemine-hide": "Verbarg",
        "rclinks": "Bekiek de leste $1 wiezigingen van de aofgeleupen $2 dagen<br />$3",
-       "diff": "wiezig",
+       "diff": "wiez",
        "hist": "gesch",
        "hide": "verbarg",
        "show": "bekiek",
        "querypage-disabled": "Disse spesiale zied is uutezet um prestasieredens.",
        "booksources": "Boekinformasie",
        "booksources-search-legend": "Zeuk informasie over n boek",
+       "booksources-search": "Zeuken",
        "booksources-text": "Hieronder steet n lieste mit verwiezingen naor aandere websteeën die nieje of wat ouwere boeken verkopen, en daor hebben ze warschienlik meer informasie over t boek da'j zeuken:",
        "booksources-invalid-isbn": "De op-egeven ISBN klop niet; kiek effen nao o'j gien fout emaakt hebben bie de invoer.",
        "specialloguserlabel": "Uutvoerende gebruker:",
        "import-interwiki-history": "Kopieer de hele geschiedenisse veur disse zied",
        "import-interwiki-templates": "Alle mallen opnemen",
        "import-interwiki-submit": "Invoeren",
-       "import-interwiki-namespace": "Doelnaamruumte:",
-       "import-interwiki-rootpage": "Baosiszied veur doel (opsioneel):",
        "import-upload-filename": "Bestaandsnaam:",
        "import-comment": "Opmarkingen:",
        "importtext": "Gebruuk de [[Special:Export|uutvoerfunksie]] in de wiki waor de informasie vandaon kömp.\nSlao t op joew eigen systeem op, en stuur t daornao hier op.",
        "tooltip-pt-mycontris": "Liest van oew biejdraegen",
        "tooltip-pt-login": "Iej wördt van harte oetneugd um oe an te melden as gebroeker, mer t is nich verplicht",
        "tooltip-pt-logout": "Ofmaelden",
+       "tooltip-pt-createaccount": "Schrief je eigen veural in en meld je an, mer t is niet verplicht.",
        "tooltip-ca-talk": "Loat n oaverlegtekst oaver disse ziede zeen",
        "tooltip-ca-edit": "Bewaerk disse ziede",
        "tooltip-ca-addsection": "Niej oonderwaerp tovogen",
        "logentry-rights-rights": "$1 {{GENDER:$2|hef}} groepslidmaotschap veur $3 ewiezigd van $4 naor $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|hef}} t groepslidmaotschap ewiezigd veur $3",
        "logentry-rights-autopromote": "$1 {{GENDER:$2|is}} automaties bevorderd van $4 tot $5",
+       "logentry-upload-upload": "$1 hef $3 {{GENDER:$2|op-estuurd}}",
        "rightsnone": "(gien)",
        "revdelete-summary": "samenvatting bewarken",
        "feedback-adding": "Joew kommentaar wörden op de zied ezet...",
index f8301c3..675cbaa 100644 (file)
        "import-interwiki-history": "Importeer all Versionen vun disse Siet",
        "import-interwiki-templates": "All Vörlagen inslaten",
        "import-interwiki-submit": "Rinhalen",
-       "import-interwiki-namespace": "Sied in dissen Naamruum halen:",
        "import-upload-filename": "Dateinaam:",
        "import-comment": "Kommentar:",
        "importtext": "Exporteer de Siet vun dat Utgangswiki mit Special:Export un laad de Datei denn över disse Siet weer hooch.",
index b31b2aa..3a53438 100644 (file)
        "import-interwiki-history": "यो पृष्ठकोलागि सबै इतिहास संशोधनहरु प्रतिलिपि गर्ने",
        "import-interwiki-templates": "सबै टेम्प्लेटहरु(नमुना) समेट्ने",
        "import-interwiki-submit": "आयात",
-       "import-interwiki-namespace": "गन्तव्य नेमस्पेस :",
        "import-upload-filename": "फाइल नाम:",
        "import-comment": "टिप्पणी :",
        "importstart": "पृष्ठ आयात गरिँदै...",
index 1e95d91..3020f99 100644 (file)
        "wrongpassword": "Het opgegeven wachtwoord is onjuist.\nProbeer het opnieuw.",
        "wrongpasswordempty": "Het opgegeven wachtwoord was leeg.\nProbeer het opnieuw.",
        "passwordtooshort": "Wachtwoorden moeten uit minstens {{PLURAL:$1|$1 teken|$1 tekens}} bestaan.",
+       "passwordtoolong": "Wachtwoorden kunnen niet langer zijn dan {{PLURAL:$1|een teken|$1 tekens}}.",
        "password-name-match": "Uw wachtwoord en uw gebruikersnaam mogen niet overeenkomen.",
        "password-login-forbidden": "Het gebruik van deze gebruikersnaam met dit wachtwoord is niet toegestaan.",
        "mailmypassword": "Nieuw wachtwoord e-mailen",
        "missingcommentheader": "'''Let op:''' u hebt geen onderwerp/kop voor deze opmerking opgegeven.\nAls u opnieuw op \"{{int:savearticle}}\" klikt, wordt uw wijziging zonder een onderwerp/kop opgeslagen.",
        "summary-preview": "Bewerkingssamenvatting nakijken:",
        "subject-preview": "Onderwerp/kop nakijken:",
+       "previewerrortext": "Er is een fout opgetreden bij het voorvertonen van je bewerkingen.",
        "blockedtitle": "Gebruiker is geblokkeerd",
        "blockedtext": "'''Uw gebruiker of IP-adres is geblokkeerd.'''\n\nDe blokkade is uitgevoerd door $1.\nDe opgegeven reden is ''$2''.\n\n* Aanvang blokkade: $8\n* Einde blokkade: $6\n* Bedoeld te blokkeren: $7\n\nU kunt contact opnemen met $1 of een andere [[{{MediaWiki:Grouppage-sysop}}|beheerder]] om de blokkade te bespreken.\nU kunt geen gebruik maken van de functie \"Deze gebruiker e-mailen\", tenzij u een geldig e-mailadres hebt opgegeven in uw [[Special:Preferences|voorkeuren]] en het gebruik van deze functie niet geblokkeerd is.\nUw huidige IP-adres is $3 en het blokkadenummer is #$5.\nVermeld alle bovenstaande gegevens als u ergens op deze blokkade reageert.",
        "autoblockedtext": "Uw IP-adres is automatisch geblokkeerd, omdat het is gebruikt door een andere gebruiker, die is geblokkeerd door $1.\nDe opgegeven reden is:\n\n:''$2''\n\n* Aanvang blokkade: $8\n* Einde blokkade: $6\n* Bedoeld te blokkeren: $7\n\nU kunt deze blokkade bespreken met $1 of een andere [[{{MediaWiki:Grouppage-sysop}}|beheerder]].\n\nU kunt geen gebruik maken van de functie \"Deze gebruiker e-mailen\", tenzij u een geldig e-mailadres hebt opgegeven in uw [[Special:Preferences|voorkeuren]] en het gebruik van deze functie niet is geblokkeerd.\n\nUw huidige IP-adres is $3 en het blokkadenummer is #$5.\nVermeld alle bovenstaande gegevens als u ergens op deze blokkade reageert.",
        "history-feed-description": "Bewerkingsoverzicht voor deze pagina op de wiki",
        "history-feed-item-nocomment": "$1 op $3 om $4",
        "history-feed-empty": "De gevraagde pagina bestaat niet.\nWellicht is die verwijderd of hernoemd.\n[[Special:Search|Doorzoek de wiki]] voor relevante pagina's.",
+       "history-edit-tags": "Labels van geselecteerde versies bewerken",
        "rev-deleted-comment": "(bewerkingssamenvatting verwijderd)",
        "rev-deleted-user": "(gebruikersnaam verwijderd)",
        "rev-deleted-event": "(logboekregel verwijderd)",
        "revdelete-submit": "Toepassen op de geselecteerde {{PLURAL:$1|bewerking|bewerkingen}}",
        "revdelete-success": "'''De zichtbaarheid van de wijziging is bijgewerkt.'''",
        "revdelete-failure": "'''De zichtbaarheid van de wijziging kon niet bijgewerkt worden:'''\n$1",
-       "logdelete-success": "<strong>Zichtbaarheid van de gebeurtenis ingesteld.</strong>",
+       "logdelete-success": "Zichtbaarheid van de gebeurtenis ingesteld.",
        "logdelete-failure": "'''De zichtbaarheid van de logboekregel kon niet ingesteld worden:'''\n$1",
        "revdel-restore": "Zichtbaarheid wijzigen",
        "pagehist": "Geschiedenis",
        "right-protect": "Beveiligingsniveaus wijzigen",
        "right-editprotected": "Pagina's bewerken die beveiligd zijn als \"{{int:protect-level-sysop}}\"",
        "right-editsemiprotected": "Pagina's bewerken die beveiligd zijn als \"{{int:protect-level-autoconfirmed}}\"",
+       "right-editcontentmodel": "Het paginainhoudmodel bewerken",
        "right-editinterface": "De gebruikersinterface bewerken",
        "right-editusercssjs": "De CSS- en JavaScriptbestanden van andere gebruikers bewerken",
        "right-editusercss": "De CSS-bestanden van andere gebruikers bewerken",
        "right-override-export-depth": "Pagina's exporteren inclusief pagina's waarnaar verwezen wordt tot een diepte van vijf",
        "right-sendemail": "E-mail versturen aan andere gebruikers",
        "right-passwordreset": "E-mails voor wachtwoord opnieuw instellen bekijken",
+       "right-managechangetags": "[[Special:Tags|Labels]] aan de database toevoegen of eruit verwijderen",
+       "right-applychangetags": "[[Special:Tags|Labels]] aan bewerkingen toewijzen",
        "newuserlogpage": "Logboek nieuwe gebruikers",
        "newuserlogpagetext": "Hieronder staan de nieuw ingeschreven gebruikers",
        "rightslog": "Gebruikersrechtenlogboek",
        "action-viewmywatchlist": "uw eigen volglijst te bekijken",
        "action-viewmyprivateinfo": "uw eigen privégegevens te bekijken",
        "action-editmyprivateinfo": "uw eigen privégegevens te bewerken",
+       "action-editcontentmodel": "de paginainhoudmodel te bewerken",
        "action-managechangetags": "labels aanmaken en verwijderen",
+       "action-applychangetags": "labels aan je bewerkingen toe te voegen",
        "nchanges": "$1 {{PLURAL:$1|bewerking|bewerkingen}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|sinds uw laatste bezoek}}",
        "enhancedrc-history": "geschiedenis",
        "listfiles-delete": "verwijderen",
        "listfiles-summary": "Op deze speciale pagina zijn alle toegevoegde bestanden te bekijken.",
        "listfiles_search_for": "Zoeken naar bestand:",
+       "listfiles-userdoesnotexist": "Het gebruikersaccount \"$1\" bestaat niet.",
        "imgfile": "bestand",
        "listfiles": "Bestandslijst",
        "listfiles_thumb": "Miniatuur",
        "logempty": "Er zijn geen regels in het logboek die voldoen aan deze criteria.",
        "log-title-wildcard": "Pagina's zoeken die met deze tekens beginnen",
        "showhideselectedlogentries": "Geselecteerde logboekregels weergeven of verbergen",
+       "log-edit-tags": "Labels van geselecteerde logboekregels bewerken",
        "allpages": "Alle pagina's",
        "nextpage": "Volgende pagina ($1)",
        "prevpage": "Vorige pagina ($1)",
        "import-interwiki-history": "Volledige geschiedenis van deze pagina ook kopiëren",
        "import-interwiki-templates": "Alle sjablonen opnemen",
        "import-interwiki-submit": "Importeren",
-       "import-interwiki-namespace": "Doelnaamruimte:",
-       "import-interwiki-rootpage": "Basispagina voor doel (optioneel):",
+       "import-mapping-subpage": "Importeren als subpagina's van de volgende pagina:",
        "import-upload-filename": "Bestandsnaam:",
        "import-comment": "Opmerking:",
        "importtext": "Gebruik de [[Special:Export|exportfunctie]] in de wiki waar de informatie vandaan komt.\nSla de uitvoer op uw eigen computer op, en voeg die daarna hier toe.",
        "markedaspatrollederrornotify": "Markeren als gecontroleerd mislukt.",
        "patrol-log-page": "Markeerlogboek",
        "patrol-log-header": "Dit logboek bevat versies die gemarkeerd zijn als gecontroleerd.",
-       "log-show-hide-patrol": "Markeerlogboek $1",
+       "log-show-hide-patrol": "markeerlogboek $1",
+       "log-show-hide-tag": "labellogboek $1",
        "deletedrevision": "De oude versie $1 is verwijderd",
        "filedeleteerror-short": "Fout bij het verwijderen van bestand: $1",
        "filedeleteerror-long": "Er zijn fouten opgetreden bij het verwijderen van het bestand:\n\n$1",
        "tags-create-already-exists": "Het label \"$1\" bestaat al.",
        "tags-delete-title": "Label verwijderen",
        "tags-delete-reason": "Reden:",
+       "tags-delete-submit": "Deze tag onomkeerbaar verwijderen",
        "tags-delete-not-found": "Het label \"$1\" bestaat niet.",
        "tags-activate-title": "Label activeren",
        "tags-activate-reason": "Reden:",
        "tags-deactivate-question": "U staat op het punt om het label \"$1\" te deactiveren.",
        "tags-deactivate-reason": "Reden:",
        "tags-deactivate-submit": "Deactiveren",
+       "tags-edit-title": "Labels bewerken",
+       "tags-edit-manage-link": "Labels beheren",
+       "tags-edit-existing-tags": "Bestaande labels:",
+       "tags-edit-existing-tags-none": "''Geen''",
+       "tags-edit-new-tags": "Nieuwe labels:",
+       "tags-edit-add": "Deze labels toevoegen:",
+       "tags-edit-remove": "Deze labels verwijderen:",
+       "tags-edit-remove-all-tags": "(alle labels verwijderen)",
+       "tags-edit-chosen-placeholder": "Selecteer een paar labels",
+       "tags-edit-reason": "Reden:",
        "comparepages": "Pagina's vergelijken",
        "compare-page1": "Pagina 1",
        "compare-page2": "Pagina 2",
        "compare-revision-not-exists": "De versie die u hebt opgegeven bestaat niet.",
        "dberr-problems": "Onze excuses. Deze site ondervindt op het moment technische problemen.",
        "dberr-again": "Wacht een aantal minuten en probeer het daarna opnieuw.",
-       "dberr-info": "(Kan geen verbinding maken met de databaseserver: $1)",
-       "dberr-info-hidden": "(Kan geen verbinding maken met de databaseserver)",
+       "dberr-info": "(Kan geen toegang krijgen tot database: $1)",
+       "dberr-info-hidden": "(Kan geen toegang krijgen tot database)",
        "dberr-usegoogle": "Wellicht kunt u in de tussentijd zoeken via Google.",
        "dberr-outofdate": "Let op: hun indexen van onze pagina's zijn wellicht niet recent.",
        "dberr-cachederror": "Deze pagina is een kopie uit de cache en is wellicht niet de meest recente versie.",
        "logentry-upload-overwrite": "$1 {{GENDER:$2|heeft}} een nieuwe versie van $3 geüpload",
        "logentry-upload-revert": "$1 heeft $3 {{GENDER:$2|geupload}}",
        "logentry-managetags-create": "$1 heeft het label \"$4\" {{GENDER:$2|aangemaakt}}",
+       "log-name-tag": "Labellogboek",
+       "logentry-tag-update-add-revision": "$1 heeft {{PLURAL:$7|het label|de labels}} $6 aan versie $4 van pagina $3 {{GENDER:$2|toegevoegd}}",
+       "logentry-tag-update-add-logentry": "$1 heeft {{PLURAL:$7|het label|de labels}} $6 aan logboekregel $5 van pagina $3 {{GENDER:$2|toegevoegd}}",
+       "logentry-tag-update-remove-revision": "$1 heeft {{PLURAL:$9|het label|de labels}} $8 van versie $4 van pagina $3 {{GENDER:$2|verwijderd}}",
+       "logentry-tag-update-remove-logentry": "$1 heeft {{PLURAL:$9|het label|de labels}} $8 van logboekregel $5 van pagina $3 {{GENDER:$2|verwijderd}}",
+       "logentry-tag-update-revision": "$1 heeft de labels van versie $4 van pagina $3  {{GENDER:$2|bijgewerkt}} ($6 {{PLURAL:$7|toegevoegd}}; $8 {{PLURAL:$9|verwijderd}})",
+       "logentry-tag-update-logentry": "$1 heeft de labels van logboekregel $5 van pagina $3 {{GENDER:$2|bijgewerkt}} ($6 {{PLURAL:$7|toegevoegd}}; $8 {{PLURAL:$9|verwijderd}})",
        "rightsnone": "(geen)",
        "revdelete-summary": "bewerkingssamenvatting",
        "feedback-adding": "Uw terugkoppeling wordt aan de pagina toegevoegd...",
        "feedback-bugornote": "Als u zover bent om een technisch probleem in detail te beschrijven, [$1 rapporteer dan een bug].\nAnders kunt u ook het eenvoudige formulier hieronder gebruiken. Uw reactie wordt dan toegevoegd aan de pagina \"[$3 $2]\", samen met uw gebruikersnaam en de browser die u gebruikt.",
        "feedback-cancel": "Annuleren",
        "feedback-close": "Afgerond",
+       "feedback-external-bug-report-button": "Een technische taak indienen",
+       "feedback-dialog-title": "Terugkoppeling verzenden",
        "feedback-error-title": "Fout",
        "feedback-error1": "Fout: onbekend resultaat uit de API",
        "feedback-error2": "Fout: de bewerking is mislukt",
index b9aa6fb..56cabca 100644 (file)
@@ -22,7 +22,8 @@
                        "לערי ריינהארט",
                        "아라",
                        "Gaute",
-                       "Macofe"
+                       "Macofe",
+                       "Chameleon222"
                ]
        },
        "tog-underline": "Strek under lenkjer:",
        "preview": "Førehandsvising",
        "showpreview": "Førehandsvis",
        "showdiff": "Sjå skilnader",
-       "anoneditwarning": "'''Åtvaring:''' Du er ikkje innlogga.\nIP-adressa di vert lagra i endringshistorikken til sida.",
+       "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.",
        "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.",
        "missingcommenttext": "Ver venleg og skriv ein kommentar nedanfor.",
        "currentrev": "Versjonen no",
        "currentrev-asof": "Versjonen no frå $1",
        "revisionasof": "Versjonen frå $1",
-       "revision-info": "Versjonen frå $1 av $2",
+       "revision-info": "Versjonen frå $1 av {{GENDER:$6|$2}}$7",
        "previousrevision": "← Eldre versjon",
        "nextrevision": "Nyare versjon →",
        "currentrevisionlink": "Versjonen no",
        "shown-title": "Syn $1 {{PLURAL:$1|resultat|resultat}} for kvar side",
        "viewprevnext": "Vis ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-exists": "* Sida '''[[$1]]'''",
-       "searchmenu-new": "'''Opprett sida «[[:$1|$1]]» på denne wikien.'''",
+       "searchmenu-new": "'''Opprett sida «[[:$1|$1]]» på denne wikien.''' {{PLURAL:$2|0=|Sjå også sida som vart funnen med søket ditt.|Sjå også søkeresultata som blei funne.}}",
        "searchprofile-articles": "Innhaldssider",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Alt",
        "searchrelated": "relatert",
        "searchall": "alle",
        "showingresults": "Nedanfor er opp til {{PLURAL:$1|'''eitt'''|'''$1'''}} resultat som byrjar med nummer '''$2''' vist{{PLURAL:$1||e}}.",
+       "search-showingresults": "Resultat <strong>{{PLURAL:$4|$1|$1–$2}}</strong> av <strong>$3</strong>",
        "search-nonefound": "Ingen resultat svarte til førespurnaden.",
        "powersearch-legend": "Avansert søk",
        "powersearch-ns": "Søk i namnerom:",
        "ipblocklist": "Blokkerte IP-adresser og brukarnamn",
        "ipblocklist-legend": "Finn ein blokkert brukar",
        "blocklist-userblocks": "Gøym kontoblokkeringar",
-       "blocklist-tempblocks": "Gøym mellombelse blokkeringar",
+       "blocklist-tempblocks": "Gøym mellombels blokkeringar",
        "blocklist-addressblocks": "Gøym einskilde IP-blokkeringar",
        "blocklist-rangeblocks": "Gøym intervallblokkeringar",
        "blocklist-timestamp": "Tidsmerke",
        "import-interwiki-history": "Kopier all historikken for denne sida",
        "import-interwiki-templates": "Inkluder alle malar",
        "import-interwiki-submit": "Importer",
-       "import-interwiki-namespace": "Målnamnerom:",
-       "import-interwiki-rootpage": "Målrotside (valfri):",
        "import-upload-filename": "Filnamn:",
        "import-comment": "Kommentar:",
        "importtext": "Lagre fila frå kjeldewikien med [[Special:Export|eksporteringsverktøyet]] på din eigen datamaskin, og last henne så opp her.",
        "tooltip-pt-mycontris": "Liste over bidraga dine",
        "tooltip-pt-login": "Det er ikkje obligatorisk å logga inn, men medfører mange fordelar.",
        "tooltip-pt-logout": "Logg ut",
+       "tooltip-pt-createaccount": "Me oppfordrar til at du oppretter ein konto og loggar inn, men det er ikkje påkravd.",
        "tooltip-ca-talk": "Diskusjon om innhaldssida",
        "tooltip-ca-edit": "Du kan endre denne sida. Bruk førehandsvisings-knappen før du lagrar.",
        "tooltip-ca-addsection": "Start ein ny bolk",
        "logentry-rights-rights": "$1 {{GENDER:$2|endra}} gruppemedlemskap for $3 frå $4 til $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|endra}} gruppemedlemskap for $3",
        "logentry-rights-autopromote": "$1 vart automatisk {{GENDER:$2|forfremja}} frå $4 til $5",
+       "logentry-upload-upload": "$1 {{GENDER:$2|lasta opp}} $3",
        "rightsnone": "(ingen)",
        "revdelete-summary": "Samandrag",
        "feedback-adding": "Legg til attendemeldinga til sida...",
index a5953d7..cad960e 100644 (file)
        "rev-showdeleted": "afichar",
        "revisiondelete": "Suprimir/Restablir de versions",
        "revdelete-nooldid-title": "Cibla per la revision invalida",
-       "revdelete-nooldid-text": "Avètz pas precisat la o las revision(s) cibla(s) per utilizar aquesta foncion, la revision cibla existís pas, o alara la revision cibla es la qu'es en cors.",
+       "revdelete-nooldid-text": "Avètz pas precisat la o las revision(s) cibla(s) per aquesta foncion, o alara la revision especificada existís pas, o alara ensajatz d'amagar la revision actuala.",
        "revdelete-no-file": "Lo fichièr especificat existís pas.",
        "revdelete-show-file-confirm": "Sètz segur(a) que volètz veire la revision suprimida del fichièr « <nowiki>$1</nowiki> » datant del $2 a $3?",
        "revdelete-show-file-submit": "Òc",
        "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-editsemiprotected": "Modificar las paginas protegidas amb « {{int:protect-level-autoconfirmed}} »",
+       "right-editcontentmodel": "Modificar lo modèl de contengut d’una pagina",
        "right-editinterface": "Modificar l'interfàcia d'utilizaire",
        "right-editusercssjs": "Modificar los fichièrs CSS e JS d'autres utilizaires",
        "right-editusercss": "Modificar los fichièrs CSS d'autres utilizaires",
        "import-interwiki-history": "Copiar totas las versions de l'istoric d'aquesta pagina",
        "import-interwiki-templates": "Enclure totes los modèls",
        "import-interwiki-submit": "Importar",
-       "import-interwiki-namespace": "Espaci de noms de destinacion :",
-       "import-interwiki-rootpage": "Pagina raiç de destinacion (opcionala):",
        "import-upload-filename": "Nom del fichièr :",
        "import-comment": "Comentari :",
        "importtext": "Exportatz lo fichièr dempuèi lo wiki d’origina en utilizant [[Special:Export|aisina d'exportacion]].\nSalvatz-lo sus vòstre disc dur puèi importatz-lo aicí.",
        "tags-activate": "activar",
        "tags-deactivate": "desactivar",
        "tags-hitcount": "$1 {{PLURAL:$1|cambiament|cambiaments}}",
+       "tags-manage-no-permission": "Avètz pas la permission de gerir las modificacions de balisas.",
        "tags-create-heading": "Crear una balisa novèla",
        "tags-create-tag-name": "Nom de la balisa :",
        "tags-create-reason": "Rason :",
index a89a229..0ad67f7 100644 (file)
@@ -15,9 +15,9 @@
                        "Macofe"
                ]
        },
-       "tog-underline": "ତଳà­\87 à¬¥à¬¿à¬¬à¬¾ à¬²à¬¿à¬\99à­\8dà¬\95:",
+       "tog-underline": "ଲିà¬\99à­\8dà¬\95ତଳà­\87à¬\97ାର à¬\9fାଣିବା:",
        "tog-hideminor": "ନିକଟରେ ହୋଇଥିବା ଛୋଟ ବଦଳସବୁକୁ ଲୁଚାଇବେ",
-       "tog-hidepatrolled": "ନà¬\97ଦ à¬¬à¬¦à¬³à¬°à­\87 à¬¥à¬¿à¬¬à¬¾ à¬\9cà¬\97ାହà­\8bଇଥିବା ବଦଳ ସବୁକୁ ଲୁଚାଇବେ",
+       "tog-hidepatrolled": "ନà¬\97ଦ à¬¬à¬¦à¬³à¬°à­\87 à¬¨à¬¿à¬°à¬¿à¬\95à­\8dଷଣ à¬\95ରାଯାଇଥିବା ବଦଳ ସବୁକୁ ଲୁଚାଇବେ",
        "tog-newpageshidepatrolled": "ନୂଆ ପୃଷ୍ଠାତାଲିକାରୁ ଜଗାହୋଇଥିବା ବଦଳସବୁକୁ ଲୁଚାଇବେ",
        "tog-extendwatchlist": "କେବଳ ନଗଦ ହିଁ ନୁହେଁ, ସବୁଯାକ ବଦଳକୁ ଦେଖାଇବା ପାଇଁ ଦେଖଣାତାଲିକାକୁ ପୂରା ଦେଖାଇବେ",
        "tog-usenewrc": "ନଗଦ ବଦଳରେ ପୃଷ୍ଠା ଅନୁଯାୟୀ ଗୋଷ୍ଠୀ ବଦଳ ଏବଂ ଦେଖଣା",
@@ -40,7 +40,7 @@
        "tog-shownumberswatching": "ଦେଖୁଥିବା ବ୍ୟବହାରକାରୀଙ୍କ ସଂଖ୍ୟା ଦେଖାନ୍ତୁ",
        "tog-oldsig": "ଏବେକାର ଦସ୍ତଖତ:",
        "tog-fancysig": "ଦସ୍ତଖତକୁ ଉଇକିଟେକ୍ସଟ ଭାବରେ ଗଣିବେ (ଆପେଆପେ ଥିବା ଲିଙ୍କ ବିନା)",
-       "tog-uselivepreview": "ସାଥେ ସାଥେ ଚାଲିଥିବା ଦେଖଣା ବ୍ୟବହାର କରିବେ (ପରୀକ୍ଷାରେ ଅଛି)",
+       "tog-uselivepreview": "ସାଥେ ସାଥେ ଚାଲିଥିବା ଦେଖଣା ବ୍ୟବହାର କରିବେ",
        "tog-forceeditsummary": "ଖାଲି ସମ୍ପାଦନା ସାରକଥାକୁ ଯିବା ବେଳେ ମୋତେ ଜଣାଇବେ",
        "tog-watchlisthideown": "ମୋ ଦେଖଣା ତାଲିକାରେ ମୋ ନିଜର ସମ୍ପାଦନାଗୁଡ଼ିକ ଲୁଚାଇବେ",
        "tog-watchlisthidebots": "ଦେଖଣା ତାଲିକାରେ ସ୍ୱୟଂଚାଳକ (Bot)ର ସମ୍ପାଦନାମାନ ଲୁଚାଇବେ",
        "lastmodifiedat": "ଏହି ପୃଷ୍ଠାଟି $1 ତାରିଖ $2 ବେଳେ ବଦଳାଯାଇଥିଲା ।",
        "viewcount": "ଏହି ପୃଷ୍ଠାଟି {{PLURAL:$1|ଥରେ|$1 ଥର}} ଖୋଲାଯାଇଛି ।",
        "protectedpage": "କିଳାଯାଇଥିବା ପୃଷ୍ଠା",
-       "jumpto": "ଡà­\87à¬\87à¬\81ଯିବେ",
+       "jumpto": "ସିଧାସଳà¬\96 ଯିବେ",
        "jumptonavigation": "ଦିଗବାରେଣିକୁ",
        "jumptosearch": "ଖୋଜିବେ",
        "view-pool-error": "କ୍ଷମା କରିବେ, ସର୍ଭରସବୁ ଏବେ ମନ୍ଦ ହୋଇଯାଇଅଛନ୍ତି ।\nଅନେକ ସଭ୍ୟ ଏହି ଏକା ପୃଷ୍ଠାଟି ଦେଖିବାକୁ ଚେଷ୍ଟାକରୁଅଛନ୍ତି ।\nଏହି ପୃଷ୍ଠାକୁ ଆଉଥରେ ଖୋଲିବା ଆଗରୁ ଦୟାକରି କିଛି କ୍ଷଣ ଅପେକ୍ଷା କରନ୍ତୁ ।\n$1",
        "pool-queuefull": "ପୁଲ ଧାଡ଼ିଟି ଭରିଯାଇଅଛି",
        "pool-errorunknown": "ଅଜଣା ଅସୁବିଧା",
        "pool-servererror": "ଏହି ପୁଲ କାଉଣ୍ଟର ସର୍ଭିସ ଉପଲବ୍ଧ ($1) ନାହିଁ ।",
+       "poolcounter-usage-error": "ବ୍ୟବହାରିକ ତ୍ରୁଟି: $1",
        "aboutsite": "{{SITENAME}} ବାବଦରେ",
        "aboutpage": "Project:ବାବଦରେ",
        "copyright": "ଯଦି ଉଲ୍ଲେଖ ହୋଇନାହିଁ ଏହା $1 ଅଧୀନରେ ବିତରିତ ।",
        "disclaimers": "ଆମେ ଦାୟୀ ନୋହୁଁ",
        "disclaimerpage": "Project:ଆମେ ଦାୟୀ ନୋହୁଁ",
        "edithelp": "ଲେଖା ସାହାଯ୍ୟ",
+       "helppage-top-gethelp": "ସାହାଯ୍ୟ",
        "mainpage": "ପ୍ରଧାନ ପୃଷ୍ଠା",
        "mainpage-description": "ପ୍ରଧାନ ପୃଷ୍ଠା",
        "policy-url": "Project:ନୀତି",
        "site-rss-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": "ସାନରୁ ବଡ଼ କ୍ରମେ ସଜାନ୍ତୁ",
        "readonly_lag": "ଏହି ଡାଟାବେସଟିରେ ଆପେ ଆପେ ତାଲା ପଡ଼ିଯାଇଅଛି, ଇତିମଧ୍ୟରେ ସାନ ଡାଟାବେସଟି ମୁଖ୍ୟ ଡାଟାବେସ ସହିତ ଯୋଗାଯୋଗ କରୁଅଛି",
        "internalerror": "ଭିତରର ଭୁଲ",
        "internalerror_info": "ଭିତରର ଭୁଲ : $1",
+       "internalerror-fatal-exception": "\"$1\" ପ୍ରକାରର ତ୍ରୁଟି ।",
        "filecopyerror": "\"$1\" ରୁ \"$2\" କୁ ନକଲ କରିପାରିଲୁଁ ନାହିଁ ।",
        "filerenameerror": "\"$1\" ରୁ \"$2\" କୁ ନାମ ବଦଳ କରିପାରିଲୁଁ ନାହିଁ ।",
        "filedeleteerror": "\"$1\" ଫାଇଲଟି ଲିଭାଇ ପାରିଲୁଁ ନାହିଁ ।",
        "directorycreateerror": "\"$1\" ସୂଚିଟି ତିଆରି କରିପାରିଲୁଁ ନାହିଁ ।",
+       "directoryreadonlyerror": "\"$1\" ଖାଲି ପଢି ହେଉଥିବା ଡିରୋକ୍ଟୋରୀ ।",
+       "directorynotreadableerror": "\"$1\" ଡିରୋକ୍ଟୋରୀଟି ପଢି ହେବ ନାହିଁ ।",
        "filenotfound": "\"$1\" ଫାଇଲଟି ପାଇଲୁ ନାହିଁ ।",
        "unexpected": "ଅଜଣା ନାମ ମିଳିଲା: \"$1\"=\"$2\" ।",
        "formerror": "ଭୁଲ: ଫର୍ମଟି ପଠାଇ ପାରିଲୁଁ ନାହିଁ",
        "viewsourcetext": "ଆପଣ ଏହି ପୃଷ୍ଠାର ଲେଖା ଦେଖିପାରିବେ ଓ ନକଲ କରିପାରିବେ:",
        "viewyourtext": "ଆପଣ '''ଆପଣଙ୍କ ସମ୍ପାଦିତ ''' ଅଧରଟିକୁ ଦେଖିପାରିବେ ଓ ଏହି ପୃଷ୍ଠାକୁ ନକଲ କରି ପାରିବେ",
        "protectedinterface": "ଏହି ପୃଷ୍ଠାଟି ଏହି ଉଇକିରେ ଥିବା ସଫ୍ଟୱେର ନିମନ୍ତେ ଇଣ୍ଟରଫେସ ଲେଖା ଯୋଗାଇଥାଏ ଓ ଏହା ଅପବ୍ୟବହାରକୁ ରୋକିବା ନିମନ୍ତେ କିଳାଯାଇଅଛି । ସମସ୍ତ ଉଇକିର ଅନୁବାଦକୁ ଯୋଡ଼ିବା ଏବଂ ବଦଳାଇବା ପାଇଁ ମେଡ଼ିଆଉଇକିର ସ୍ଥାନୀୟ ପ୍ରକଳ୍ପରେ ଥିବା [//translatewiki.net/ translatewiki.net]କୁ ବ୍ୟବହାର କରନ୍ତୁ ।",
-       "editinginterface": "'''ଚେତାବନୀ:''' ଆପଣ ସଫ୍ଟୱେରର ଇଣ୍ଟରଫେସ ଲେଖା ଯୋଗାଇବା ନିମନ୍ତେ ବ୍ୟବହାର କରାଯାଉଥିବା ଏକ ପୃଷ୍ଠାର ସମ୍ପାଦନା କରୁଅଛନ୍ତି ।\nଏହି ଉଇକିପୃଷ୍ଠାର କିଛି ବି ବଦଳ ବାକି ସଭ୍ୟମାନଙ୍କ ଇଣ୍ଟରଫେସର ଦେଖଣାକୁ ପ୍ରଭାବିତ କରିବ ।\nସମସ୍ତ ଉଇକିର ଅନୁବାଦ ନିମନ୍ତେ, ଦୟାକରି ମିଡ଼ିଆଉଇକିର ସ୍ଥାନୀୟକରଣ ପ୍ରକଳ୍ପ [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net] ବ୍ୟବହାର କରନ୍ତୁ ।",
+       "editinginterface": "'''ଚେତାବନୀ:''' ଆପଣ ସଫ୍ଟୱେରର ଇଣ୍ଟରଫେସ ଲେଖା ଯୋଗାଇବା ନିମନ୍ତେ ବ୍ୟବହାର କରାଯାଉଥିବା ଏକ ପୃଷ୍ଠାର ସମ୍ପାଦନା କରୁଅଛନ୍ତି ।\nଏହି ଉଇକିପୃଷ୍ଠାର କିଛି ବି ବଦଳ ବାକି ସଭ୍ୟମାନଙ୍କ ଇଣ୍ଟରଫେସର ଦେଖଣାକୁ ପ୍ରଭାବିତ କରିବ ।",
+       "translateinterface": "ସମସ୍ତ ଉଇକିରେ ଅନୁବାଦ ଯୋଡିବା ପାଇଁ କିମ୍ବା ବଦଳାଇବା ପାଇଁ ମେଡିଆଉଇକିର ଅଞ୍ଚଳିକୀକରଣ ପ୍ରକଳ୍ପ  [//translatewiki.net/ translatewiki.net] ବ୍ୟବହାର କରନ୍ତୁ ।",
        "cascadeprotected": "ଏହି ପୃଷ୍ଠା ସମ୍ପାଦନା କରିବାରୁ କିଳାଯାଇଅଛି, କାରଣ ଏଥିରେ ତଳଲିଖିତ {{PLURAL:$1|ପୃଷ୍ଠାଟିଏ ଅଛି|ଟି ପୃଷ୍ଠା ଅଛି}} ଯାହା \"କ୍ୟାସକେଡ଼ କରା\" ସୁବିଧା ଦେଇ କିଳାଯାଇଅଛି ।:\n$2",
        "namespaceprotected": "ଆପଣଙ୍କୁ ଏହି '''$1''' ନେମସ୍ପେସ ଥିବା ପୃଷ୍ଠାରେ ସମ୍ପାଦନା କରିବା ନିମନ୍ତେ ଅନୁମତି ମିଳିନାହିଁ ।",
        "customcssprotected": "ଆପଣଙ୍କୁ ଏହି CSS ପୃଷ୍ଠାର ସମ୍ପାଦନା ନିମନ୍ତେ ଅନୁମତି ମିଳିନାହିଁ, କାରଣ ଏଥିରେ ଆଉଜଣେ ସଭ୍ୟଙ୍କର ବ୍ୟକ୍ତିଗତ ସଜାଣି ରହିଅଛି ।",
        "createacct-another-username-ph": "ଆପଣଙ୍କ ଇଉଜର ନାମ ଟାଇପ କରନ୍ତୁ",
        "yourpassword": "ପାସୱାର୍ଡ଼",
        "userlogin-yourpassword": "ପାସୱାର୍ଡ଼",
-       "userlogin-yourpassword-ph": "à¬\86ପଣà¬\99à­\8dà¬\95 à¬ªà¬¾à¬¸à­±à¬¾à¬°à­\8dଡ଼ à¬¨à¬¿à¬¬à­\87ଶ à¬\95ରନ୍ତୁ",
-       "createacct-yourpassword-ph": "ପାସୱରà­\8dଡ଼ à¬¨à¬¿à¬¬à­\87ଶ à¬\95ରନ୍ତୁ",
+       "userlogin-yourpassword-ph": "à¬\86ପଣà¬\99à­\8dà¬\95 à¬ªà¬¾à¬¸à­±à¬¾à¬°à­\8dଡ଼ à¬¦à¬¿à¬\85ନ୍ତୁ",
+       "createacct-yourpassword-ph": "ପାସୱରà­\8dଡ଼ à¬¦à¬¿à¬\85ନ୍ତୁ",
        "yourpasswordagain": "ପାସୱାର୍ଡ଼ ଆଉଥରେ:",
        "createacct-yourpasswordagain": "ପାସୱର୍ଡ଼ ନିଶ୍ଚିତ କରିବେ",
-       "createacct-yourpasswordagain-ph": "ପà­\81ଣି à¬ªà¬¾à¬¸à­±à¬°à­\8dଡ଼ à¬¨à¬¿à¬¬à­\87ଶ à¬\95ରନ୍ତୁ",
+       "createacct-yourpasswordagain-ph": "à¬\86à¬\89ଥରà­\87 à¬ªà¬¾à¬¸à­±à¬°à­\8dଡ଼ à¬¦à¬¿à¬\85ନ୍ତୁ",
        "remembermypassword": "ଏହି ବ୍ରାଉଜରରେ (ସବୁଠୁ ଅଧିକ ହେଲେ $1 {{PLURAL:$1|day|ଦିନ}}) ପାଇଁ ମୋ ଲଗଇନ ମନେ ରଖିଥିବେ",
        "userlogin-remembermypassword": "ମୋତେ ଲଗ-ଇନ କରି ରଖିଥାନ୍ତୁ",
        "userlogin-signwithsecure": "ନିରାପଦ କନେକସନ ବ୍ୟବ‌ହାର କରନ୍ତୁ",
        "userlogin-createanother": "ଆଉ ଏକ ଖାତା ତିଆରି କରନ୍ତୁ",
        "createacct-emailrequired": "ଇମେଲ ଠିକଣା",
        "createacct-emailoptional": "ଇମେଲ ଠିକଣା (ଇଚ୍ଛାଧୀନ)",
-       "createacct-email-ph": "à¬\86ପଣà¬\99à­\8dà¬\95 à¬\87ମà­\87ଲ à¬ à¬¿à¬\95ଣା à¬¨à¬¿à¬¬à­\87ଶ à¬\95ରନ୍ତୁ",
+       "createacct-email-ph": "à¬\86ପଣà¬\99à­\8dà¬\95 à¬\87ମà­\87ଲ à¬ à¬¿à¬\95ଣା à¬¦à¬¿à¬\85ନ୍ତୁ",
        "createacct-another-email-ph": "ଆପଣଙ୍କ ଇ-ମେଲ ଠିକଣା ଦିଅନ୍ତୁ",
        "createaccountmail": "ଏକ ଅସ୍ଥାୟୀ ପାସୱାର୍ଡ଼ ବ୍ୟବହାର କରନ୍ତୁ ଏବଂ ଏହାକୁ ତଳେ ଦିଆଯାଇଥିବା ଇ-ମେଲ ଠିକଣାକୁ ପଠେଇ ଦିଅନ୍ତୁ",
        "createacct-realname": "ପ୍ରକୃତ ନାମ (ଇଚ୍ଛାଧୀନ)",
        "createacct-reason": "କାରଣ",
        "createacct-reason-ph": "ଆପଣ ଅନ୍ୟଏକ ଖାତା କାହିଁକି ତିଆରି କରୁଛନ୍ତି",
        "createacct-captcha": "ନିରାପତ୍ତା ଯାଞ୍ଚ",
-       "createacct-imgcaptcha-ph": "à¬\89ପରà­\87 à¬²à­\87à¬\96ାଥିବା à¬²à­\87à¬\96ାà¬\9fି ଲେଖନ୍ତୁ",
+       "createacct-imgcaptcha-ph": "à¬\89ପରà­\87 à¬²à­\87à¬\96ାଥିବା à¬\85à¬\95à­\8dଷରà¬\95à­\81 ଲେଖନ୍ତୁ",
        "createacct-submit": "ନିଜର ନୂଆ ଖାତାଟିଏ ଖୋଲନ୍ତୁ",
        "createacct-another-submit": "ଆଉ ଏକ ଖାତା ଖୋଲନ୍ତୁ",
        "createacct-benefit-heading": "{{SITENAME}} ଆପଣଙ୍କ ଭଳି ଲୋକମାନଙ୍କ ଦ୍ୱାରା ଗଢ଼ା ।",
        "wrongpassword": "ଦିଆଯାଇଥିବା ପାସୱାର୍ଡ଼ଟି ଭୁଲ ଅଟେ  ।\nଦୟାକରି ଆଉଥରେ ଚେଷ୍ଟା କରନ୍ତୁ ।",
        "wrongpasswordempty": "ଦିଆଯାଇଥିବା ପାସବାର୍ଡ଼ଟି ଖାଲି ଛଡ଼ାଯାଇଛି ।\nଦୟାକରି ଆଉଥରେ ଚେଷ୍ଟା କରନ୍ତୁ ।",
        "passwordtooshort": "ପାସୱାର୍ଡ଼ଟି ଅତି କମରେ {{PLURAL:$1|ଗୋଟିଏ ଅକ୍ଷର|$1ଟି ଅକ୍ଷର}}ର ହୋଇଥିବା ଲୋଡ଼ା ।",
+       "passwordtoolong": "ପସସ୍ୱାର୍ଡଟି {{PLURAL:$1|1 ଅକ୍ଷର|$1 ଅକ୍ଷରଗୁଡିକ}}ଠାରୁ ଅଧିକ ହୋଇ ପାରିବ ନାହିଁ ।",
        "password-name-match": "ଆପଣଙ୍କ ପାସୱାର୍ଡ଼ଟି ଆପଣଙ୍କ ଇଉଜର ନାମ ଠାରୁ ଅଲଗା ହେବା ଉଚିତ ।",
        "password-login-forbidden": "ଏହି ଇଉଜର ନାମ ଓ ପାସୱାର୍ଡ଼ର ବ୍ୟବହାରକୁ ବାରଣ କରାଯାଇଅଛି ।",
        "mailmypassword": "ପାସୱାର୍ଡ଼ଟି ରିସେଟ କରିବେ",
        "anoneditwarning": "<strong>ସାବଧାନ:</strong> ଆପଣ ଲଗ-ଇନ କରିନାହାନ୍ତି । ଅଧିକ ସମ୍ପାଦନା କଲେ ଆପଣଙ୍କ IP Address ଟି ସମସ୍ତଙ୍କୁ ଦେଖାଯିବ । <strong>[$1ଲଗ ଇନ କଲେ]</strong> କିମ୍ବା <strong>[$2 ନୂଆ ଖାତାଟିଏ ତିଆରି କଲେ]</strong>, ଆପଣଙ୍କ ସମ୍ପାଦନାର ଶ୍ରେୟ ଅନ୍ୟାନ୍ୟ ସୁବିଧା ସହିତ ଆପଣଙ୍କ ଇଉଜର ନାମରେ ଦିଆହେବ ।",
        "anonpreviewwarning": "''ଆପଣ ଲଗ ଇନ କରି ନାହାନ୍ତି । ବଦଳକରି ସାଇତିଲେ ଆପଣଙ୍କର IP ଠିକଣା ଏହି ପୃଷ୍ଠାର ଇତିହାସରେ ସାଇତା ହୋଇଯିବ ।''",
        "missingsummary": "'''ଚେତାବନୀ:''' ଆପଣ ଏକ ସମ୍ପାଦନା ସାରକଥା ଦେଇନାହାନ୍ତି ।\nଯଦି ଆପଣ \"{{int:savearticle}}\"ରେ ଆଉଥରେ କ୍ଲିକ କରନ୍ତି, ତେବେ ଆପଣଙ୍କ ବଦଳ ସାରକଥା ବିନା ସାଇତା ହୋଇଯିବ ।",
+       "selfredirect": "<strong>ସାବଧନ :</strong> ଆପଣ ଏହି ପୃଷ୍ଠାଟିକୁ ତା ମଧ୍ୟକୁ ଲେଇଟାଉଛନ୍ତି । ଆପଣ ବୋଧ ହୁଏ ଭୁଲ ଲକ୍ଷସ୍ଥଳ ଦେଇଛନ୍ତି କିମ୍ବା ଭୁଲ ପୃଷ୍ଠଟିକୁ ବଦଳାଉଛନ୍ତି । \nଆପଣ ଯଦି \"{{int:savearticle}}\"ରେ ଆଉଥରେ କ୍ଲିକ କରିବେ ତେବେ ଲେଉଟାଣିଟି ଯାହା ହେଲେ ସାଇତା ହେଇଯିବା ।",
        "missingcommenttext": "ଦୟାକରି ତଳେ ଏକ ମତାମତ ଦିଅନ୍ତୁ ।",
        "missingcommentheader": "'''ଚେତାବନୀ:''' ଆପଣ ଏହି ମତଟି ନିମନ୍ତେ ଏକ ଶିରୋନାମା/ମୁଖ୍ୟ ନାମ ଦେଇନାହାନ୍ତି ।\nଯଦି ଆପଣ \"{{int:savearticle}}\"ରେ ଆଉଥରେ କ୍ଲିକ କରନ୍ତି, ତେବେ ଆପଣଙ୍କ ବଦଳ ସାରକଥା ବିନା ସାଇତା ହୋଇଯିବ ।",
        "summary-preview": "ସାରକଥା ଦେଖଣା:",
        "subject-preview": "ବିଷୟ/ଶିରୋନାମା ଦେଖଣା:",
+       "previewerrortext": "ଆପଣ ବଦଳାଇଥିବା ବଦଳ ଗୁଡିକୁ ଦେଖାଇବା ବେଳେ ଅସୁବିଧା ହେଲା ।",
        "blockedtitle": "ସଭ୍ୟଙ୍କୁ ଅଟକାଯାଇଅଛି",
        "blockedtext": "''' ଆପଣଙ୍କ ଇଉସରନେମକୁ ପ୍ରତିରୋଧ କରାଯାଇଛି\n\n$1 ଦ୍ଵାରା ପ୍ରତିରୋଧ କରାଯାଇଛି\nଦିଆଯାଇଥିବା କାରଣଟି ହେଉଛି $2\n\n* ପ୍ରତିରୋଧ ଆରମ୍ଭ : $8\n* ପ୍ରତିରୋଧ ଶେଷ : $6\n* ଅଭିପ୍ରେତ ପ୍ରତିରୋଧକରି : $7\n\nଏହି ପ୍ରତିରୋଧ ବିଷୟରେ ଅଧିକ ଜାଣିବାକୁ ଚାହୁଥିଲେ ଆପଣ $1 କିମ୍ବା [[{{MediaWiki:Grouppage-sysop}}|administrator]]ଙ୍କୁ ଯୋଗାଯୋଗ  କରିପାରିବେ ।\nଯେ ପର୍ଯ୍ୟନ୍ତ ଆପଣଙ୍କ [[Special:Preferences|account preferences]]ରେ ଗୋଟିଏ ଉପଲବ୍ଧ ଇମେଲ ଠିକଣା ଦିଆ ଯାଇନାହି ଏବଂ ଆପଣ ଏହାକୁ ବ୍ୟବହାର କରିବାରେ କିଛି ପ୍ରତିରୋଧ ଲଗାଯାଇଅଛି ସେ ପର୍ଯ୍ୟନ୍ତ ଆପଣ 'ଏହି ସଦସ୍ୟଙ୍କୁ ଲେଖନ୍ତୁ ' ବିଭାଗଟିକୁ ବ୍ୟବହାର କରିପାରିବେନି ।\nବର୍ତମାନ ଆପଣଙ୍କ ଆଇପି ଠିକଣା ହେଇଛି $3, ଏବଂ ପ୍ରତିରୋଧ ଆଇଡି ହେଉଛି #$5 ।\nଯଦି ଅପଙ୍କର କିଛି କହିବାକୁ ଥାଏ ତାହେଲେ ଆପଣଙ୍କ ଲେଖାରେ ଉପରୋକ୍ତ ଲେଖାଗୁଡ଼ିକ ଯୋଡିଦେବେ",
        "autoblockedtext": "ଆପଣଙ୍କ IP ଠିକଣାଟି ଆପେଆପେ ପ୍ରତିରୋଧ କରାଯାଇଛି କାରଣ ଏହା ଆଉ ଜଣେ ବ୍ୟବହାରକାରୀଙ୍କ ଦେଇ ବ୍ୟବହାର କରାଯାଇଛି, ଯେ $1ଙ୍କ ଦେଇ ଅଟକାଯାଇଛନ୍ତି ।\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ଦୟାକରି ଆପଣ ପଚାରୁଥିବା ଯେକୌଣସି ପ୍ରଶ୍ନରେ ଉପରେ ଥିବା ସବିଶେଷ ଯୋଗ କରି ପଚାରିବେ ।",
        "content-model-text": "ଖାଲି ଲେଖା",
        "content-model-javascript": "ଜାଭାସ୍କ୍ରିପ୍ଟ",
        "content-model-css": "CSS",
+       "content-json-empty-object": "ଖାଲି ଅବଜେକ୍ଟ",
+       "content-json-empty-array": "ଖାଲି ଆରେ",
        "expensive-parserfunction-warning": "'''ଚେତାବନୀ:''' ଏହି ପୃଷ୍ଠାରେ ଅନେକ ଗୁଡ଼ିଏ ମୂଲ୍ୟବାନ ପାର୍ସର ଫଙ୍କସନ କଲ ଅଛି ।\n\nଏଥିରେ ଅତି କମରେ $2 ଗୋଟି {{PLURAL:$2|କଲ|କଲ}} ଥିବା ଲୋଡ଼ା, ଏବେ ଏଥିରେ {{PLURAL:$1|$1 ଗୋଟି କଲ ଅଛି|$1 ଗୋଟି କଲ ଅଛି}} ।",
        "expensive-parserfunction-category": "ଖୁବ ଅଧିକ ମୂଲ୍ୟବାନ ପାର୍ସର ଫଙ୍କସନ କଲ ଥିବା ପୃଷ୍ଠା",
        "post-expand-template-inclusion-warning": "'''ସୂଚନା:''' ଛାଞ୍ଚଟି ଖୁବ ବଡ଼ ଅଟେ ।\nକେତେଗୋଟି ଛାଞ୍ଚକୁ ନିଆଯିବ ନାହିଁ ।",
        "history-feed-description": "ଉଇକିରେ ଏହି ପୃଷ୍ଠାଟିପାଇଁ ସଙ୍କଳନ ଇତିହାସ",
        "history-feed-item-nocomment": "$2 ଠାରେ $1",
        "history-feed-empty": "ଅନୁରୋଧ କରାଯାଇଥିବା ପୃଷ୍ଠାଟି ନାହିଁ ।\nଏହା ଏହି ଉଇକିରୁ ଲିଭାଇ ଦିଆଯାଇଅଛି କିମ୍ବା ନୂଆ ନାମ ଦିଆଯାଇଅଛି ।\nପାଖାପାଖି ଏକା ନାମ ଥିବା ନୂଆ ପୃଷ୍ଠାମାନ [[Special:Search|ଏହି ଉଇକିରେ ଖୋଜନ୍ତୁ]] ।",
+       "history-edit-tags": "ବଛାଯାଇଥିବା ବଦଳଗୁଡିକର ଟାଗଗୁଡିକୁ ସମ୍ପାଦନା କରିବେ ।",
        "rev-deleted-comment": "(ସମ୍ପାଦନା ଇତିହାସ ଲିଭାଇଦିଆଗଲା)",
        "rev-deleted-user": "(ଇଉଜର ନାମ ବାହର କରିଦିଆଗଲା)",
-       "rev-deleted-event": "(ଲà¬\97 à¬\95ାମ ବାହାର କରିଦିଆଗଲା)",
+       "rev-deleted-event": "(ଲà¬\97 à¬¬à¬¿à¬¬à¬°à¬£à­\80 ବାହାର କରିଦିଆଗଲା)",
        "rev-deleted-user-contribs": "[ଇଉଜର ନାମ ବା IP ଠିକଣା ବାହାର କରିଦିଆଗଲା - ଅବଦାନସମୂହରୁ ଲୁଚାଯାଇଥିବା ସମ୍ପାଦନା]",
        "rev-deleted-text-permission": "ଏହି ପୃଷ୍ଠାର ସଂସ୍କରଣ '''ଲିଭାଇଦିଆଯାଇଛି'''।\nସବିଶେଷ [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ଲିଭାଯିବା ଇତିହାସ]ରୁ ମିଳିପାରିବ ।",
        "rev-suppressed-text-permission": "ଏହି ପୃଷ୍ଠାର ସଂସ୍କରଣକୁ <strong>ଦବାଇଦିଆଯାଇଛି</strong> ।\nଅଧିକ ବିବରଣୀ [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ଦବାଯାଇଥିବା ଇତିହାସ]ରୁ ପଢ଼ିପାରିବେ ।",
        "revdelete-legend": "ଦେଖଣା ବାରଣ ସବୁ ଥୟ କରନ୍ତୁ",
        "revdelete-hide-text": "ସଂସ୍କରଣ ଲେଖା",
        "revdelete-hide-image": "ଫାଇଲ ଭିତର ପଦାର୍ଥସବୁ ଲୁଚାଇଦିଅନ୍ତୁ",
-       "revdelete-hide-name": "à¬\95ାମ ଓ ଲକ୍ଷ ସବୁ ଲୁଚାଇଦିଅନ୍ତୁ",
+       "revdelete-hide-name": "ପରାମିà¬\9fର ଓ ଲକ୍ଷ ସବୁ ଲୁଚାଇଦିଅନ୍ତୁ",
        "revdelete-hide-comment": "ସାରକଥା ସମ୍ପାଦନା କରନ୍ତୁ",
        "revdelete-hide-user": "ସମ୍ପାଦକଙ୍କର ସଭ୍ୟ ନାମ /IP ଲୁଚାଇଦିଅନ୍ତୁ",
        "revdelete-hide-restricted": "ପରିଚାଳକ ଓ ବାକିମାନଙ୍କ ଠାରୁ ତଥ୍ୟକୁ ଦବାଇଦିଅନ୍ତୁ",
        "notextmatches": "ପୃଷ୍ଠାଟିର ନାମ ମିଶୁନାହିଁ",
        "prevn": "{{PLURAL:$1|$1}}ର ଆଗରୁ",
        "nextn": "{{PLURAL:$1|$1}} ପର",
+       "prev-page": "ପୂର୍ବ ପୃଷ୍ଠା",
+       "next-page": "ପର ପୃଷ୍ଠା",
        "prevn-title": "ଆଗରୁ ମିଳିଥିବା $1ଟି  {{PLURAL:$1|result|ଫଳ}}",
        "nextn-title": "ପର $1 {{PLURAL:$1|ଫଳାଫଳ|ଫଳାଫଳସବୁ}}",
        "shown-title": "$1 ପ୍ରତି ପୃଷ୍ଠାର {{PLURAL:$1|ଫଳାଫଳ|ଫଳାଫଳ}} ଦେଖାଇବେ ।",
        "search-result-category-size": "{{PLURAL:$1|ଜଣେ ସଭ୍ୟ|$1 ଜଣ ସଭ୍ୟ}} ({{PLURAL:$2|ଗୋଟିଏ ଶ୍ରେଣୀy|$2ଟି ଶ୍ରେଣୀ ସମୂହ}}, {{PLURAL:$3|ଗୋଟିଏ ଫାଇଲ|$3ଟି ଫାଇଲ}})",
        "search-redirect": "($1 କୁ ଆଗକୁ ବଢେଇନିଅ )",
        "search-section": "(ଭାଗ $1)",
+       "search-category": "(ଶ୍ରେଣୀ $1)",
        "search-file-match": "(ଫାଇଲରେ ଥିବା ବିଷୟବସ୍ତୁ ସାଙ୍ଗେ ମେଳ)",
        "search-suggest": "ଆପଣ $1 ଭାବି ଖୋଜିଥିଲେ କି?",
        "search-interwiki-caption": "ସାଙ୍ଗରେ ଚାଲିଥିବା ବାକି ପ୍ରକଳ୍ପସବୁ",
        "prefs-personal": "ସଭ୍ୟ ପ୍ରଫାଇଲ",
        "prefs-rc": "ନଗଦ ବଦଳ",
        "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": "ବଢ଼ନ୍ତା ଦେଖଣା ତାଲିକାରେ ଦେଖିହେବା ଭଳି ସବୁଠାରୁ ଅଧିକ ବଦଲ:",
        "rcshowhideminor": "ଛୋଟମୋଟ ବଦଳ $1",
        "rcshowhideminor-show": "ଦେଖାଇବେ",
        "rcshowhideminor-hide": "ଲୁଚାଇବେ",
-       "rcshowhidebots": "ସà­\8dà­±à­\9fà¬\82à¬\9aାଳà¬\95&nbsp;(Bot)&nbsp;ର&nbsp;ସମà­\8dପାଦନା $1",
+       "rcshowhidebots": "ବà¬\9fà¬\97à­\81ଡ଼ିà¬\95 $1",
        "rcshowhidebots-show": "ଦେଖାଇବେ",
        "rcshowhidebots-hide": "ଲୁଚାଇବେ",
        "rcshowhideliu": "ପଞ୍ଜୀକୃତ ସଭ୍ୟ $1",
        "rc-enhanced-expand": "ସବିଶେଷ ଦେଖାନ୍ତୁ",
        "rc-enhanced-hide": "ବେଶି କଥାସବୁ ଲୁଚାଇଦିଅ",
        "rc-old-title": "ପ୍ରକୃତରେ \"$1\" ଭାବେ ତିଆରି କରାଯାଇକଥିଲା",
-       "recentchangeslinked": "à¬\8fà¬\87ମାତà­\8dର à¬¬à¬¦à¬³à¬¾à¬¯à¬¾à¬\87ଥିବା à¬ªà­\83ଷà­\8dଠାର à¬²à¬¿à¬\99à­\8dà¬\95",
+       "recentchangeslinked": "ସମà­\8dପରà­\8dà¬\95ିତ à¬¬à¬¦à¬³",
        "recentchangeslinked-feed": "ସମ୍ପର୍କିତ ବଦଳ",
        "recentchangeslinked-toolbox": "ସମ୍ପର୍କିତ ବଦଳ",
        "recentchangeslinked-title": "\"$1\" ସହ ସମ୍ବନ୍ଧିତ ବଦଳ",
        "whatlinkshere": "ଏଠାରେ ଥିବା ଲିଙ୍କ",
        "whatlinkshere-title": "\"$1\" କୁ ପୃଷ୍ଠା ଲିଙ୍କ",
        "whatlinkshere-page": "ପୃଷ୍ଠା:",
-       "linkshere": "ଏହି ପୃଷ୍ଠା ସବୁ  '''[[:$1]]''' ସହ ଯୋଡା ଯାଇଅଛି:",
+       "linkshere": "ଏହି ପୃଷ୍ଠା ସବୁ  <strong>[[:$1]]</strong> ସହ ଯୋଡା ଯାଇଅଛି:",
        "nolinkshere": "'''[[:$1]]''' ସହିତ କୌଣସିଟି ପୃଷ୍ଠା ଯୋଡ଼ାଯାଇନାହିଁ ।",
        "nolinkshere-ns": "ବଛା ଯାଇଥିବା ନେମସ୍ପେସରେ '''[[:$1]]''' ନାଆଁ ସହ କୌଣସି ବି ପୃଷ୍ଠା ଯୋଡ଼ାଯାଇନାହିଁ ।",
        "isredirect": "ଆଉଥରେ ଫେରିବା ପୃଷ୍ଠା",
        "import-interwiki-history": "ଏହି ପୃଷ୍ଠା ନିମନ୍ତେ ସବୁଯାକ ସଂସ୍କରଣ ଇତିହାସ ନକଲ କରିନିଅନ୍ତୁ",
        "import-interwiki-templates": "ସବୁଯାକ ଛାଞ୍ଚ ଏହା ଭିତରେ ରଖିବେ",
        "import-interwiki-submit": "ଆମଦାନୀ",
-       "import-interwiki-namespace": "ଲକ୍ଷ ନେମସ୍ପେସ:",
-       "import-interwiki-rootpage": "ଲକ୍ଷସ୍ଥଳୀର ମୂଳ ପୃଷ୍ଠା(ଇଛାଧୀନ):",
        "import-upload-filename": "ଫାଇଲ ନାମ:",
        "import-comment": "ମତାମତ:",
        "importtext": "[[Special:Export|ରପ୍ତାନି ସୁବିଧା]] ବ୍ୟବହାର କରି ମୂଳ ଉଇକିରୁ ଫାଇଲଟି ରପ୍ତାନି କରନ୍ତୁ ।\nତାହାକୁ ଆପଣା କମ୍ପୁଟରରେ ସାଇତି ଏଠାରେ ଅପଲୋଡ଼ କରନ୍ତୁ ।",
        "tooltip-pt-mycontris": "ଆପଣଙ୍କ ଅବଦାନ",
        "tooltip-pt-login": "ଆପଣଙ୍କୁ ଲଗ-ଇନ କରିବାକୁ କୁହାଯାଉଅଛି ସିନା, ବାଧ୍ୟ କରାଯାଉନାହିଁ",
        "tooltip-pt-logout": "ଲଗଆଉଟ",
+       "tooltip-pt-createaccount": "ଆପଣଙ୍କୁ ଗୋଟେ ଖାତା ଖୋଲି ଲଗ ଇନ କରିବା ପାଇଁ ପ୍ରୋତ୍ସାହିତ କରାଯାଉଛି, ଏମିତିବି ଏହା କରିବା ନିତାନ୍ତ ଆବଶ୍ୟକ ନୁହେଁ ।",
        "tooltip-ca-talk": "ଏହି ପୃଷ୍ଠାଟି ଉପରେ ଆଲୋଚନା",
        "tooltip-ca-edit": "ଆପଣ ଏହି ପୃଷ୍ଠାଟିରେ ଅଦଳ ବଦଳ କରିପାରିବେ, ତେବେ ସାଇତିବା ଆଗରୁ ଦେଖଣା ଦେଖନ୍ତୁ ।",
        "tooltip-ca-addsection": "ନୂଆ ବିଭାଗଟିଏ ଆରମ୍ଭ କରିବେ",
        "tooltip-t-recentchangeslinked": "ଏହି ପୃଷ୍ଠା ସଙ୍ଗେ ଯୋଡ଼ା ଫରଦଗୁଡ଼ିକରେ ଏବେ ଏବେ କରାଯାଇଥିବା ଅଦଳବଦଳ",
        "tooltip-feed-rss": "ଏହି ପୃଷ୍ଠାଟି ପାଇଁ RSS ଫିଡ଼",
        "tooltip-feed-atom": "ଏହି ପୃଷ୍ଠାଟି ପାଇଁ ଆଟମ ଫିଡ଼",
-       "tooltip-t-contributions": "à¬\8fହି à¬\87à¬\89à¬\9cରà¬\99à­\8dà¬\95ର à¬¦à­\87à¬\87 à¬\95ରାଯାà¬\87ଥିବା à¬¸à¬¬à­\81ଯାà¬\95 à¬¦à¬¾à¬¨ à¬¦à­\87à¬\96ାà¬\87ବା",
+       "tooltip-t-contributions": "à¬\8fହି à¬\87à¬\89à¬\9cରà¬\99à­\8dà¬\95ର à¬¦à­\8dଵାରା à¬¹à­\8bà¬\87ଥିବା à¬¬à¬¦à¬³ à¬¤à¬¾à¬²à¬¿à¬\95ା",
        "tooltip-t-emailuser": "ଏହି ସଭ୍ୟଙ୍କୁ ଇ-ମେଲଟିଏ ପଠାଇବେ",
        "tooltip-t-upload": "ଫାଇଲ ଅପଲୋଡ଼ କରିବେ",
        "tooltip-t-specialpages": "ବିଶେଷ ପୃଷ୍ଠାମାନଙ୍କର ଏକ ତାଲିକା",
        "tooltip-ca-nstab-category": "ଶ୍ରେଣୀ ପୃଷ୍ଠାଟିକୁ ଦେଖାଇବେ",
        "tooltip-minoredit": "ଏହାକୁ ଏକ ସାମାନ୍ୟ ସମ୍ପାଦନା ଭାବେ ଗଣିବେ",
        "tooltip-save": "ବଦଳଗୁଡ଼ିକ ସାଇତିବେ",
-       "tooltip-preview": "ସାଇତିବା ଆଗରୁ ନିଜର ସମ୍ପାଦନା ପରଖିନିଅନ୍ତୁ!",
+       "tooltip-preview": "ଦà­\9fାà¬\95ରି à¬¸à¬¾à¬\87ତିବା à¬\86à¬\97ରà­\81 à¬¨à¬¿à¬\9cର à¬¸à¬®à­\8dପାଦନା à¬ªà¬°à¬\96ିନିà¬\85ନà­\8dତà­\81!",
        "tooltip-diff": "ଏହି ଲେଖାରେ ଆପଣ କରିଥିବା ବଦଳଗୁଡିକୁ ଦେଖନ୍ତୁ ।",
        "tooltip-compareselectedversions": "ଏହି ଫରଦର ଦୁଇଟି ବଛାଯାଇଥିବା ସଁକଳନକୁ ତଉଲିବା",
        "tooltip-watch": "ଆପଣଙ୍କ ଦେଖାତାଲିକାରେ ଏଇ ପୃଷ୍ଠାଟି ମିଶାଇବେ",
index 89ef183..281f27f 100644 (file)
        "history_short": "Истори",
        "updatedmarker": "ноггонд мæ фæстаг æрбахызтæй",
        "printableversion": "Мыхурæн",
-       "permalink": "УдгаÑ\81 æрвитæн",
+       "permalink": "Ð\98Ñ\83гæндзон æрвитæн",
        "print": "Мыхуыр",
        "view": "Кæсын",
        "edit": "Ивын",
        "createacct-emailrequired": "Электрон посты адрис",
        "createacct-emailoptional": "Электрон посты адрис (фæндон)",
        "createacct-email-ph": "Бафысс дæ электрон посты адрис",
-       "createaccountmail": "Рæстæгмæ пароль халæй ист æрцæуæт æмæ бындæр цы электрон пост ис, уырдæм æрвыст æрцæуæт",
+       "createaccountmail": "Рæстæгмæ пароль халæй ист æрцæуæд æмæ амынд электрон посты адрисмæ æрвыст æрцæуæд",
        "createacct-realname": "Æцæг ном (фæндон)",
        "createaccountreason": "Бындур:",
        "createacct-reason": "Бындур",
        "passwordreset-emaildisabled": "Электрон пост ацы викийы хицæн у.",
        "passwordreset-username": "Фæсномыг:",
        "passwordreset-domain": "Домен:",
-       "passwordreset-capture": "Цы e-mail рауадис, уый æвдыст æрцæуæт?",
+       "passwordreset-capture": "Цы фыстæг рауадис, уый фенис?",
        "passwordreset-capture-help": "Кæд сæвæрай ацы нысан, уæд дын e-mail (рæстæгмæ паролимæ) æвдыст æрцæудзæн. Архайæгмæ дæр æрвыст æрцæудзæн.",
        "passwordreset-email": "Электрон посты адрис:",
        "passwordreset-emailtitle": "{{grammar:genitive|{{SITENAME}}}} акканты тыххæй",
        "action-upload": "ацы файл æвгæнын",
        "action-delete": "ацы фарс схафын",
        "nchanges": "$1 {{PLURAL:$1|ивд|ивды}}",
+       "enhancedrc-history": "истори",
        "recentchanges": "Фæстаг ивдтытæ",
        "recentchanges-legend": "Фæстаг ивдтыты фадæттæ",
        "recentchanges-summary": "Ацы фарсыл викийы фæстаг ивдтытæ фенæн ис.",
        "rcnotefrom": "Бындæр сты æвдыст ивдтытæ '''$2'''-æй ('''{{grammar:genitive|$1}}''' йонг).",
        "rclistfrom": "Равдисын ивдтытæ амæй фæстæ: $3 $2",
        "rcshowhideminor": "$1 чысыл ивдтытæ",
+       "rcshowhideminor-show": "Равдис",
+       "rcshowhideminor-hide": "Бамбæхс",
        "rcshowhidebots": "$1 роботты",
+       "rcshowhidebots-show": "Равдис",
+       "rcshowhidebots-hide": "Бамбæхс",
        "rcshowhideliu": "$1 регистрацигонд архайæджы",
+       "rcshowhideliu-hide": "Бамбæхс",
        "rcshowhideanons": "$1 æнæном архайджыты",
+       "rcshowhideanons-show": "Равдис",
+       "rcshowhideanons-hide": "Бамбæхс",
        "rcshowhidepatr": "$1 бæрæггонд ивдтæ",
        "rcshowhidemine": "$1 мæ ивдтытæ",
+       "rcshowhidemine-show": "Равдис",
+       "rcshowhidemine-hide": "Бамбæхс",
        "rclinks": "Фæстаг $1 ивдтытæ (афæстаг $2 боны дæргъы чи ’рцыдысты) равдис;\n$3",
        "diff": "хицæн.",
        "hist": "лог",
        "upload-file-error": "Мидæггаг рæдыд",
        "license": "Лицензи:",
        "license-header": "Лицензи",
+       "imgfile": "файл",
        "listfiles": "Файлты номхыгъд",
        "listfiles_thumb": "Къаддæргонд",
        "listfiles_date": "Датæ",
        "undelete-search-submit": "Агурын",
        "namespace": "Номдон:",
        "invert": "Зыгъуыммæ æвзæрст",
+       "namespace_association": "Баст номдон",
        "blanknamespace": "(Сæйраг)",
        "contributions": "{{GENDER:$1|Архайæджы}} бавæрд",
        "contributions-title": "Архайæджы бавæрд: $1",
        "tooltip-feed-atom": "Atom feed ацы фарсæн",
        "tooltip-t-contributions": "Ацы архайæджы бавæрд фенын",
        "tooltip-t-emailuser": "Арвитын фыстæг ацы архайæгмæ",
+       "tooltip-t-info": "Ацы фарсы тыххæй",
        "tooltip-t-upload": "Файлтæ бавгæнынæн",
        "tooltip-t-specialpages": "Сæрмагонд фæрсты номхыгъд",
        "tooltip-t-print": "Ацы фарс мыхуырмæ цæттæ форматы",
        "lastmodifiedatby": "Ацы фарс фæстаг хатт фæивта $3, $1, $2 сахатыл.",
        "others": "æндæртæ",
        "spamprotectiontitle": "Спамы ныхмæ фильтр",
+       "pageinfo-toolboxlink": "Ацы фарсы тыххæй",
        "previousdiff": "← Зæронддæр ивд",
        "nextdiff": "Фæстæдæр ивд →",
        "thumbsize": "Къаддæргонды бæрц:",
        "file-nohires": "Нæй ын стырдæр фæлтæр .",
        "svg-long-desc": "SVG файл, номиналон $1 × $2 пикселы, файлы бæрц: $3",
        "show-big-image": "Оригиналы файл",
+       "show-big-image-preview": "Къаддæргонды ас: $1",
+       "show-big-image-size": "$1 × $2 пикселы",
        "newimages": "Ног нывты галерей",
        "ilsubmit": "Агурын",
        "bydate": "рæстæгмæ гæсгæ",
        "duration-centuries": "$1 {{PLURAL:$1|æнус|æнусы}}",
        "duration-millennia": "$1 {{PLURAL:$1|мин аз|мин азы}}",
        "expand_templates_ok": "Афтæ уæд!",
-       "expand_templates_preview": "Разæркаст"
+       "expand_templates_preview": "Разæркаст",
+       "special-characters-group-latin": "Латинаг",
+       "special-characters-group-latinextended": "Латинаг, уæрæхгонд",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Символтæ",
+       "special-characters-group-greek": "Грекъаг",
+       "special-characters-group-cyrillic": "Кириллон",
+       "special-characters-group-arabic": "Араббаг",
+       "special-characters-group-arabicextended": "Араббаг, уæрæхгонд",
+       "special-characters-group-persian": "Персайнаг",
+       "special-characters-group-hebrew": "Иврит",
+       "special-characters-group-bangla": "Бенгалаг",
+       "special-characters-group-tamil": "Тамилаг",
+       "special-characters-group-telugu": "Телугуйаг",
+       "special-characters-group-sinhala": "Сингалаг",
+       "special-characters-group-gujarati": "Гуджараттаг",
+       "special-characters-group-devanagari": "Девангариаг",
+       "special-characters-group-thai": "Тайаг",
+       "special-characters-group-lao": "Лаойаг",
+       "special-characters-group-khmer": "Кхмераг",
+       "special-characters-title-endash": "ен дæш",
+       "special-characters-title-emdash": "ем дæш",
+       "special-characters-title-minus": "минусы нысан"
 }
index 1c96f7d..804a2c7 100644 (file)
        "import-interwiki-sourcepage": "ਮੁੱਢਲਾ ਸਫ਼ਾ:",
        "import-interwiki-templates": "ਸਾਰੇ ਫਰਮੇ ਸ਼ਾਮਲ ਕਰੋ",
        "import-interwiki-submit": "ਮੰਗਾਓ",
-       "import-interwiki-namespace": "ਨੀਯਤ ਨਾਂ-ਥਾਂ:",
        "import-upload-filename": "ਫ਼ਾਈਲ ਦਾ ਨਾਂ:",
        "import-comment": "ਟਿੱਪਣੀ:",
        "importstart": "ਪੇਜ ਇੰਪੋਰਟ ਕੀਤੇ ਜਾ ਰਹੇ ਹਨ...",
index 81c2ba3..d1a9564 100644 (file)
        "revdelete-unsuppress": "Ilako ing pamagbawal kareng pamanaliling misubli",
        "revdelete-log": "Sangkan:",
        "revdelete-submit": "Ipairal ya kareng mepiling pamanalili (selected revision)",
-       "revdelete-success": "'''Mituldu na ing pamagbayu ning sala/kalinawan.'''",
+       "revdelete-success": "Mituldu na ing pamagbayu ning sala/kalinawan.",
        "logdelete-success": "'''Mituldu na ing sala/lino (visibility) ning tala (log).'''",
        "revdel-restore": "Alilan ya ing mayayakit",
        "pagehist": "Amlat ning bulung",
        "import-interwiki-text": "Mamili kang wiki ampong bansag bulung a ilub.\nManatili la reng petsa ring pamagbayu ampo reng lagyu ring editor.\nMaka-login la reng eganaganang pamaglub a transwiki (transwiki import actions) ketang [[Special:Log/import|import log]].",
        "import-interwiki-history": "Kopian la reng eganaganang bersion ning amlat para king bulung a ini.",
        "import-interwiki-submit": "Maglub (import)",
-       "import-interwiki-namespace": "Iyalis la king pirinan lagyu (namespace) deng bulung:",
        "import-comment": "Komentu:",
        "importtext": "Pakilual (export) me ing simpan (file) manibat ketang pikuanan a wiki a gagamitan ya ing Special:Export utilit. Potang kayi, i-save me king kekang disk at ilulan (upload) me keni.",
        "importstart": "Maglub bulung...",
        "xml-error-string": "$1 king gulis a $2, col $3 (byte $4): $5",
        "importlogpage": "Tala da reng mipalub (import log)",
        "importlogpagetext": "Pamaniubuk ding talapanibalang maglub bulung a maki amlat ding mibayu ibat kareng aliwang wiki.",
-       "import-logentry-upload": "milub ya ing [[$1]] kapamilata'ning pamaglulan simpan (file upload)",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|pamagbayu|pamagbayu}}",
-       "import-logentry-interwiki": "me-transwiking $1",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|pamagbayu|pamagbayu}} ibat $2",
        "tooltip-pt-userpage": "Ing kekang bulung talagamit (user page)",
        "tooltip-pt-anonuserpage": "Ing bulung talagamit para king IP a i-edit mu antimong",
index 0ca450f..48cc5e4 100644 (file)
        "expand_templates_output": "Result",
        "expand_templates_ok": "OK",
        "expand_templates_remove_comments": "Anmaerrickinge lösche",
-       "expand_templates_preview": "Aagucke"
+       "expand_templates_preview": "Aagucke",
+       "special-characters-group-ipa": "IPA"
 }
index 977dcbf..49de490 100644 (file)
        "no-null-revision": "Nie można utworzyć zerowej wersji strony \"$1\"",
        "badtitle": "Niepoprawny tytuł",
        "badtitletext": "Podano niepoprawny tytuł strony. Prawdopodobnie jest pusty lub zawiera znaki, których użycie jest zabronione.",
+       "title-invalid-empty": "Żądany tytuł strony jest pusty lub zawiera tylko nazwę przestrzeni nazw.",
+       "title-invalid-utf8": "Żądany tytuł strony zawiera błędny ciąg znaków UTF-8.",
+       "title-invalid-interwiki": "Tytuł zawiera link interwiki",
+       "title-invalid-talk-namespace": "Żądany tytuł strony dotyczy strony dyskusji, która nie istnieje.",
+       "title-invalid-characters": "Żądany tytuł strony zawiera błędne znaki: \"$1\".",
+       "title-invalid-magic-tilde": "Żądany tytuł strony zawiera błędną, magiczną sekwencję tyld (<nowiki>~~~</nowiki>)",
        "perfcached": "Poniższe dane są kopią z pamięci podręcznej i mogą być nieaktualne. W pamięci podręcznej {{PLURAL:$1|znajduje|znajdują|znajduje}} się maksymalnie {{PLURAL:$1|jeden wynik|$1 wyniki|$1 wyników}}.",
        "perfcachedts": "Poniższe dane są kopią z pamięci podręcznej. Ostatnia aktualizacja odbyła się $1. W pamięci podręcznej {{PLURAL:$4|znajduje|znajdują|znajduje}} się maksymalnie {{PLURAL:$4|jeden wynik|$4 wyniki|$4 wyników}}.",
        "querypage-no-updates": "Uaktualnienia dla tej strony są obecnie wyłączone. Znajdujące się tutaj dane nie zostaną odświeżone.",
        "history-feed-description": "Historia wersji tej strony wiki",
        "history-feed-item-nocomment": "$1 o $2",
        "history-feed-empty": "Wybrana strona nie istnieje.\nMogła zostać usunięta lub jej nazwa została zmieniona.\nSpróbuj [[Special:Search|poszukać]] tej strony.",
+       "history-edit-tags": "Edytuj znaczniki wybranych wersji",
        "rev-deleted-comment": "(usunięto opis zmian)",
        "rev-deleted-user": "(nazwa użytkownika usunięta)",
        "rev-deleted-event": "(szczegóły usunięte)",
        "rev-suppressed-unhide-diff": "Jedna z porównywanych wersji została '''ukryta'''.\nSzczegółowe informacje mogą znajdować się w [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} rejestrze ukrywania].\nJeśli chcesz możesz [$1 obejrzeć porównanie wersji].",
        "rev-deleted-diff-view": "Jedna z wersji użytych w porównaniu została '''usunięta'''.\nJeśli chcesz, możesz zobaczyć porównanie. Szczegóły można znaleźć w [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} rejestrze usunięć].",
        "rev-suppressed-diff-view": "Jedna z wersji użytych w porównaniu została '''utajniona'''.\nJeśli chcesz możesz zobaczyć porównanie. Szczegóły można znaleźć w [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} rejestrze utajniania].",
-       "rev-delundel": "pokaż/ukryj",
+       "rev-delundel": "zmień widoczność",
        "rev-showdeleted": "pokaż",
        "revisiondelete": "Usuń/odtwórz wersje",
        "revdelete-nooldid-title": "Nieprawidłowa wersja do przeprowadzenia operacji",
-       "revdelete-nooldid-text": "Nie wybrano wersji, na których ma zostać wykonana ta operacja,\nwybrana wersja nie istnieje lub próbowano ukryć wersję bieżącą.",
+       "revdelete-nooldid-text": "Nie wybrano żadnej wersji, na której ma zostać wykonana ta operacja, wybrana wersja nie istnieje lub próbowano ukryć wersję bieżącą.",
        "revdelete-no-file": "Wybrany plik nie istnieje.",
        "revdelete-show-file-confirm": "Czy jesteś pewien, że chcesz zobaczyć usuniętą wersję pliku „<nowiki>$1</nowiki>” z $2 o $3?",
        "revdelete-show-file-submit": "Tak",
        "revdelete-reason-dropdown": "* Najczęstsze powody usunięcia\n** Naruszenie praw autorskich\n** Niestosowny komentarz lub informacja naruszająca prywatność\n** Niestosowna nazwa użytkownika\n** Potencjalnie oszczercza informacja",
        "revdelete-otherreason": "Inny lub dodatkowy powód:",
        "revdelete-reasonotherlist": "Inny powód",
-       "revdelete-edit-reasonlist": "Edycja listy powodów usunięcia pliku",
+       "revdelete-edit-reasonlist": "Edytuj listę przyczyn usunięcia",
        "revdelete-offender": "Autor wersji",
        "suppressionlog": "Rejestr utajniania",
        "suppressionlogtext": "Poniżej znajduje się lista usunięć i blokad utajnionych przed administratorami.\nZobacz [[Special:BlockList|rejestr blokad]], jeśli chcesz sprawdzić aktualne zakazy i blokady.",
        "difference-title-multipage": "Różnica pomiędzy stronami \"$1\" i \"$2\"",
        "difference-multipage": "(Różnica między stronami)",
        "lineno": "Linia $1:",
-       "compareselectedversions": "porównaj wybrane wersje",
-       "showhideselectedversions": "Pokaż lub ukryj zaznaczone wersje",
+       "compareselectedversions": "Porównaj wybrane wersje",
+       "showhideselectedversions": "Zmień widoczność wybranych wersji",
        "editundo": "anuluj edycję",
        "diff-empty": "(Brak różnic)",
        "diff-multi-sameuser": "(Nie pokazano $1 {{PLURAL:$1|pośredniej wersji utworzonej|pośrednich wersji utworzonych}} przez tego samego użytkownika)",
        "right-sendemail": "Wysyłanie e‐maili do innych użytkowników",
        "right-passwordreset": "Sprawdzanie treści e‐maila o resetowaniu hasła",
        "right-managechangetags": "Tworzenie i usuwanie [[Special:Tags|znaczników]] z bazy danych",
+       "right-applychangetags": "Wprowadzanie [[Special:Tags|znaczników]] wraz z własnymi zmianami",
+       "right-changetags": "Dodawanie i usuwanie dowolnych [[Special:Tags|znaczników]] z poszczególnych wersji i wpisów w rejestrze",
        "newuserlogpage": "Nowi użytkownicy",
        "newuserlogpagetext": "To jest rejestr ostatnio utworzonych kont użytkowników",
        "rightslog": "Uprawnienia",
        "action-editmyprivateinfo": "edycji swoich prywatnych danych",
        "action-editcontentmodel": "edycji modelu zawartości strony",
        "action-managechangetags": "utwórz lub usuń znaczniki z bazy danych",
+       "action-applychangetags": "wprowadzania znaczników wraz z własnymi zmianami",
+       "action-changetags": "dodawania i usuwania dowolnych znaczników z poszczególnych wersji i wpisów w rejestrze",
        "nchanges": "$1 {{PLURAL:$1|zmiana|zmiany|zmian}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|od ostatniej wizyty}}",
        "enhancedrc-history": "historia",
        "alllogstext": "Wspólny rejestr wszystkich typów operacji dla {{GRAMMAR:D.lp|{{SITENAME}}}}.\nMożesz zawęzić liczbę wyników poprzez wybranie typu rejestru, nazwy użytkownika albo tytułu strony.",
        "logempty": "W rejestrze nie znaleziono pozycji odpowiadających zapytaniu.",
        "log-title-wildcard": "Szukaj tytułów zaczynających się od tego tekstu",
-       "showhideselectedlogentries": "Pokaż/ukryj zaznaczone wpisy rejestru",
+       "showhideselectedlogentries": "Zmień widoczność wybranych wpisów rejestru",
+       "log-edit-tags": "Edytuj znaczniki wybranych wpisów rejestru",
        "allpages": "Wszystkie strony",
        "nextpage": "Następna strona ($1)",
        "prevpage": "Poprzednia strona ($1)",
        "emailccsubject": "Kopia Twojej wiadomości do $1: $2",
        "emailsent": "Wiadomość została wysłana",
        "emailsenttext": "Twoja wiadomość została wysłana.",
-       "emailuserfooter": "Wiadomość e‐mail została wysłana z {{GRAMMAR:D.lp|{{SITENAME}}}} do $2 przez $1 z użyciem „Wyślij e‐mail do tego użytkownika”.",
+       "emailuserfooter": "Ten email został wysłany z {{GRAMMAR:D.lp|{{SITENAME}}}} do $2 przez $1 przy użyciu \"{{int\"emailpage}}\".",
        "usermessage-summary": "Pozostawianie komunikatu systemowego.",
        "usermessage-editor": "Nadawca komunikatów systemowych",
        "watchlist": "Obserwowane",
        "historywarning": "<strong>Uwaga:</strong> Strona, którą chcesz usunąć, ma {{PLURAL:$1|jedną starszą wersję|$1 starsze wersje|$1 starszych wersji}}:",
        "confirmdeletetext": "Zamierzasz usunąć stronę razem z całą dotyczącą jej historią.\nUpewnij się, czy na pewno chcesz to zrobić, że rozumiesz konsekwencje i że robisz to w zgodzie z [[{{MediaWiki:Policy-url}}|zasadami]].",
        "actioncomplete": "Operacja wykonana",
-       "actionfailed": "Działanie nie powiodło się",
+       "actionfailed": "Operacja się nie powiodła",
        "deletedtext": "Usunięto „$1”.\nZobacz $2, które zostały ostatnio wykonane.",
        "dellogpage": "Usunięte",
        "dellogpagetext": "Poniżej znajduje się lista ostatnio wykonanych usunięć.",
        "import-interwiki-history": "Kopiuj całą historię edycji tej strony",
        "import-interwiki-templates": "Załącz wszystkie szablony",
        "import-interwiki-submit": "Importuj",
-       "import-interwiki-namespace": "Docelowa przestrzeń nazw:",
-       "import-interwiki-rootpage": "Docelowa strona główna (opcjonalna):",
+       "import-mapping-default": "Importuj do domyślnych lokalizacji",
+       "import-mapping-namespace": "Importuj do przestrzeni nazw:",
+       "import-mapping-subpage": "Importuj jako podstrony strony:",
        "import-upload-filename": "Nazwa pliku",
        "import-comment": "Komentarz:",
        "importtext": "Korzystając na źródłowej wiki z narzędzia [[Special:Export|eksportu]] wyeksportuj plik.\nZapisz go na swoim dysku, a następnie prześlij go tutaj.",
        "patrol-log-page": "Rejestr patrolowania",
        "patrol-log-header": "Poniżej znajduje się rejestr patrolowania stron.",
        "log-show-hide-patrol": "$1 rejestr sprawdzania",
+       "log-show-hide-tag": "$1 rejestr znaczników",
        "deletedrevision": "Usunięto poprzednie wersje $1",
        "filedeleteerror-short": "Błąd przy usuwaniu pliku $1",
        "filedeleteerror-long": "Wystąpiły błędy przy usuwaniu pliku:\n\n$1",
        "tag-filter-submit": "Filtr",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Znacznik|Znaczniki}}]]: $2)",
        "tags-title": "Znaczniki",
-       "tags-intro": "Na tej stronie znajduje się lista znaczników, którymi oprogramowanie może oznaczyć edycje, oraz ich opisów.",
+       "tags-intro": "Na tej stronie znajduje się lista znaczników, którymi oprogramowanie może oznaczyć edycje, oraz ich opisy.",
        "tags-tag": "Nazwa znacznika",
        "tags-display-header": "Wystąpienia na listach zmian",
        "tags-description-header": "Pełny opis znaczenia",
        "tags-active-yes": "Tak",
        "tags-active-no": "Nie",
        "tags-source-extension": "Określony przez rozszerzenie",
-       "tags-source-manual": "Są wprowadzane ręcznie przez uczestników i boty",
+       "tags-source-manual": "Ręcznie wprowadzany przez użytkowników i boty",
        "tags-source-none": "Nieużywany",
        "tags-edit": "edytuj",
        "tags-delete": "usuń",
        "tags-activate": "aktywuj",
        "tags-deactivate": "dezaktywuj",
        "tags-hitcount": "$1 {{PLURAL:$1|zmiana|zmiany|zmian}}",
-       "tags-manage-no-permission": "Nie masz uprawnień do zarządzaniem zmianami znaczników.",
+       "tags-manage-no-permission": "Nie masz uprawnień do zarządzania znacznikami.",
        "tags-create-heading": "Utwórz nowy znacznik",
        "tags-create-explanation": "Nowe znaczniki będą dostępne domyślnie dla użytkowników i botów.",
        "tags-create-tag-name": "Nazwa znacznika:",
        "tags-create-invalid-chars": "Nazwy znaczników nie mogą zawierać przecinków (<code>,</code>) ani ukośników (<code>/</code>).",
        "tags-create-invalid-title-chars": "Nazwy znaczników nie mogą zawierać znaków, które nie mogą być używane w tytułach stron.",
        "tags-create-already-exists": "Znacznik „$1” już istnieje.",
-       "tags-create-warnings-above": "Następujące {{PLURAL:$2|ostrzeżenie jest |ostrzeżenia są}} wynikiem próby utworzenia znacznika \"$1\":",
+       "tags-create-warnings-above": "Następujące {{PLURAL:$2|ostrzeżenie jest|ostrzeżenia są}} wynikiem próby utworzenia znacznika „$1”:",
        "tags-create-warnings-below": "Czy chcesz kontynuować tworzenie znacznika?",
        "tags-delete-title": "Usuwanie znacznika",
        "tags-delete-explanation-initial": "Zamierzasz usunąć znacznik „$1” z bazy danych.",
-       "tags-delete-explanation-in-use": "It will be removed from {{PLURAL:$2|$2 revision or log entry|all $2 revisions and/or log entries}} to which it is currently applied.",
+       "tags-delete-explanation-in-use": "Zostanie usunięty {{PLURAL:$2|z $2 wersji lub wpisu w rejestrze|ze wszystkich $2 wersji i/lub wpisów w rejestrze}}, w {{PLURAL:$2|którym|których}} jest obecnie stosowany.",
        "tags-delete-explanation-warning": "To działanie jest <strong>nieodwracalne</strong> i <strong>nie może być wycofane</strong>, nawet przez administratorów bazy danych. Upewnij się, że chcesz usunąć te dane.",
-       "tags-delete-explanation-active": "<strong>Znacznik \"$1\" wciąż jest aktywny i będzie stosowany w przyszłości. </strong> Dla zaprzestania jego stosowania należy przejść do miejsca, w którym znacznik określono jako stosowany i usunąć tam to wskazanie.",
+       "tags-delete-explanation-active": "<strong>Znacznik „$1” wciąż jest aktywny i będzie stosowany w przyszłości. </strong> Dla zaprzestania jego stosowania należy przejść do miejsca, w którym znacznik określono jako stosowany i usunąć tam to wskazanie.",
        "tags-delete-reason": "Powód:",
        "tags-delete-submit": "Nieodwracalnie usuń ten znacznik",
-       "tags-delete-not-allowed": "Znaczniki zdefiniowane przez rozszerzenie nie mogą być usunięte chyba że dane rozszerzenie jawnie nas to zezwala.",
+       "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ł usunięty pomyślnie, ale {{PLURAL:$2|stwierdzono następujące ostrzeżenie|stwierdzono następujące ostrzeżenia}}:",
+       "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-activate-title": "Aktywacja znacznika",
        "tags-activate-question": "Zamierzasz aktywować znacznik „$1”.",
        "tags-activate-reason": "Powód:",
        "tags-deactivate-reason": "Powód:",
        "tags-deactivate-not-allowed": "Nie można dezaktywować znacznika „$1”.",
        "tags-deactivate-submit": "Dezaktywuj",
+       "tags-apply-no-permission": "Nie masz uprawnień do wprowadzania znaczników wraz z własnymi zmianami.",
+       "tags-apply-not-allowed-one": "Znacznik „$1” nie może zostać wprowadzony ręcznie.",
+       "tags-apply-not-allowed-multi": "{{PLURAL:$2|Następujący znacznik nie może zostać wprowadzony ręcznie|Następujące znaczniki nie mogą zostać wprowadzone ręcznie}}: $1",
+       "tags-update-no-permission": "Nie masz uprawnień do dodawania lub usuwania znaczników z poszczególnych wersji lub wpisów w rejestrze.",
+       "tags-update-add-not-allowed-one": "Znacznik „$1” nie może zostać dodany ręcznie.",
+       "tags-update-add-not-allowed-multi": "{{PLURAL:$2|Następujący znacznik nie może zostać dodany ręcznie|Następujące znaczniki nie mogą zostać dodane ręcznie}}: $1",
+       "tags-update-remove-not-allowed-one": "Znacznika „$1” nie można usunąć.",
+       "tags-update-remove-not-allowed-multi": "{{PLURAL:$2|Następujący znacznik nie może zostać usunięty ręcznie|Następujące znaczniki nie mogą zostać usunięte ręcznie}}: $1",
+       "tags-edit-title": "Edycja znaczników",
+       "tags-edit-manage-link": "Zarządzaj znacznikami",
+       "tags-edit-revision-selected": "{{PLURAL:$1|Wybrana wersja|Wybrane wersje}} [[:$2]]:",
+       "tags-edit-logentry-selected": "{{PLURAL:$1|Wybrana operacja|Wybrane operacje}} z rejestru:",
+       "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-new-tags": "Nowe znaczniki:",
+       "tags-edit-add": "Dodaj te znaczniki:",
+       "tags-edit-remove": "Usuń te znaczniki:",
+       "tags-edit-remove-all-tags": "(usuń wszystkie znaczniki)",
+       "tags-edit-chosen-placeholder": "Wybierz znaczniki",
+       "tags-edit-chosen-no-results": "Brak znaczników pasujących do",
+       "tags-edit-reason": "Powód:",
+       "tags-edit-revision-submit": "Zastosuj zmiany do {{PLURAL:$1|tej|$1}} wersji",
+       "tags-edit-logentry-submit": "Zastosuj zmiany do {{PLURAL:$1|tego wpisu|$1 wpisów}} w rejestrze",
+       "tags-edit-success": "Zmiany zostały zastosowane.",
+       "tags-edit-failure": "Zmiany nie mogą być zastosowane:\n$1",
+       "tags-edit-nooldid-title": "Nieprawidłowa wersja docelowa",
+       "tags-edit-nooldid-text": "Nie wybrano żadnej wersji, na której ma zostać wykonana ta operacja lub wybrana wersja nie istnieje.",
+       "tags-edit-none-selected": "Proszę zaznaczyć co najmniej jeden znacznik do dodania lub usunięcia.",
        "comparepages": "Porównanie stron",
        "compare-page1": "Strona 1",
        "compare-page2": "Strona 2",
        "logentry-managetags-delete": "$1 {{GENDER:$2|usunął|usunęła}} znacznik \"$4\" (wykluczony z $5 {{PLURAL:$5|wersji lub wpisu dziennika|wersji i/lub wpisów dziennika}})",
        "logentry-managetags-activate": "$1 aktywował{{GENDER:$2||a}} znacznik \"$4\" do korzystania przez uczestników i boty",
        "logentry-managetags-deactivate": "$1 wyłączył{{GENDER:$2||a}} znacznik \"$4\" z korzystania przez uczestników i boty",
+       "log-name-tag": "Rejestr znaczników",
+       "log-description-tag": "Ta strona pokazuje zarejestrowane operacje dodawania lub usuwania [[Special:Tags|znaczników]] z poszczególnych wersji lub wpisów w rejestrze. Niniejszy rejestr nie uwzględnia oznakowań, gdy dokonywane są w trakcie edycji, usuwania lub podobnej operacji.",
+       "logentry-tag-update-add-revision": "$1 {{GENDER:$2|dodał|dodała}} {{PLURAL:$7|znacznik|znaczniki}} $6 do wersji $4 strony $3",
+       "logentry-tag-update-add-logentry": "$1 {{GENDER:$2|dodał|dodała}} {{PLURAL:$7|znacznik|znaczniki}} $6 do wpisu w rejestrze $5 strony $3",
+       "logentry-tag-update-remove-revision": "$1 {{GENDER:$2|usunął|usunęła}} {{PLURAL:$9|znacznik|znaczniki}} $8 z wersji $4 strony $3",
+       "logentry-tag-update-remove-logentry": "$1 {{GENDER:$2|usunął|usunęła}} {{PLURAL:$9|znacznik|znaczniki}} $8 z wpisu w rejestrze $5 strony $3",
+       "logentry-tag-update-revision": "$1 {{GENDER:$2|zmienił|zmieniła}} znaczniki w wersji $4 strony $3 ({{PLURAL:$7|dodano}} $6; {{PLURAL:$9|usunięto}} $8)",
+       "logentry-tag-update-logentry": "$1 {{GENDER:$2|zmienił|zmieniła}} znaczniki we wpisie w rejestrze $5 strony $3 ({{PLURAL:$7|dodano}} $6; {{PLURAL:$9|usunięto}} $8)",
        "rightsnone": "brak",
        "revdelete-summary": "opis zmian",
        "feedback-adding": "Dodawanie opinii do strony...",
        "special-characters-group-thai": "Tajskie",
        "special-characters-group-lao": "Laotańskie",
        "special-characters-group-khmer": "Khmerskie",
-       "special-characters-title-endash": "krótka kreska",
-       "special-characters-title-emdash": "długa kreska",
+       "special-characters-title-endash": "półpauza",
+       "special-characters-title-emdash": "pauza",
        "special-characters-title-minus": "minus"
 }
index 04b979d..eaf8552 100644 (file)
        "history-feed-description": "Stòria dla pàgina ansima a sto sit-sì",
        "history-feed-item-nocomment": "$1 al $2",
        "history-feed-empty": "La pàgina che a l'ha ciamà a-i é pa; a podrìa esse stàita scancelà da 'nt ël sit, ò pura tramudà a n'àutr nòm.\n\nChe a verìfica con la [[Special:Search|pàgina d'arserca]] se a-i fusso mai dj'àutre pàgine che a podèisso andeje bin.",
+       "history-edit-tags": "Modifiché le tichëtte dle revision selessionà",
        "rev-deleted-comment": "(resumé dla modìfica gavà)",
        "rev-deleted-user": "(stranòm gavà)",
        "rev-deleted-event": "(detaj dël registr gavà)",
        "rev-showdeleted": "Mostra",
        "revisiondelete": "Scancela/disdëscancela revision",
        "revdelete-nooldid-title": "Version nen spessificà",
-       "revdelete-nooldid-text": "A l'ha nen spessificà na version ëd la pàgina për aplicheje costa fonsion, la version spessificà a esist pa, o a preuva a stërmé la version corenta.",
+       "revdelete-nooldid-text": "A l'ha nen spessificà na version ëd la pàgina për aplicheje costa fonsion, la version spessificà a esist pa, opura a l'é an camin ch'a preuva a stërmé la version corenta.",
        "revdelete-no-file": "L'archivi sërcà a-i é pa.",
        "revdelete-show-file-confirm": "É-lo sigur ëd vorèj vëdde na vërsion scancelà dl'archivi \"<nowiki>$1</nowiki>\" da $2 a $3?",
        "revdelete-show-file-submit": "Bò!",
        "right-sendemail": "Mandé un mëssagi an pòsta eletrònica a j'àutri utent",
        "right-passwordreset": "Vëdde ij mëssagi ëd pòsta eletrònica ëd riampostassion dle ciav",
        "right-managechangetags": "Creé e dëscancelé dle [[Special:Tags|tichëtte]] da la base ëd dàit",
+       "right-applychangetags": "Apliché [[Special:Tags|le tichëtte]] con soe pròpie modìfiche",
+       "right-changetags": "Gionté e gavé dle [[Special:Tags|tichëtte]] qualsëssìa an s'dle revision andividuaj e dle vos d'argistr",
        "newuserlogpage": "Registr dla creassion dj'utent",
        "newuserlogpagetext": "Sossì a l'é un registr andova ch'as marco le creassion dj'utent.",
        "rightslog": "Argistr dij drit ëd j'utent",
        "action-editmyprivateinfo": "modifiché soe anformassion përsonaj",
        "action-editcontentmodel": "modifiché ël model ëd contnù ëd na pàgina",
        "action-managechangetags": "creé e dëscancelé dle tichëtte da la base ëd dàit",
+       "action-applychangetags": "apliché le tichëtte con soe modìfiche",
+       "action-changetags": "gionté e gavé dle tichëtte qualsëssìa an s'dle revision andividuaj e dle vos d'argistr",
        "nchanges": "$1 {{PLURAL:$1|modìfica|modìfiche}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|da l'ùltima visita}}",
        "enhancedrc-history": "stòria",
        "listfiles-delete": "scancelé",
        "listfiles-summary": "Sta pàgina special-sì a smon tuti j'archivi ch'a son ëstàit carià.",
        "listfiles_search_for": "Arserché un nòm d'archivi multimojen:",
+       "listfiles-userdoesnotexist": "Ël cont utent «$1» a l'é nen argistrà.",
        "imgfile": "archivi",
        "listfiles": "Lista d'archivi",
        "listfiles_thumb": "Miniadura",
        "logempty": "Pa gnun element parèj che a sia trovasse ant ij registr.",
        "log-title-wildcard": "Sërché ant ij tìtoj ch'as anandio për",
        "showhideselectedlogentries": "Smon-e/stërmé le vos ëd registr selessionà",
+       "log-edit-tags": "Modiché le tichëtte dle vos d'argistr selessionà",
        "allpages": "Tute le pàgine",
        "nextpage": "Pàgina che a-i ven ($1)",
        "prevpage": "Pàgina anans ($1)",
        "import-interwiki-history": "Copié tute le revision ëd la stòria ëd costa pàgina",
        "import-interwiki-templates": "Anserì tùit jë stamp",
        "import-interwiki-submit": "Amporté",
-       "import-interwiki-namespace": "Spassi nominal ëd destinassion:",
-       "import-interwiki-rootpage": "Pàgina prinsipal ëd destinassion (opsional):",
+       "import-mapping-default": "Amporté ant le locassion ëstàndard",
+       "import-mapping-namespace": "Amporté vers në spassi nominal:",
+       "import-mapping-subpage": "Amporté coma sot-pàgine ëd costa pàgina:",
        "import-upload-filename": "Nòm ëd l'archivi:",
        "import-comment": "Oget:",
        "importtext": "Për piasì, che as espòrta l'archivi da 'nt la sorgiss wiki ën dovrand l'[[Special:Export|utiss d'esportassion]]. \nChe as lo salva ansima a sò ordinator e peui che a lo caria ambelessì.",
        "pageinfo-protect-cascading-yes": "É!",
        "pageinfo-protect-cascading-from": "Le protession a son a cascada da",
        "pageinfo-category-info": "Anformassion an sla categorìa",
+       "pageinfo-category-total": "Nùmer total ëd mèmber",
        "pageinfo-category-pages": "Nùmer ëd pàgine",
        "pageinfo-category-subcats": "Nùmer ëd sot-categorìe",
        "pageinfo-category-files": "Nùmer d'archivi",
        "patrol-log-page": "Registr dij contròj",
        "patrol-log-header": "Cost-sì a l'é un registr ëd le revision controlà.",
        "log-show-hide-patrol": "$1 registr verificà",
+       "log-show-hide-tag": "tichëtta d'argistr $1",
        "deletedrevision": "Veja version scancelà $1",
        "filedeleteerror-short": "Eror ën scanceland l'archivi: $1",
        "filedeleteerror-long": "A-i son ësta-ie dj'eror ën scanceland l'archivi:\n\n$1",
        "tags-deactivate-reason": "Rason:",
        "tags-deactivate-not-allowed": "A l'é nen possìbil disativé la tichëtta «$1».",
        "tags-deactivate-submit": "Disativé",
+       "tags-apply-no-permission": "A l'ha nen ël drit d'apliché dle tichëtte ëd modìfica ansema a soe modìfiche.",
+       "tags-apply-not-allowed-one": "La tichëtta «$1» a peul nen esse aplicà a man.",
+       "tags-apply-not-allowed-multi": "{{PLURAL:$2|La tichëtta sì-dapress a peul|Le tichëtte sì dapress a peulo}} nen esse aplicà a man: $1",
+       "tags-update-no-permission": "A l'ha nen ël drit ëd gionté o gavé dle tichëtte ëd modìfica da dle revision andividuaj o dle vos d'argistr.",
+       "tags-update-add-not-allowed-one": "La tichëtta «$1» a peul nen esse giontà a man.",
+       "tags-update-add-not-allowed-multi": "{{PLURAL:$2|La tichëtta sì-dapress a peul|Le tichëtte sì-dapress a peulo}} nen esse giontà a man: $1",
+       "tags-update-remove-not-allowed-one": "La tichëtta «$1» a peul nen esse gavà.",
+       "tags-update-remove-not-allowed-multi": "{{PLURAL:$2|La tichëtta sì-dapress a peul|Le tichëtte sì-dapress a peulo}} pa esse gavà a man: $1",
+       "tags-edit-title": "Modifiché le tichëtte",
+       "tags-edit-manage-link": "Gestì le tichëtte",
+       "tags-edit-revision-selected": "{{PLURAL:$1|Revision selessionnà}} ëd [[:$2]]:",
        "comparepages": "Confronté dle pàgine",
        "compare-page1": "Pàgina 1",
        "compare-page2": "Pàgina 2",
index f125288..fbbf303 100644 (file)
@@ -8,7 +8,8 @@
                        "Reedy",
                        "ZaDiak",
                        "아라",
-                       "Amire80"
+                       "Amire80",
+                       "Obaid Raza"
                ]
        },
        "tog-underline": "حوڑ تھلے لین:",
        "rev-showdeleted": "وکھاؤ",
        "revisiondelete": "ریوژن مٹاؤ یا واپس کرو",
        "revdelete-nooldid-title": "ناں منی جان والی تارگٹ ریوین",
-       "revdelete-nooldid-text": "تساں یا تے اک تارگٹ دی ریوین نئیں دسی ایس کم نوں کرن لئی،\nخاص ریوین ہے نئیں، یا فیر تسیں ہن دی تبدیلی نوں لکارۓ او۔",
+       "revdelete-nooldid-text": "تساں یا تے اک تارگٹ دی ریوین نئیں دسی ایس کم نوں کرن لئی،\nخاص ریوین ہے نئیں، یا فیر تسیں ہن دی تبدیلی نوں لکارئے او۔",
        "revdelete-no-file": "فائل جیہڑی کئی گئی اے ہے ای نئیں۔",
        "revdelete-show-file-confirm": "تساں نوں کیا پک اے جے تسیں فائل \"<nowiki>$1</nowiki>\" دی مٹائی ریوین  $2 توں $3 تک؟",
        "revdelete-show-file-submit": "ہاں",
        "import-interwiki-history": "ایس صفے لئی سارا ریرین ریکارڈ کاپی کرو۔",
        "import-interwiki-templates": "سارے سچے رلاؤ",
        "import-interwiki-submit": "لے آؤ",
-       "import-interwiki-namespace": "انت ناں",
        "import-upload-filename": "فائل دا ناں",
        "import-comment": "راۓ",
        "importtext": "مہربانی کرکے سورس وکی توں فائل نوں اگے پیجو [[Special:Export|ایکسپورٹ یوٹیلیٹی]] ورتدیاں ہویاں۔",
        "import-error-invalid": "\"$1\" صفہ نئیں لیایا گیا ایدا ناں نئیں رکھیا جاسکدا۔",
        "importlogpage": "لاگ لے کے آؤ",
        "importlogpagetext": "پربنھک لیان صفیاں دا ایڈٹ رکارڈ نال دوجے وکیاں توں۔",
-       "import-logentry-upload": "لیائی [[$1]] فائل چڑھاؤ",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|ریوین|ریویناں}}",
-       "import-logentry-interwiki": "ٹرانسوکیڈ  $1",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|ریوین|ریویناں }} $2 توں",
        "javascripttest": "JavaScript ٹیسٹنگ",
        "javascripttest-pagetext-noframework": "ایہ صفہ JavaScript  ٹیسٹاں لئی بچایا گیا اے۔",
        "api-error-unknown-warning": "انجان خبرداری: $1",
        "api-error-unknownerror": "انجان غلطی : \"$1\"۔",
        "api-error-uploaddisabled": "فائل جڑھانا ایس وکی تے بند اے۔",
-       "api-error-verification-error": "اے فائل کرپٹ ہو سکدی یا فیر ایدا فارمیٹ غلط اے۔"
+       "api-error-verification-error": "اے فائل کرپٹ ہو سکدی یا فیر ایدا فارمیٹ غلط اے۔",
+       "special-characters-group-latin": "لاطینی",
+       "special-characters-group-latinextended": "ودویں لاطینی",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "نشان",
+       "special-characters-group-greek": "یونانی",
+       "special-characters-group-cyrillic": "سریلیک",
+       "special-characters-group-arabic": "عربی",
+       "special-characters-group-arabicextended": "عربی ودویں",
+       "special-characters-group-persian": "فارسی",
+       "special-characters-group-hebrew": "عبرانی",
+       "special-characters-group-bangla": "بنگالی",
+       "special-characters-group-telugu": "تلیگو",
+       "special-characters-group-sinhala": "سنہالی",
+       "special-characters-group-gujarati": "گجراتی",
+       "special-characters-group-thai": "تھائی",
+       "special-characters-group-lao": "لاؤ",
+       "special-characters-group-khmer": "کھیمر"
 }
index d0b33ea..56e3151 100644 (file)
        "import-interwiki-history": "Kōpis wissans šisse pāusas redigīsnas istōrijan",
        "import-interwiki-templates": "Ebimmais wissans šablōnins",
        "import-interwiki-submit": "Impōrtis",
-       "import-interwiki-namespace": "Kakīnslis tītelin plattibi:",
        "import-upload-filename": "Zūrbrukes pabilisnā:",
        "import-comment": "Kumentārs:",
        "importtext": "Ekspōrt zūrbrukin iz appus wiki tērpawintei [[Special:Export|Ekspōrtas pagabtin]]. Enpeisāis din en twajjan kōmputeran be enkraūneis din stwi.",
        "import-invalid-interwiki": "Ni mazīngi impōritun iz padātan wiki.",
        "importlogpage": "Impōrtas registerin",
        "importlogpagetext": "Perwaldīwingei impōrtai stēisan pāusan sen redigīsnas istōrijan iz kittans wikins.",
-       "import-logentry-upload": "ast impōrtiwuns(si) [[$1]] pra zūrbrukes enkraūsenin",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|wersiōni|wersiōnis}}",
-       "import-logentry-interwiki": "$1 impōrtitan pra transwiki",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|wersiōni|wersiōnis}} iz $2",
        "tooltip-pt-userpage": "Majjan persōniskan pāusan",
        "tooltip-pt-anonuserpage": "Tērpautajas pāusan per IP adressin, iz kawīdan tū redigijja",
index 90a9efa..cce9a83 100644 (file)
        "statistics-users-active-desc": "هغه کارنان چې په {{PLURAL:$1|وروستۍ ورځ|وروستيو $1 ورځو}} کې فعاله ونډه لرلې",
        "pageswithprop": "د مخ ځانتياو څخه برخمن مخونه",
        "pageswithprop-legend": "د مخ ځانتياو څخه برخمن مخونه",
+       "pageswithprop-text": "په دې مخ کې د يوې ځانگړې مخ ځانتيا کارېدونکو مخونو لړليک راغلی.",
        "pageswithprop-prop": "د ځانتيا نوم:",
        "pageswithprop-submit": "ورځه",
        "doubleredirects": "دوه ځلي ورگرځېدنې",
        "protectedpages-indef": "يوازې بې پايه ژغورنې",
        "protectedpages-summary": "په دې مخ کې هغه مخونه د لړليک په توگه راغلي چې دم مهال ژغورل شوي. د جوړولو څخه ژغورل شويو سرليکونو د يو لړليک لپاره [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]] وگورئ.",
        "protectedpages-cascade": "يوازې ځوړاوبيزې ژغورنې",
+       "protectedpages-noredirect": "مخ گرځونې پټول",
        "protectedpages-timestamp": "وخت ټاپه",
        "protectedpages-page": "مخ",
        "protectedpages-expiry": "پای نېټه",
+       "protectedpages-performer": "ژغورونکی کارن",
        "protectedpages-reason": "سبب",
        "protectedpages-unknown-timestamp": "ناجوت",
        "protectedpages-unknown-performer": "ناڅرگنده کارن",
        "import-interwiki-history": "د دې مخ د پېښليک ټولې بڼې لمېسل",
        "import-interwiki-templates": "ټولې کينډۍ نغاړل",
        "import-interwiki-submit": "رالېږدول",
-       "import-interwiki-namespace": "د موخې نوم-تشيال:",
        "import-upload-filename": "د دوتنې نوم:",
        "import-comment": "تبصره:",
        "import-revision-count": "$1 {{PLURAL:$1|بڼه|بڼې}}",
        "hours-abbrev": "$1 گ",
        "seconds": "{{PLURAL:$1|$1 ثانيه|$1 ثانيې}}",
        "minutes": "{{PLURAL:$1|$1 دقيقه|$1 دقيقې}}",
-       "hours": "{{PLURAL:$1|$1 ساعت|$1 ساعتونه}}",
+       "hours": "{{PLURAL:$1|$1 گړۍ|$1 گړۍ}}",
        "days": "{{PLURAL:$1|$1 ورځ|$1 ورځې}}",
        "weeks": "{{PLURAL:$1|$1 اونۍ|$1 اونۍ}}",
        "months": "{{PLURAL:$1|$1 مياشت|$1 مياشتې}}",
        "api-error-unknownerror": "ناڅرګنده تېروتنه: \"$1\".",
        "duration-seconds": "$1 {{PLURAL:$1|ثانيه|ثانيې}}",
        "duration-minutes": "$1 {{PLURAL:$1|دقيقه|دقيقې}}",
-       "duration-hours": "$1 {{PLURAL:$1|ساعت|ساعتونه}}",
+       "duration-hours": "$1 {{PLURAL:$1|گړۍ|گړۍ}}",
        "duration-days": "$1 {{PLURAL:$1|ورځ|ورځې}}",
        "duration-weeks": "$1 {{PLURAL:$1|اونۍ|اونۍ}}",
        "duration-years": "$1 {{PLURAL:$1|کال|کالونه}}",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (چارن)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''ناچارن''')",
        "mediastatistics": "د رسنيو شمار",
+       "mediastatistics-summary": "د پورته شويو دوتنو اړونده شمارنې. په دې ځای کې د يوې دوتنې يوازې تر ټولو تازه بڼې شاملې شوي. د دوتنو زړې يا ړنگې شوې بڼې په دې شمارنو کې نه دي شاملې شوي.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 بايټ|$1 بايټونه}} ($2; $3%)",
        "mediastatistics-table-mimetype": "MIME بڼه",
        "mediastatistics-table-count": "د دوتنو شمېر",
index 6fbc172..fe26adf 100644 (file)
        "missingcommentheader": "'''Lembrete:''' Você não introduziu um assunto/título para este comentário.\nSe você clicar novamente \"{{int:savearticle}}\", a sua edição será salva sem um assunto/título.",
        "summary-preview": "Previsão de sumário:",
        "subject-preview": "Previsão do assunto/título:",
+       "previewerrortext": "Ocorreu um erro ao tentar pré-visualizar suas alterações.",
        "blockedtitle": "O usuário está bloqueado",
        "blockedtext": "'''O seu nome de usuário ou endereço de IP foi bloqueado.'''\n\nO bloqueio foi realizado por $1.\nO motivo apresentado foi ''$2''.\n\n* Início do bloqueio: $8\n* Expiração do bloqueio: $6\n* Destino do bloqueio: $7\n\nVocê pode contatar $1 ou outro [[{{MediaWiki:Grouppage-sysop}}|administrador]] para discutir sobre o bloqueio.\n\nVocê só poderá utilizar a funcionalidade \"Contatar usuário\" se um endereço de ''e-mail'' válido estiver especificado em suas [[Special:Preferences|preferências de usuário]] e você não tiver sido bloqueado de utilizar tal recurso.\nO seu endereço de IP atual é $3 e a ID de bloqueio é #$5.\nPor favor, inclua todos os detalhes acima em quaisquer tentativas de esclarecimento.",
        "autoblockedtext": "O seu endereço de IP foi bloqueado de forma automática, uma vez que foi utilizado recentemente por outro usuário, o qual foi bloqueado por $1.\nO motivo apresentado foi:\n\n:''$2''\n\n* Início do bloqueio: $8\n* Expiração do bloqueio: $6\n* Destino do bloqueio: $7\n\nVocê pode contatar $1 ou outro [[{{MediaWiki:Grouppage-sysop}}|administrador]] para discutir sobre o bloqueio.\n\nNote que não poderá utilizar a funcionalidade \"Contatar usuário\" se não possuir uma conta nesta wiki ({{SITENAME}}) com um endereço de ''e-mail'' válido indicado nas suas [[Special:Preferences|preferências de usuário]] ou se tiver sido bloqueado de utilizar tal recurso.\n\nSeu endereço de IP no momento é $3 e sua ID de bloqueio é #$5.\nPor favor, inclua tais dados em qualquer tentativa de esclarecimentos que for realizar.",
        "revdelete-edit-reasonlist": "Editar motivos de eliminação",
        "revdelete-offender": "Autor da revisão:",
        "suppressionlog": "Registro de supressões",
-       "suppressionlogtext": "Abaixo está uma lista das eliminações e bloqueios envolvendo conteúdo ocultado por administradores.\nVeja a [[Special:BlockList|lista de bloqueios]] para uma lista de banimentos e bloqueios em efeito neste momento.",
+       "suppressionlogtext": "Abaixo está uma lista das eliminações e bloqueios envolvendo conteúdo ocultado para administradores.\nVeja a [[Special:BlockList|lista de bloqueios]] para uma lista de banimentos e bloqueios em efeito neste momento.",
        "mergehistory": "Fundir históricos das páginas",
        "mergehistory-header": "A partir desta página é possível fundir históricos de edições de uma página em outra.\nCertifique-se de que tal alteração manterá a continuidade das ações.",
        "mergehistory-box": "Fundir revisões de duas páginas:",
        "right-sendemail": "Enviar email a outros usuários",
        "right-passwordreset": "Ver todos os e-mails de reposição de senhas",
        "right-managechangetags": "Criar e apagar [[Special:Tags|tags]] na base de dados",
+       "right-applychangetags": "Aplicar [[Especial:Etiquetas|etiquetas]] juntamente com as alterações de alguém",
+       "right-changetags": "Adicionar e remover [[Especial:Etiquetas|etiquetas]] arbitrárias em revisões e ''logs'' individuais",
        "newuserlogpage": "Registro de criação de usuários",
        "newuserlogpagetext": "Este é um registro de novas contas de usuário",
        "rightslog": "Registro de privilégios de usuário",
        "action-editmyprivateinfo": "modifique suas informações privadas",
        "action-editcontentmodel": "editar o conteudo do modelo de uma pagina",
        "action-managechangetags": "Criar e apagar etiquetas da base de dados",
+       "action-applychangetags": "aplicar etiquetas juntamente com suas alterações",
+       "action-changetags": "adicionar e remover etiquetas arbitrárias em revisões e ''logs'' individuais",
        "nchanges": "$1 {{PLURAL:$1|alteração|alterações}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|desde a última visita}}",
        "enhancedrc-history": "histórico",
        "logempty": "Nenhum item idêntico no registro.",
        "log-title-wildcard": "Procurar por títulos que sejam iniciados com o seguinte texto",
        "showhideselectedlogentries": "Exibir/ocultar os itens de registros selecionados",
+       "log-edit-tags": "Editar etiquetas das entradas selecionadas",
        "allpages": "Todas as páginas",
        "nextpage": "Próxima página ($1)",
        "prevpage": "Página anterior ($1)",
        "emailccsubject": "Cópia de sua mensagem para $1: $2",
        "emailsent": "E-mail enviado",
        "emailsenttext": "Sua mensagem foi enviada.",
-       "emailuserfooter": "Este e-mail foi enviado por $1 para $2 através da opção de \"enviar e-mail ao usuário\" da {{SITENAME}}.",
+       "emailuserfooter": "Este email foi enviado por $1 para $2 através da função\"{{int:emailpage}}\" do site {{SITENAME}}.",
        "usermessage-summary": "Deixar mensagem de sistema.",
        "usermessage-editor": "Mensagens de sistema",
        "watchlist": "Páginas vigiadas",
        "import-interwiki-history": "Copiar todas as edições para esta página",
        "import-interwiki-templates": "Incluir todas as predefinições",
        "import-interwiki-submit": "Importar",
-       "import-interwiki-namespace": "Domínio de destino:",
-       "import-interwiki-rootpage": "Página raiz de destino (opcional):",
+       "import-mapping-default": "Importar locais padrão",
+       "import-mapping-namespace": "Importar para o espaço nominal:",
+       "import-mapping-subpage": "Importar como sub-página da seguinte pagina:",
        "import-upload-filename": "Nome do arquivo:",
        "import-comment": "Comentário:",
        "importtext": "Por favor, exporte o arquivo do wiki de origem utilizando a página especial [[Special:Export|exportação de páginas]].\nSalve o arquivo no seu computador e importe-o aqui.",
        "pageinfo-protect-cascading-yes": "Sim",
        "pageinfo-protect-cascading-from": "Proteções herdadas de",
        "pageinfo-category-info": "Informações da categoria",
+       "pageinfo-category-total": "Total de membros",
        "pageinfo-category-pages": "Número de páginas",
        "pageinfo-category-subcats": "Número de subcategorias",
        "pageinfo-category-files": "Número de arquivos",
        "patrol-log-page": "Registro de edições patrulhadas",
        "patrol-log-header": "Este é um registro de edições patrulhadas.",
        "log-show-hide-patrol": "$1 registro de edições patrulhadas",
+       "log-show-hide-tag": "$1 etiqueta de log",
        "deletedrevision": "Apagou a versão antiga $1",
        "filedeleteerror-short": "Erro ao eliminar arquivo: $1",
        "filedeleteerror-long": "Foram encontrados erros ao tentar eliminar o arquivo:\n\n$1",
        "tags-activate-submit": "Ativar",
        "tags-deactivate-title": "Desativar etiqueta",
        "tags-deactivate-submit": "Desativar",
+       "tags-edit-manage-link": "Gerenciar etiquetas",
+       "tags-edit-existing-tags": "Etiquetas existentes:",
+       "tags-edit-new-tags": "Novas etiquetas:",
+       "tags-edit-add": "Adicionar estas etiquetas:",
+       "tags-edit-remove": "Remover estas etiquetas:",
+       "tags-edit-chosen-placeholder": "Selecionar algumas etiquetas",
        "comparepages": "Comparar páginas",
        "compare-page1": "Página 1",
        "compare-page2": "Página 2",
index 6374824..cd286ec 100644 (file)
        "feb": "Fev.",
        "mar": "Mar.",
        "apr": "Abr.",
-       "may": "Maio",
+       "may": "Mai.",
        "jun": "Jun.",
        "jul": "Jul.",
        "aug": "Ago.",
        "currentevents": "Notícias",
        "currentevents-url": "Project:Notícias",
        "disclaimers": "Exoneração de responsabilidade",
-       "disclaimerpage": "Project:Aviso_geral",
+       "disclaimerpage": "Project:Aviso geral",
        "edithelp": "Ajuda de edição",
        "helppage-top-gethelp": "Ajuda",
        "mainpage": "Página principal",
        "portal": "Portal comunitário",
        "portal-url": "Project:Portal comunitário",
        "privacy": "Política de privacidade",
-       "privacypage": "Project:Política_de_privacidade",
+       "privacypage": "Project:Política de privacidade",
        "badaccess": "Erro de permissão",
        "badaccess-group0": "Não está autorizado a executar a operação solicitada.",
        "badaccess-groups": "A operação solicitada está limitada a utilizadores {{PLURAL:$2|do grupo|de um dos seguintes grupos}}: $1.",
        "no-null-revision": "Não foi possível criar uma nova revisão nula para a página \"$1\"",
        "badtitle": "Título inválido",
        "badtitletext": "O título de página solicitado era inválido, vazio, ou a ligação interlínguas estava incorreta.\nTalvez contenha um ou mais caracteres que não podem ser usados em títulos.",
+       "title-invalid-empty": "O título da página solicitada está vazio ou contém apenas o nome de um domínio.",
+       "title-invalid-utf8": "O título da página solicitada contém uma sequência UTF-8 inválida.",
+       "title-invalid-interwiki": "O título contém uma ligação interna",
+       "title-invalid-talk-namespace": "O título da página solicitada refere-se a uma página de discussão que não existe.",
+       "title-invalid-characters": "O título da página solicitada contém carateres inválidos: \"$1\".",
+       "title-invalid-too-long": "O título da página solicitada é demasiado longo. Não deverá ser maior que $1 bytes na codificação UTF-8.",
        "perfcached": "Os seguintes dados encontram-se armazenados na ''cache'' e podem não estar atualizados. No máximo {{PLURAL:$1|um resultado é disponível|$1 resultados são disponíveis}} na ''cache''.",
        "perfcachedts": "Os seguintes dados encontram-se armazenados na ''cache'' e foram atualizados pela última vez a $1. No máximo {{PLURAL:$4|um resultado está disponível|$4 resultados estão disponíveis}} na ''cache''.",
        "querypage-no-updates": "As atualizações estão presentemente desativadas para esta página.\nPor enquanto, os dados aqui presentes não poderão ser atualizados.",
        "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-interwiki-namespace": "Domínio de destino:",
-       "import-interwiki-rootpage": "Raiz da página de destino (opcional):",
        "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.",
        "tags-edit-remove-all-tags": "(remover todas as etiquetas)",
        "tags-edit-chosen-placeholder": "Selecione algumas etiquetas",
        "tags-edit-reason": "Motivo:",
-       "tags-edit-success": "<strong>As alterações foram aplicadas com sucesso.</strong>",
-       "tags-edit-failure": "<strong>As alterações não puderam ser aplicadas:</strong>\n$1",
+       "tags-edit-success": "As alterações foram aplicadas com sucesso.",
+       "tags-edit-failure": "As alterações não puderam ser aplicadas:\n$1",
        "tags-edit-none-selected": "Por favor, selecione pelo menos uma etiqueta para adicionar ou remover.",
        "comparepages": "Comparar páginas",
        "compare-page1": "Página 1",
index 4ee5f25..b11cad1 100644 (file)
                        "Pikne",
                        "Tacsipacsi",
                        "Totosunarto",
-                       "Macofe"
+                       "Macofe",
+                       "FRacco"
                ]
        },
        "sidebar": "{{notranslate}}",
        "no-null-revision": "Error message shown when no null revision could be created to reflect a protection level change.\n\nAbout \"null revision\":\n* Create a new null-revision for insertion into a page's history. This will not re-save the text, but simply refer to the text from the previous version.\n* Such revisions can for instance identify page rename operations and other such meta-modifications.\n\nParameters:\n* $1 - page title",
        "badtitle": "The page title when a user requested a page with invalid page name. The content will be {{msg-mw|badtitletext}}.",
        "badtitletext": "The message shown when a user requested a page with invalid page name. The page title will be {{msg-mw|badtitle}}.\n\nSee also:\n* {{msg-mw|selfmove}}\n* {{msg-mw|immobile-source-namespace}}\n* {{msg-mw|immobile-target-namespace-iw}}\n* {{msg-mw|immobile-target-namespace}}",
+       "title-invalid-empty": "Used as text of error message: empty title",
+       "title-invalid-utf8": "Used as text of error message: invalid UTF8 sequence",
+       "title-invalid-interwiki": "Used as text of error message: invalid interwiki link",
+       "title-invalid-talk-namespace": "Used as text of error message: invalid talk page",
+       "title-invalid-characters": "Used as text of error message: invalid characters in title ($1 is the character)",
+       "title-invalid-relative": "Used as text of error message: relative titles are invalid",
+       "title-invalid-magic-tilde": "Used as text of error message: magic tilde sequence is invalid in page title",
+       "title-invalid-too-long": "Used as text of error message: too long title ($1 is maximum length)",
+       "title-invalid-leading-colon": "Used as text of error message: colon at the beginning of title is invalid",
        "perfcached": "Like {{msg-mw|perfcachedts}} but used when we do not know how long ago page was cached (unlikely to happen).\n\nParameters:\n* $1 - the max result cut off ($wgQueryCacheLimit)",
        "perfcachedts": "Used on pages that list page lists for which the displayed data is cached. Parameters:\n* $1 - a time stamp (date and time combined)\n* $2 - a date (optional)\n* $3 - a time (optional)\n* $4 - the cut off limit for cached results ($wgQueryCacheLimit). If there are more then this many results for the query, only the first $4 of those will be listed on the page. Usually $4 is about 1000.",
        "querypage-no-updates": "Text on some special pages, e.g. [[Special:FewestRevisions]].",
        "filehist-thumbtext": "Shown in the file history list of a file description page. Parameters:\n* $1 - timestamp, localized. e.g. ''10:23, 18 april 2007''\n* $2 - (Optional) the date\n* $3 - (Optional) the time\nExample: [[wikipedia:Image:Madeleine close2.jpg]]",
        "filehist-nothumb": "Shown if no thumbnail is available in the file history list of a file desription page.\n\nExample: [[:Image:Addon-icn.png]]",
        "filehist-user": "In image description page.\n\n{{Identical|User}}",
-       "filehist-dimensions": "Used as label in file description page.\n\nFollowed by length, filesize, and width x height. e.g. \"1.5 s (13 KB)\".",
+       "filehist-dimensions": "Used as label in file description page.\n\nFollowed by length, or width x height, and filesize. e.g. \"1.5 s (13 KB)\".",
        "filehist-filesize": "Used in image description page.\n{{Identical|File size}}",
        "filehist-comment": "In file description page\n\n{{Identical|Comment}}",
        "imagelinks": "In top header of the image description page, see for example [[:Image:Yes.png]]. Shows a list of pages where this file is used.\n{{Identical|File usage}}",
        "import-interwiki-history": "This is an option on [[Special:Import]]. Usually, when unchecked, only the first version of a page is imported. When you check the option, all versions are imported. This is important often to check for licensing reasons.\n\nSee also:\n* {{msg-mw|Import-interwiki-templates}}\n* {{msg-mw|Import-interwiki-namespace}}\n* {{msg-mw|Import-comment}}\n* {{msg-mw|Import-interwiki-rootpage}}\n* {{msg-mw|Import-interwiki-submit}}",
        "import-interwiki-templates": "Used as label for the checkbox in [[Special:Import]].\n\nSee also:\n* {{msg-mw|Import-interwiki-history}}\n* {{msg-mw|Import-interwiki-namespace}}\n* {{msg-mw|Import-comment}}\n* {{msg-mw|Import-interwiki-rootpage}}\n* {{msg-mw|Import-interwiki-submit}}",
        "import-interwiki-submit": "Used as Submit button text in [[Special:Import]].\n\nSee also:\n* {{msg-mw|Import-interwiki-history}}\n* {{msg-mw|Import-interwiki-templates}}\n* {{msg-mw|Import-interwiki-namespace}}\n* {{msg-mw|Import-comment}}\n* {{msg-mw|Import-interwiki-rootpage}}\n{{Identical|Import}}",
-       "import-interwiki-namespace": "Used as label in Import form on [[Special:Import]].\n\nSee also:\n* {{msg-mw|Import-interwiki-history}}\n* {{msg-mw|Import-interwiki-templates}}\n* {{msg-mw|Import-comment}}\n* {{msg-mw|Import-interwiki-rootpage}}\n* {{msg-mw|Import-interwiki-submit}}",
-       "import-interwiki-rootpage": "Used on [[Special:Import]] as label.\n\nSee also:\n* {{msg-mw|Import-interwiki-history}}\n* {{msg-mw|Import-interwiki-templates}}\n* {{msg-mw|Import-interwiki-namespace}}\n* {{msg-mw|Import-comment}}\n* {{msg-mw|Import-interwiki-submit}}",
+       "import-mapping-default": "Used as label for the first of three radio buttons in Import form on [[Special:Import]].\n\nSee also:\n* {{msg-mw|Import-mapping-namespace}}\n* {{msg-mw|Import-mapping-subpage}}",
+       "import-mapping-namespace": "Used as label for the second of three radio buttons in Import form on [[Special:Import]]. The radio button is followed by a drop-down list from which the user can select a namespace.\n\nSee also:\n* {{msg-mw|Import-mapping-default}}\n* {{msg-mw|Import-mapping-subpage}}",
+       "import-mapping-subpage": "Used as label for the third of three radio buttons in Import form on [[Special:Import]]. The radio button is followed by a text box in which the user can type a page name. The imported pages will be created as subpages of the entered page name.\n\nSee also:\n* {{msg-mw|Import-mapping-default}}\n* {{msg-mw|Import-mapping-namespace}}",
        "import-upload-filename": "Used on [[Special:Import]] as label for upload of an XML file containing the pages to import.\n{{Identical|Filename}}",
        "import-comment": "Used as label for input box in [[Special:Import]].\n\nSee also:\n* {{msg-mw|Import-interwiki-history}}\n* {{msg-mw|Import-interwiki-templates}}\n* {{msg-mw|Import-interwiki-namespace}}\n* {{msg-mw|Import-interwiki-rootpage}}\n* {{msg-mw|Import-interwiki-submit}}\n{{Identical|Comment}}",
        "importtext": "Used in the Import form on [[Special:Import]].",
        "redirect-text": "Inside fieldset for [[Special:Redirect]]",
        "redirect-summary": "Shown at top of [[Special:Redirect]]",
        "redirect-submit": "Button label in [[Special:Redirect]].\n{{Identical|Go}}",
-       "redirect-lookup": "First field label in [[Special:Redirect]].\n\nFollowed by the select box which has the following options:\n* {{msg-mw|Redirect-user}}\n* {{msg-mw|Redirect-page}}\n* {{msg-mw|Redirect-revision}}\n* {{msg-mw|Redirect-file}}",
+       "redirect-lookup": "First field label in [[Special:Redirect]].\n\nFollowed by the select box which has the following options:\n* {{msg-mw|Redirect-user}}\n* {{msg-mw|Redirect-page}}\n* {{msg-mw|Redirect-revision}}\n* {{msg-mw|Redirect-file}}\n{{Identical|Lookup}}",
        "redirect-value": "Second field label in [[Special:Redirect]]\n{{Identical|Value}}",
        "redirect-user": "Description of lookup type for [[Special:Redirect]].\n{{Identical|User ID}}",
        "redirect-page": "Description of lookup type for [[Special:Redirect]].\n{{Identical|Page ID}}",
        "feedback-termsofuse": "Label with an agreement about the terms of use.",
        "feedback-thanks": "Thanks message, appears if feedback was successful. Parameters:\n* $1 - \"Feedback\"\n* $2 - Feedback page URL",
        "feedback-thanks-title": "The title of the thank you dialog at the end of the submission process.\n{{Identical|Thank you}}",
-       "feedback-useragent": "A label denoting the user agent in the feedback that is posted to the feedback page.",
+       "feedback-useragent": "A label denoting the user agent in the feedback that is posted to the feedback page.\n{{Identical|User agent}}",
        "searchsuggest-search": "Greyed out default text in the simple search box in the Vector skin. (It disappears and lets the user enter the requested search terms when the search box receives focus.)\n\n{{Identical|Search}}",
        "searchsuggest-containing": "Label used in the special item of the search suggestions list which gives the user an option to perform a full text search for the term.",
        "api-error-badaccess-groups": "API error message that can be used for client side localisation of API errors.",
index d91d094..8d4a1e8 100644 (file)
        "querypage-disabled": "Kay sapaq p'anqamanqa ama nisqam allinta llamk'anapaq.",
        "booksources": "Liwrukunapi pukyukuna",
        "booksources-search-legend": "Liwrukunapi pukyukunata maskay",
+       "booksources-search": "Maskay",
        "booksources-text": "Kay qatiqpiqa huk llika tiyaykunaman t'inkikunatam rikunki, musuq icha mawk'a liwrukunata qhatuq, maskasqayki liwrukunamantachá astawan willaq:",
        "booksources-invalid-isbn": "ISBN huchhaqa manachá allinchu; pantasqata llanchiriy qallariy qillqamanta iskaychamuspa.",
        "specialloguserlabel": "Rurapuq:",
        "import-interwiki-history": "Kay p'anqapaq tukuy wiñay kawsaynintinta iskaychay",
        "import-interwiki-templates": "Tukuy plantillakunapas",
        "import-interwiki-submit": "Hawamanta chaskiy",
-       "import-interwiki-namespace": "Kay suti k'itiman churay:",
-       "import-interwiki-rootpage": "Taripana saphi p'anqa (akllanalla):",
        "import-upload-filename": "Willañiqip sutin:",
        "import-comment": "Willayniyki:",
        "importtext": "Ama hina kaspa, willañiqita qallariy wikimanta [[Special:Export|hawaman quna llamk'anawan]] hawaman quy antañiqiqniykipi waqaychaspa, chaymantataq kaypi churkuy.",
        "tooltip-pt-mycontris": "Llamk'apusqaykikuna",
        "tooltip-pt-login": "Kallpachaykiku yaykunaykiqa allinmi nispa, mana manu kanayki kaptinpas",
        "tooltip-pt-logout": "Llamk'apuy tiyaymanta lluqsiy",
+       "tooltip-pt-createaccount": "Rakiquna kamarispayki yaykunaykiqa allinchá kanman, hinaspapas ruranayki manam tiyanchu.",
        "tooltip-ca-talk": "Qillqasqap samiqninmanta rimanakuna p'anqa",
        "tooltip-ca-edit": "Kay p'anqata llamk'apuytam atinki. Ama hina kaspa, manaraq waqaychaspa ñawpaqta qhawarillay.",
        "tooltip-ca-addsection": "Musuq rakita qallariy",
index a94802c..2034bab 100644 (file)
        "import-interwiki-history": "Copiar l'entira cronologia da questa pagina",
        "import-interwiki-templates": "Includer tut ils models",
        "import-interwiki-submit": "Importar",
-       "import-interwiki-namespace": "Tip da pagina da destinaziun:",
-       "import-interwiki-rootpage": "Pagina principala da destinaziun (opziunal):",
        "import-upload-filename": "Num da datoteca:",
        "import-comment": "Commentari:",
        "importtext": "Exportescha la datoteca da la wiki da funtauna cun agid da la [[Special:Export|funcziun d'export]].\nLa memorisescha sin tes computer e chargia si ella qua.",
index 9c10465..0e72933 100644 (file)
        "no-null-revision": "Nu s-a putut crea o nouă versiune nulă pentru pagina „$1”",
        "badtitle": "Titlu incorect",
        "badtitletext": "Titlul paginii căutate este incorect, gol sau este o legătură interlinguală sau interwiki incorectă.\nPoate conține unul sau mai multe caractere ce nu pot fi folosite în titluri.",
+       "title-invalid-empty": "Titlul de pagină solicitat este vid sau conține doar denumirea spațiului de nume.",
+       "title-invalid-utf8": "Titlul de pagină solicitat conține o secvență UTF-8 eronată.",
+       "title-invalid-interwiki": "Titlul conține o legătură interlinguală",
+       "title-invalid-talk-namespace": "Titlul de pagină solicitat se referă la o pagină de discuție care nu poate exista.",
+       "title-invalid-characters": "Titlul de pagină solicitat conține caractere nevalide: „$1”.",
+       "title-invalid-relative": "Titlul are un traseu relativ. Titlurile de pagină relative (./, ../) nu sunt valide, deoarece adesea nu vor putea fi accesate atunci când sunt manipulate de navigatorul utilizatorului.",
+       "title-invalid-magic-tilde": "Titlul de pagină solicitat conține o expresie magică de tilde nevalidă (<nowiki>~~~</nowiki>).",
+       "title-invalid-too-long": "Titlul de pagină solicitat este prea lung. Acesta nu ar trebui să depășească $1 octeți în codarea UTF-8.",
+       "title-invalid-leading-colon": "Titlul de pagină solicitat conține caracterul nevalid „:” la început.",
        "perfcached": "Datele următoare au fost păstrate în cache și s-ar putea să nu fie actualizate. Un maxim de {{PLURAL:$1|un rezultat este disponibil|$1 rezultate sunt disponibile}} în cache.",
        "perfcachedts": "Informațiile de mai jos provin din cache, ultima actualizare efectuându-se la $1. Un maxim de {{PLURAL:$4|un rezultat este disponibil|$4 rezultate sunt disponibile}} în cache.",
        "querypage-no-updates": "Actualizările acestei pagini sunt momentan dezactivate. Informațiile de aici nu sunt împrospătate.",
        "import-interwiki-history": "Copiază toate versiunile istoricului acestei pagini",
        "import-interwiki-templates": "Includeți toate formatele",
        "import-interwiki-submit": "Importă",
-       "import-interwiki-namespace": "Transferă către spațiul de nume:",
-       "import-interwiki-rootpage": "Pagina rădăcină de destinație (opțional):",
+       "import-mapping-default": "Importă către destinațiile implicite",
+       "import-mapping-namespace": "Importă către un spațiu de nume:",
+       "import-mapping-subpage": "Importă ca subpagini ale următoarei pagini:",
        "import-upload-filename": "Nume fișier:",
        "import-comment": "Comentariu:",
        "importtext": "Vă rugăm să exportați fișierul din wikiul sursă folosind [[Special:Export|utilitarul de exportare]].\nSalvați-l pe calculatorul dumneavoastră și încărcați-l aici.",
        "tags-edit-reason": "Motiv:",
        "tags-edit-revision-submit": "Aplică modificările {{PLURAL:$1|acestei versiuni|celor $1 versiuni|celor $1 de versiuni}}",
        "tags-edit-logentry-submit": "Aplică modificările {{PLURAL:$1|acestei intrări din jurnal|celor $1 intrări din jurnal|celor $1 de intrări din jurnal}}",
-       "tags-edit-success": "<strong>Modificările au fost aplicate cu succes.</strong>",
-       "tags-edit-failure": "<strong>Modificările nu au putut fi aplicate:</strong>\n$1",
+       "tags-edit-success": "Modificările au fost aplicate cu succes.",
+       "tags-edit-failure": "Modificările nu au putut fi aplicate:\n$1",
        "tags-edit-nooldid-title": "Versiune-țintă nevalidă",
        "tags-edit-nooldid-text": "Fie nu ați indicat nicio versiune-țintă pe care să aplicați această funcție, fie versiunea indicată nu există.",
        "tags-edit-none-selected": "Alegeți cel puțin o etichetă pe care s-o adăugați sau s-o ștergeți.",
index 71f0c18..ca615f0 100644 (file)
        "searchrelated": "colleghete",
        "searchall": "tutte",
        "showingresults": "Stoche a fazze vedè aqquà sotte {{PLURAL:$1|'''1''' resultete|'''$1''' resultete}} ca accumenzene cu #'''$2'''.",
+       "search-showingresults": "{{PLURAL:$4|Resultate <strong>$1</strong> de <strong>$3</strong>|Resultate <strong>$1 - $2</strong> de <strong>$3</strong>}}",
        "search-nonefound": "Non ge stonne resultete ca soddisfecene l'inderrogazione.",
        "powersearch-legend": "Ricerche avanzete",
        "powersearch-ns": "Cirche jndr'à le namespace:",
        "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",
        "rcshowhideminor": "$1 cangiaminde stuèdeche",
+       "rcshowhideminor-hide": "Scunne",
        "rcshowhidebots": "$1 bot",
+       "rcshowhidebots-show": "Fà vedè",
        "rcshowhideliu": "$1 utinde reggistrate",
+       "rcshowhideliu-hide": "Scunne",
        "rcshowhideanons": "$1 utende scanusciute",
+       "rcshowhideanons-hide": "Scunne",
        "rcshowhidepatr": "$1 cangiaminde condrollete",
        "rcshowhidemine": "$1 cangiaminde mie",
+       "rcshowhidemine-hide": "Scunne",
        "rclinks": "Vide l'urteme $1 cangiaminde jndr'à l'urteme $2 sciurne<br />$3",
        "diff": "diff",
        "hist": "cunde",
        "import-interwiki-history": "Copie tutte 'a sotrie de le versiune de sta pàgene",
        "import-interwiki-templates": "Inglude tutte le template",
        "import-interwiki-submit": "'Mborte",
-       "import-interwiki-namespace": "Namespace de destinazione:",
-       "import-interwiki-rootpage": "Pàgena prengepàale de destinazione (opzionale):",
        "import-upload-filename": "Nome d'u file:",
        "import-comment": "Commende:",
        "importtext": "Pe piacere esporte 'u file da 'a Uicchi sorgende ausanne l'[[Special:Export|utilità de esportazione]].\nReggistrele sus a 'u combiuter tune e carechele aqquà.",
index 67e9d27..4b4e98d 100644 (file)
        "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-showdeleted": "показать",
        "revisiondelete": "Удалить / восстановить версии страницы",
        "revdelete-nooldid-title": "Не задана целевая версия",
-       "revdelete-nooldid-text": "Ð\92Ñ\8b Ð½Ðµ Ð·Ð°Ð´Ð°Ð»Ð¸ Ñ\86елевÑ\83Ñ\8e Ð²ÐµÑ\80Ñ\81иÑ\8e (или Ð²ÐµÑ\80Ñ\81ии) Ð´Ð»Ñ\8f Ð²Ñ\8bполнениÑ\8f Ñ\8dÑ\82ой Ñ\84Ñ\83нкÑ\86ии.",
+       "revdelete-nooldid-text": "Ð\92Ñ\8b Ð½Ðµ Ð·Ð°Ð´Ð°Ð»Ð¸ Ñ\86елевÑ\83Ñ\8e Ð²ÐµÑ\80Ñ\81иÑ\8e (веÑ\80Ñ\81ии) Ð´Ð»Ñ\8f Ð²Ñ\8bполнениÑ\8f Ñ\8dÑ\82ой Ñ\84Ñ\83нкÑ\86ии, Ñ\83казаннаÑ\8f Ð²ÐµÑ\80Ñ\81иÑ\8f Ð½Ðµ Ñ\81Ñ\83Ñ\89еÑ\81Ñ\82вÑ\83еÑ\82, Ð¸Ð»Ð¸ Ð²Ñ\8b Ð¿Ñ\8bÑ\82аеÑ\82еÑ\81Ñ\8c Ñ\81кÑ\80Ñ\8bÑ\82Ñ\8c Ñ\82екÑ\83Ñ\89Ñ\83Ñ\8e Ð²ÐµÑ\80Ñ\81иÑ\8e.",
        "revdelete-no-file": "Указанный файл не существует.",
        "revdelete-show-file-confirm": "Вы уверены, что вы хотите просмотреть удалённую версию файла «<nowiki>$1</nowiki>» от $2, $3?",
        "revdelete-show-file-submit": "Да",
        "protect-othertime": "Другое время:",
        "protect-othertime-op": "другое время",
        "protect-existing-expiry": "Текущее время окончания: $2, $3",
-       "protect-existing-expiry-infinity": "Текущее время окончания: бесконечно",
+       "protect-existing-expiry-infinity": "Текущее время окончания: бессрочно",
        "protect-otherreason": "Другая причина/дополнение:",
        "protect-otherreason-op": "Другая причина",
        "protect-dropdown": "* Типовые причины защиты\n** частый вандализм\n** чрезмерный спам\n** непродуктивная война правок\n** популярная страница",
        "import-interwiki-history": "Копировать всю историю изменений этой страницы",
        "import-interwiki-templates": "Включить все шаблоны",
        "import-interwiki-submit": "Импортировать",
-       "import-interwiki-namespace": "Целевое пространство имён:",
-       "import-interwiki-rootpage": "Корневая страница (необязательно):",
+       "import-mapping-namespace": "Импортировать в пространство имён:",
        "import-upload-filename": "Имя файла:",
        "import-comment": "Примечание:",
        "importtext": "Пожалуйста, экспортируйте страницу из исходной вики, используя [[Special:Export|соответствующий инструмент]]. Сохраните файл на диск, а затем загрузите его сюда.",
        "pageinfo-protect-cascading-yes": "Да",
        "pageinfo-protect-cascading-from": "Каскадная защита от",
        "pageinfo-category-info": "Информация о категории",
+       "pageinfo-category-total": "Общее число членов",
        "pageinfo-category-pages": "Количество страниц",
        "pageinfo-category-subcats": "Количество подкатегорий",
        "pageinfo-category-files": "Количество файлов",
        "tags-edit-remove-all-tags": "(удалить все метки)",
        "tags-edit-chosen-placeholder": "Выберите один или несколько тэгов",
        "tags-edit-reason": "Причина:",
+       "tags-edit-revision-submit": "Применить изменения к {{PLURAL:$1|этой версии|$1 версиям}}",
+       "tags-edit-logentry-submit": "Применить изменения к {{PLURAL:$1|этой записи журнала|$1 записям журнала}}",
+       "tags-edit-success": "Изменения были успешно применены.",
+       "tags-edit-failure": "Изменения не удалось примененить.\n$1",
+       "tags-edit-nooldid-title": "Не задана целевая версия",
+       "tags-edit-nooldid-text": "Вы не задали целевую версию (версии) для выполнения этой функции, или указанная версия не существует.",
        "tags-edit-none-selected": "Пожалуйста, выберите по крайней мере один тег, чтобы добавить или удалить.",
        "comparepages": "Сравнение страниц",
        "compare-page1": "Первая страница",
        "logentry-managetags-activate": "$1 активировал{{GENDER:$2||а}} метку «$4» для использования участниками и ботами",
        "logentry-managetags-deactivate": "$1 отключил{{GENDER:$2||а}} метку «$4» для использования участниками и ботами",
        "log-name-tag": "Журнал меток",
+       "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": "Добавление отзыва на страницу…",
        "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:* Клонировав один из репозиториев <code>mediawiki/skins/*</code> через git в подпапку <code  dir=\"ltr\">skins/</code> папки, куда установлена MediaWiki.\n: Это не должно навредить вашему репозиторию, если вы 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\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:* Клонировав один из репозиториев <code>mediawiki/skins/*</code> через git в подпапку <code dir=\"ltr\">skins/</code> папки, куда установлена MediaWiki.\n: Это не должно навредить вашему репозиторию, если вы MediaWiki-разработчик. См. [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration] для получения информации о том, как включить темы оформления и выбрать тему по умолчанию.",
+       "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:* клонировав один из репозиториев <code>mediawiki/skins/*</code> через git в подпапку <code  dir=\"ltr\">skins/</code> папки, куда установлена MediaWiki.\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:* crfxfd [https://www.mediawiki.org/wiki/Download архив установочных файлов], который содержит несколько тем оформления и расширений; вы можете скопировать папку <code>skins/</code> из него;\n:* скачав архивы отдельных тем оформления с [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org];\n:* rлонировав один из репозиториев <code>mediawiki/skins/*</code> через git в подпапку <code dir=\"ltr\">skins/</code> папки, куда установлена MediaWiki.\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 ('''отключено''')",
        "mediastatistics": "Медиа-статистика",
index dfa980a..fec8472 100644 (file)
        "import-interwiki-history": "Копіровати вшыткы історічны верзії той сторінкы",
        "import-interwiki-templates": "Загорнути вшыткы шаблоны",
        "import-interwiki-submit": "Імпортовати",
-       "import-interwiki-namespace": "Цілёвый простор назв:",
-       "import-interwiki-rootpage": "Цїлёва корїнёва сторінка (необовязково):",
        "import-upload-filename": "Назва файлу:",
        "import-comment": "Коментарь:",
        "importtext": "Просиме Вас, експортуйте сторінку з іншой вікі помочов [[Special:Export|інштрументу на експорт]], уложте файл на ваш діск а потім го заладуйте гев.",
index 508824b..a147029 100644 (file)
@@ -65,9 +65,9 @@
        "tog-prefershttps": "प्रेवेशानन्तरं सर्वदा संरक्षितसम्पर्कः एव उपयुज्याम्",
        "underline-always": "सर्वदा",
        "underline-never": "कदापि न",
-       "underline-default": "पà¥\82रà¥\8dवनिरà¥\8dधारिता त्वचा आवृत्तिः वा",
+       "underline-default": "यदभावà¥\87 त्वचा आवृत्तिः वा",
        "editfont-style": "सम्पादन-क्षेत्रस्य अक्षरशैली:",
-       "editfont-default": "à¤\97वà¥\87à¤\95à¥\8dषणसà¥\8dय à¤®à¥\82लविनà¥\8dयासाधारेण (Browser default)",
+       "editfont-default": "à¤\97वà¥\87à¤\95à¥\8dषणसà¥\8dय à¤¯à¤¦à¤­à¤¾à¤µà¥\87 à¤\86धारेण (Browser default)",
        "editfont-monospace": "एकावकाशयुक्तं वर्णम्",
        "editfont-sansserif": "कोणविहीनं वर्णम्",
        "editfont-serif": "कोणयुक्तं वर्णम्",
        "newpage": "नवीनपृष्ठम्",
        "talkpage": "अस्य पृष्ठस्य विषये चर्चा क्रियताम्",
        "talkpagelinktext": "सम्भाषणम्",
-       "specialpage": "विशà¥\87षपृष्ठम्",
+       "specialpage": "विशिषà¥\8dà¤\9fपृष्ठम्",
        "personaltools": "वैयक्तिकोपकरणानि",
        "articlepage": "लेखः दृश्यताम्",
        "talk": "सम्भाषणम्",
        "viewsourcetext": "भवान्/भवती एतस्य पृष्ठस्य स्रोतः द्रष्टुं, मुद्रणं (print) कर्तुं च अर्हति ।",
        "viewyourtext": "भवान्/भवती एतस्मिन् पृष्ठे '''स्वस्य सम्पादनानि'' द्रष्टुं  अर्हति, तेषां प्रतिलिपिम् (copy) अपि कर्तुं अर्हति ।",
        "protectedinterface": "एतत् पृष्ठं तन्त्रांशाय मध्यस्थपाठं (interface text) प्रयच्छति । इदञ्च पृष्ठम् अयोग्यसम्पादनात् संरक्षितमस्ति ।  \nविकि इत्यस्य सर्वेषु बन्धुप्रकल्पेषु अनुवादमिदं योजयितुं कृपया [//translatewiki.net/ translatewiki.net] इत्यस्य मिडीयाविकि-स्थानीयकरणस्य उपयोगं करोतु ।",
-       "editinginterface": "<strong>पूर्वसूचना :</strong> तन्त्रांशाय मध्यस्थपाठं (interface text) प्रयच्छति तादृशस्य पृष्ठस्य भवता/भवत्या सम्पादनं क्रियमाणमस्ति । अस्य विकि-प्रकल्पस्य अन्ययोजकेभ्यः अपि अत्र कृतानि परिवर्तनानि भविष्यन्ति ।",
+       "editinginterface": "<strong>पूर्वसूचना :</strong> तन्त्रांशाय मध्यस्थपाठं (interface text) प्रयच्छति, तादृशस्य पृष्ठस्य भवता/भवत्या सम्पादनं क्रियमाणमस्ति । अत्र कृतानि परिवर्तनानि अस्य विकि-प्रकल्पस्य अन्ययोजकेभ्यः अपि कार्यान्वितानि भविष्यन्ति ।",
        "translateinterface": "विकि इत्यस्य सर्वेषु बन्धुप्रकल्पेषु अनुवादमिदं योजयितुं कृपया [//translatewiki.net/ translatewiki.net] इत्यस्य मिडीयाविकि-स्थानीयकरणस्य उपयोगं करोतु ।",
        "cascadeprotected": "इदं पृष्ठं सम्पादनात् संरक्षितमस्ति । कारणम् एतत् पृष्ठं {{PLURAL:$1|तादृशे पृष्ठे|तादृशेषु पृष्ठेषु}} अन्तर्भवति, यादृशेषु पृष्ठेषु सोपानवत् सुरक्षा अस्ति : $2",
        "namespaceprotected": "भवान्/भवती '''$1''' नामाकाशे अन्तर्भूतेषु पृष्ठेषु परिवर्तनं कर्तुं न शक्नोति ।",
        "defaultmessagetext": "मूलसन्देशः",
        "content-failed-to-parse": "$1 कृते $2 इत्यस्य विभाजनं विफलम् अभवत् । दोषः : $3",
        "invalid-content-data": "अयोग्यः लेखः",
-       "content-not-allowed-here": "[[$2]] à¤ªà¥\83षà¥\8dठà¥\87 \"$1\" à¤¸à¤¾à¤®à¤\97à¥\8dरà¥\80 स्थापितुम् अनुमतिः नास्ति",
+       "content-not-allowed-here": "[[$2]] à¤ªà¥\83षà¥\8dठà¥\87 \"$1\" à¤\85नà¥\8dतरà¥\8dविषयà¤\83 स्थापितुम् अनुमतिः नास्ति",
        "editwarning-warning": "एतत् पृष्ठं त्यक्त्वा यदि गमिष्यति, तर्हि भवता/भवत्या कृतस्य सम्पादनस्य रक्षणं न भविष्यति ।\n\nभवता/भवत्या यदि प्रवेशः प्राप्तः अस्ति, तर्हि एषा सूचना अत्र \"{{int:prefs-editing}}\" निगूहितुं शक्यते ।",
        "editpage-notsupportedcontentformat-title": "लेखस्य प्रारूपम् अयोग्यम्",
-       "editpage-notsupportedcontentformat-text": "लà¥\87à¤\96सà¥\8dय à¤¸à¤¾à¤®à¤\97à¥\8dरà¥\8dयाà¤\83 $1 à¤\87ति à¤ªà¥\8dरारà¥\82पà¤\82 $2 à¤¸à¤¾à¤®à¤\97à¥\8dरà¥\80-à¤\89दाहरणानुगुणं नास्ति ।",
+       "editpage-notsupportedcontentformat-text": "लà¥\87à¤\96सà¥\8dय à¤\85नà¥\8dतरà¥\8dविषयसà¥\8dय $1 à¤\87ति à¤ªà¥\8dरारà¥\82पà¤\82 $2 à¤\85नà¥\8dतरà¥\8dविषयà¥\8bदाहरणानुगुणं नास्ति ।",
        "content-model-wikitext": "विकिपाठः",
        "content-model-text": "शुद्धपाठः",
        "content-model-javascript": "जावालिपिः",
        "revdelete-unsuppress": "पुनस्स्थापितसंस्करणानां प्रतिबन्धः अपाक्रियताम्",
        "revdelete-log": "कारणम् :",
        "revdelete-submit": "{{PLURAL:$1|चित-संस्करणे|चित-संस्करणेषु}} प्रयोगं क्रियताम्",
-       "revdelete-success": "<strong>संस्करणस्य दृश्यता साफल्येन अद्यतनकृता </strong>",
-       "revdelete-failure": "<strong>संस्करणस्य दृश्यता अद्यतना नाभवत् </strong> $1",
-       "logdelete-success": "<strong>संरक्षिताऽऽवल्याः दृश्यता योग्यतया परिवर्तिता ।</strong>",
-       "logdelete-failure": "<strong>संरक्षिताऽऽवल्याः दृश्यता न परिवर्तिता ।</strong> $1",
+       "revdelete-success": "संस्करणस्य दृश्यता साफल्येन अद्यतनकृता",
+       "revdelete-failure": "संस्करणस्य दृश्यता अद्यतना नाभवत्  $1",
+       "logdelete-success": "संरक्षिताऽऽवल्याः दृश्यता योग्यतया परिवर्तिता ।",
+       "logdelete-failure": "संरक्षिताऽऽवल्याः दृश्यता न परिवर्तिता । $1",
        "revdel-restore": "दृश्यताम्/गोप्यताम्",
        "pagehist": "पृष्ठस्य इतिहासः",
        "deletedhist": "अपाकृतः इतिहासः",
        "allowemail": "अन्ययोजकैः प्रेषितेभ्यः ई-पत्रेभ्यः अनुमतिं ददातु",
        "prefs-searchoptions": "अन्विष्यताम्",
        "prefs-namespaces": "नामाकाशाः",
-       "default": "पà¥\82रà¥\8dवनिरà¥\8dदिषà¥\8dà¤\9fमà¥\8d",
+       "default": "यदभावà¥\87",
        "prefs-files": "सञ्चिकाः",
        "prefs-custom-css": "स्वानुकूलसम्पादितं CSS",
        "prefs-custom-js": "स्वानुकूलसम्पादितं JavaScript",
        "recentchangeslinked-feed": "पृष्ठ-सम्बन्धितानि परिवर्तनानि",
        "recentchangeslinked-toolbox": "पृष्ठसम्बद्धानि परिवर्तनानि",
        "recentchangeslinked-title": "\"$1\" इत्यस्मिन् जातानि परिवर्तनानि",
-       "recentchangeslinked-summary": "विशेषपृष्ठेषु वर्गान्तर्गतपृष्ठेषु वा सद्यो जातानां परिवर्तनानाम् एषा आवलिः ।\n\n[[Special:Watchlist|भवतः/भवत्याः अवेक्षणावल्यां]] विद्यमानानि पृष्ठानि अत्र '''स्थूलाक्षरैः''' दर्शितानि।",
+       "recentchangeslinked-summary": "विशà¥\87षपà¥\83षà¥\8dठà¥\87षà¥\81 à¤µà¤°à¥\8dà¤\97ानà¥\8dतरà¥\8dà¤\97तपà¥\83षà¥\8dठà¥\87षà¥\81 à¤µà¤¾ à¤¸à¤¦à¥\8dयà¥\8b à¤\9cातानाà¤\82 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनानामà¥\8d à¤\8fषा à¤\86वलिà¤\83 à¥¤\n\n[[Special:Watchlist|भवतà¤\83/भवतà¥\8dयाà¤\83 à¤\85वà¥\87à¤\95à¥\8dषणाऽऽवलà¥\8dयाà¤\82]] à¤µà¤¿à¤¦à¥\8dयमानानि à¤ªà¥\83षà¥\8dठानि à¤\85तà¥\8dर '''सà¥\8dथà¥\82लाà¤\95à¥\8dषरà¥\88à¤\83''' à¤¦à¤°à¥\8dशितानि।",
        "recentchangeslinked-page": "पृष्ठनाम:",
        "recentchangeslinked-to": "अस्मिन् स्थाने अस्य पृष्ठस्य सम्बद्धानां पृष्ठानां परिवर्तनानि दर्श्यन्ताम्",
        "upload": "सञ्चिका आरोप्यताम्",
        "querypage-disabled": "समाचरणकारणेन एतद्विशेषपुटं निष्क्रियम् ।",
        "booksources": "ग्रन्थस्रोतः",
        "booksources-search-legend": "ग्रन्थस्रोतः अन्विष्यताम्",
+       "booksources-search": "अन्विष्यताम्",
        "booksources-text": "अधस्था आवली नूतनप्राचीनपुस्तकानां विक्रयकेन्द्रस्य अनुबन्धान् सूचयति । यत्र ते  आवश्यकाः अन्यविषयाः अपि उपलभ्याः ।",
        "booksources-invalid-isbn": "दत्तं ISBN मान्यम् इति  न भाति । मूलस्रोततः प्रतिकृतीः कर्तुं परिशीलयतु ।",
        "specialloguserlabel": "आचारी :",
        "import-interwiki-history": "एतत्पुटार्थं सर्वेतिहासान् पुनरावृत्तीः च प्रकृतीः करोतु ।",
        "import-interwiki-templates": "प्राकृतीः अनर्भावयतु ।",
        "import-interwiki-submit": "आयातं करोतु ।",
-       "import-interwiki-namespace": "लक्षितनामस्थानानि ।",
-       "import-interwiki-rootpage": "लक्षितमूलपुटम् । (ऐच्छिकम्)",
        "import-upload-filename": "सञ्चिकानाम",
        "import-comment": "टिप्पणी:",
        "importtext": "[[Special:Export|export utility]] एतेनानुबन्धेन स्रोतविकितः सञ्चिकानां निर्यातं करोतु । भवदीयसङ्गणके सुरक्ष्य अत्र उत्तारयतु ।",
        "tooltip-ca-delete": "इदं पृष्ठम् अपाक्रियताम्",
        "tooltip-ca-undelete": "अस्य पुटस्य अपमर्जनात् पूर्वम् अस्य सम्पादनानि पुनस्थापयतु ।",
        "tooltip-ca-move": "अस्य पृष्ठस्य शीर्षकं परिवर्त्यताम्",
-       "tooltip-ca-watch": "इदं पृष्ठं भवतः/भवत्याः अवेक्षणावल्यां योज्यताम्",
+       "tooltip-ca-watch": "à¤\87दà¤\82 à¤ªà¥\83षà¥\8dठà¤\82 à¤­à¤µà¤¤à¤\83/भवतà¥\8dयाà¤\83 à¤\85वà¥\87à¤\95à¥\8dषणाऽऽवलà¥\8dयाà¤\82 à¤¯à¥\8bà¤\9cà¥\8dयतामà¥\8d",
        "tooltip-ca-unwatch": "भवतः/भवत्याः अवेक्षणसूच्याः इदं पृष्ठं निष्कास्यताम्",
        "tooltip-search": "{{SITENAME}} अन्विष्यताम्",
        "tooltip-search-go": "समानशिरोनामयुक्तं पृष्ठं विद्यते चेत् तत्र गम्यताम्",
        "tooltip-preview": "भवता/भवत्या कृतानां परिवर्तनानां प्राग्दृश्यं दृश्यताम्, रक्षणात्पूर्वं कृपया इदम् उपयुज्यताम्।",
        "tooltip-diff": "भवता/भवत्या कृतानि परिवर्तनानि अत्र द्रष्टुं शक्यते",
        "tooltip-compareselectedversions": "पृष्ठस्य द्वयोः चितयोः आवृत्त्योः भेदः दृश्यताम्",
-       "tooltip-watch": "इदं पृष्ठं भवतः/भवत्याः अवेक्षणावल्यां योज्यताम्",
+       "tooltip-watch": "à¤\87दà¤\82 à¤ªà¥\83षà¥\8dठà¤\82 à¤­à¤µà¤¤à¤\83/भवतà¥\8dयाà¤\83 à¤\85वà¥\87à¤\95à¥\8dषणाऽऽवलà¥\8dयाà¤\82 à¤¯à¥\8bà¤\9cà¥\8dयतामà¥\8d",
        "tooltip-watchlistedit-normal-submit": "शीर्षकानि अपनयतु ।",
        "tooltip-watchlistedit-raw-submit": "अवलोकनावलीं समुद्धरतु ।",
        "tooltip-recreate": "एतत्पुटं पूर्वमेव अपमर्जितः अतः पुन सृजतु ।",
        "pageinfo-header-restrictions": "पृष्ठसंरक्षणम्",
        "pageinfo-header-properties": "पृष्ठस्य गुणधर्मः",
        "pageinfo-display-title": "शीर्षकं दर्श्यताम्",
-       "pageinfo-default-sort": "सà¤\82विभाà¤\97à¤\95à¥\80लà¤\95à¤\82 à¤ªà¥\82रà¥\8dवनिरà¥\8dदिषà¥\8dà¤\9fà¤\82 क्रियताम्",
+       "pageinfo-default-sort": "सà¤\82विभाà¤\97à¤\95à¥\80लà¤\95à¤\82 à¤¯à¤¦à¤­à¤¾à¤µà¥\87 क्रियताम्",
        "pageinfo-length": "पृष्ठदैर्घ्यम् (बैट्स्द्वारा)",
        "pageinfo-article-id": "पृष्ठाभिज्ञापकम्",
        "pageinfo-language": "पृष्ठसामग्र्याः भाषा",
        "metadata-help": "अनेन सह विस्तृतसूचना सल्लग्ना अस्ति, प्रतिबिम्बग्राहकेन (scanner) अङ्कीयछायाचित्रग्राहकेन (digital camera ) वा अस्याः सञ्चिकायाः रचना जाता स्यात् । \n\nएषा सञ्चिका यदि मूलावस्थात् परिवर्त्यते, तर्हि अत्रस्थानि कानिचित् विवरणानि परिवर्तितसञ्चिकायां पूर्णतया न दृश्यन्ते ।",
        "metadata-expand": "विस्तारितानि विवरणानि दर्शयतु",
        "metadata-collapse": "विस्तारितानि विवरणानि लोपयतु",
-       "metadata-fields": "पà¥\8dरदतà¥\8dताà¤\82शसà¥\8dय (metadata) à¤¸à¥\8dवरà¥\82पà¤\82 à¤¯à¤¦à¤¾ à¤²à¤\98à¥\81 à¤­à¤µà¤¿à¤·à¥\8dयति, à¤¤à¤¦à¤¾ à¤\8fतसà¥\8dमिनà¥\8d à¤¸à¤¨à¥\8dदà¥\87शà¥\87 à¤\86वलिà¤\95à¥\83तसà¥\8dय EXIA à¤ªà¥\8dरदतà¥\8dताà¤\82शसà¥\8dय (metadata) à¤¸à¥\82à¤\9aनाà¤\83 à¤\9aितà¥\8dरपà¥\8dरदरà¥\8dशनà¥\87न à¤¸à¤¹ à¤¦à¥\8dरषà¥\8dà¤\9fà¥\81à¤\82 à¤¶à¤\95à¥\8dयनà¥\8dतà¥\87 à¥¤\nपà¥\82रà¥\8dवनिरà¥\8dदिषà¥\8dà¤\9fरà¥\82पà¥\87ण (default) अन्याः सूचनाः निगूढाः भविष्यन्ति । \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",
+       "metadata-fields": "पà¥\8dरदतà¥\8dताà¤\82शसà¥\8dय (metadata) à¤¸à¥\8dवरà¥\82पà¤\82 à¤¯à¤¦à¤¾ à¤²à¤\98à¥\81 à¤­à¤µà¤¿à¤·à¥\8dयति, à¤¤à¤¦à¤¾ à¤\8fतसà¥\8dमिनà¥\8d à¤¸à¤¨à¥\8dदà¥\87शà¥\87 à¤\86वलिà¤\95à¥\83तसà¥\8dय EXIA à¤ªà¥\8dरदतà¥\8dताà¤\82शसà¥\8dय (metadata) à¤¸à¥\82à¤\9aनाà¤\83 à¤\9aितà¥\8dरपà¥\8dरदरà¥\8dशनà¥\87न à¤¸à¤¹ à¤¦à¥\8dरषà¥\8dà¤\9fà¥\81à¤\82 à¤¶à¤\95à¥\8dयनà¥\8dतà¥\87 à¥¤\nयदभावà¥\87 अन्याः सूचनाः निगूढाः भविष्यन्ति । \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-imagelength": "औन्नत्यम्",
        "exif-bitspersample": "प्रत्येकं भागस्य अंशः ।",
        "tags": "तर्कसिद्धानि परिवर्तनाङ्कनानि",
        "tag-filter": "[[Special:Tags|Tag]] शोधनी:",
        "tag-filter-submit": "शोधनी",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|अङ्कनम्|अङ्कनानि}}]]: $2)",
        "tags-title": "अङ्कनानि",
        "tags-intro": "एतत्पुटं सार्थसूत्राणि दर्शयति यस्य कोऽपि तन्त्रांशः यत्किमपि सम्पादनम् अङ्कयितुं प्रयोजयति ।",
        "tags-tag": "अङ्कननाम",
        "revdelete-uname-unhid": "योजकस्य नाम न लोपितम्",
        "revdelete-restricted": "प्रबन्धकानां प्रतिबन्धनानि आरोपितानि",
        "revdelete-unrestricted": "प्रबन्धकानां प्रतिबन्धनानि निष्कासितानि",
-       "logentry-move-move": "$1 इति प्रयोक्त्रा $3 इत्येतत् $4 इत्येतत् प्रति चालितम्",
+       "logentry-move-move": "$1 {{GENDER:$2|moved}} $3 पुटं $4 प्रति चालितम्",
        "logentry-move-move-noredirect": "$1 इति प्रयोक्त्रा $3 इति पृष्ठम् $4 इत्येतत् प्रति चालितं, अनुप्रेषणेन विना",
        "logentry-move-move_redir": "↓\n$1 इत्यनेन $3 इति पृष्ठम् $4 इत्येतत् प्रति चालितं, अनुप्रेषणम् अतिक्रम्य",
        "logentry-move-move_redir-noredirect": "$1 इति प्रयोक्त्रा $3 इति पृष्ठं $4 इत्येतत् प्रति चालितम्, अनुप्रेषणम् अतिक्रम्य, अनुप्रेषणमोचनेन च विना।",
        "logentry-rights-rights": "$1 इत्ययं $3 इत्यस्य समूहसदस्यतां $4 इत्यतः परिवर्त्य $5 इत्यकरोत्",
        "logentry-rights-rights-legacy": "$1, $3 इत्यस्मै समूहसदस्यतां पर्यवर्तयत्",
        "logentry-rights-autopromote": "$1 इत्ययं स्वचालितरूपेण $4 इत्यतः $5 इति यावत् पदोन्नतः",
+       "logentry-upload-upload": "$1 {{GENDER:$2|निवेशितम्}} $3",
        "rightsnone": "(कतम)",
        "revdelete-summary": "सम्पादनसांक्षेपिक",
        "feedback-adding": "पृष्ठे प्रतिस्पन्दः योजनीयः ...",
index 9b286de..86f7d25 100644 (file)
        "import-interwiki-history": "Сирэй туох баар историятын көһөрөргө",
        "import-interwiki-templates": "Бары халыыптары киллэр",
        "import-interwiki-submit": "Импортаа",
-       "import-interwiki-namespace": "Бу аат далыгар көһөрөргө:",
-       "import-interwiki-rootpage": "Тирэх сирэйэ (булгуччута суох)",
        "import-upload-filename": "Билэ аата:",
        "import-comment": "Хос быһаарыы:",
        "importtext": "Сирэйи [[Special:Export|экспорт үнүстүрүмүөнүн]] көмөтүнэн бастакы биикиттэн экспортаа. \nБилэни бастаан бэйэҥ көмпүүтэргэр суруй, онтон манна көһөр.",
index 4eb5167..ee65cc4 100644 (file)
        "import-interwiki-sourcewiki": "Wiki de orìgine:",
        "import-interwiki-sourcepage": "Pàgina de orìgine:",
        "import-interwiki-submit": "Importa",
-       "import-interwiki-namespace": "Nùmene-logu de destinatzione:",
        "import-upload-filename": "Nùmene file:",
        "import-comment": "Cummentu:",
        "importstart": "Importande is pàginas...",
        "expand_templates_preview": "Antiprima",
        "pagelang-name": "Pàgina",
        "pagelang-language": "Limba",
-       "pagelang-select-lang": "Sèbera limba"
+       "pagelang-select-lang": "Sèbera limba",
+       "special-characters-group-latin": "Latinu",
+       "special-characters-group-latinextended": "Latinu disterradu",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Sìmbulos",
+       "special-characters-group-greek": "Grecu",
+       "special-characters-group-cyrillic": "Cirìllicu",
+       "special-characters-group-arabic": "Aràbicu",
+       "special-characters-group-persian": "Persianu",
+       "special-characters-group-hebrew": "Ebreu",
+       "special-characters-group-bangla": "Bengalesu",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Singalesu",
+       "special-characters-group-gujarati": "Gujarati",
+       "special-characters-group-thai": "Thai",
+       "special-characters-group-lao": "Lao",
+       "special-characters-group-khmer": "Khmer"
 }
index 39bcc39..1a6d3d2 100644 (file)
        "disclaimers": "Avvirtenzi",
        "disclaimerpage": "Project:Avvirtenzi ginirali",
        "edithelp": "Guida pî canciamenti",
+       "helppage-top-gethelp": "Guida",
        "mainpage": "Pàggina principali",
        "mainpage-description": "Pàggina principali",
        "policy-url": "Project:Policy",
        "readonly_lag": "La basi di dati fu' bluccata autumaticamenti nta mentri ca li server di basi di dati slave si sincrunìzzanu cu' chiddu master",
        "internalerror": "Erruri nternu",
        "internalerror_info": "Erruri nternu: $1",
+       "internalerror-fatal-exception": "Eccizzioni fatali di tipu \"$1\"",
        "filecopyerror": "Nun fu' pussìbbili cupiari lu file \"$1\" nta \"$2\".",
        "filerenameerror": "Nun fu' pussìbbili canciari lu nomu dû file di \"$1\" a' \"$2\".",
        "filedeleteerror": "Nun fu pussìbbili cancillari lu file \"$1\".",
        "no-null-revision": "Non fu' pussibbili criari na virsioni nulla pâ paggina \"$1\"",
        "badtitle": "Tìtulu nun bonu",
        "badtitletext": "Lu tìtulu di pàggina addumannatu nun era vàlidu, era vacanti, o vinìa dûn culligamentu intir-linguìsticu o intir-wiki malu fattu.\nPutissi cuntèniri unu o cchiu' ssai caràttiri chi' nun su' cunsintuti ntê tìtula.",
+       "title-invalid-empty": "Lu tìtulu addumannatu pâ pàggina è vacanti o puru cunteni sulu lu nomu dûn namespace.",
+       "title-invalid-utf8": "Lu tìtulu addumannatu pâ pàggina cunteni na siguenza UTF-8 nun vàlida.",
+       "title-invalid-interwiki": "Lu tìtulu cunteni nu culligamentu interwiki",
+       "title-invalid-talk-namespace": "Lu tìtulu addumannatu pâ pàggina si rifirisci a na pàggina di discussioni ca nun esisti.",
+       "title-invalid-characters": "Lu tìtulu addumannatu pâ pàggina cunteni caràttiri nun vàlidi: \"$1\".",
+       "title-invalid-relative": "Lu tìtulu havi un caminu rilativu. Li tìtuli di pàggina rilativi (./, ../) nun sunnu boni, picchì spissu nun si ponnu arruvari pi' menzu dî browser di l'utenti.",
+       "title-invalid-magic-tilde": "Lu tìtulu addumannatu pâ pàggina cunteni na siguenza maggica di tildi nun vàlida(<nowiki>~~~</nowiki>).",
+       "title-invalid-too-long": "Lu tìtulu addumannatu pâ pàggina è troppu longu. Nun havi a' èssiri cchiu' longu di $1 byte sutta cudìfica UTF-8.",
+       "title-invalid-leading-colon": "Lu tìtulu addumannatu pâ pàggina cunteni nu signu di du punti ô principiu, chi' nun è vàlidu.",
        "perfcached": "Li dati ca sèquinu sunnu stratti di na ''cache'' e putissiru nun èssiri aggiurnati. Ntâ ''cache'' {{PLURAL:$1|capi un risultatu|càpunu $1 risultati}} massimu.",
        "perfcachedts": "Li dati ca sèquinu sunnu stratti di na ''cache'', e furu aggiurnati l'ultima vota ô $1. Ntâ ''cache'' {{PLURAL:$4|capi un risultatu|capunu $4 risultati}} massimu.",
        "querypage-no-updates": "L'aggiurnamenti dâ pàggina sunnu timpuraniamenti suspisi. Li dati 'n chidda cuntinuti nun vèninu aggiurnati.",
        "wrongpassword": "La password chi' mittisti nun è giusta.\nPi' favuri prova n'àutra vota.",
        "wrongpasswordempty": "La password chi' mittisti era vacanti.\nPi' favuri prova n'àutra vota.",
        "passwordtooshort": "I password hannu a' èssiri longhi almenu {{PLURAL:$1|1 caràttiri|$1 caràttiri}}.",
+       "passwordtoolong": "Li password non pònnu èssiri cchiu' longhi di {{PLURAL:$1|1 caràttiri|$1 caràttiri}}.",
        "password-name-match": "La tò password havi a' èssiri diversa dû tò nomu utenti.",
        "password-login-forbidden": "L'usu di stu nomu utenti e password fu' pruibbitu.",
        "mailmypassword": "Azzera la password",
        "missingcommentheader": "<strong>Accura:</strong> Nun havi statu spicificatu l'oggettu/ntistazzioni di stu cummentu. Primennu di novu \"{{int:savearticle}}\", lu canciamentu veni sarvatu senza avìrinni.",
        "summary-preview": "Antiprima dû riassuntu:",
        "subject-preview": "Antiprima di l'oggettu/ntistazzioni:",
+       "previewerrortext": "Mmattìu n'erruri nta l'ammustrari li to canciamenti.",
        "blockedtitle": "L'utenti è bluccatu",
        "blockedtext": "'''Stu nomu d'utenti o nnirizzu IP havi statu bluccatu.'''\n\nLu bloccu fu fattu di $1. Lu mutivu dû bloccu è: ''$2''.\n\n* Accuminzata dû bloccu: $8\n* Fini dû bloccu: $6\n* Ntirvallu dû bloccu: $7\n\nPoi cuntattari a $1 o a n'àutru [[{{MediaWiki:Grouppage-sysop}}|amministraturi]] pi discùtiri dû bloccu.\n\nNun poi usari la carattirìstica 'manna n'email a st'utenti' siddu nun è spicificatu nu nnirizzu email vàlidu nta li toi [[Special:Preferences|prifirenzi]] e siddu nun hai statu bluccatu di l'usari.\n\nLu tò nnirizzu IP attuali è $3, e lu nùmmiru ID dû bloccu è #$5.\n\nSpicìfica tutti li dittagghi pricidenti nta quarsiasi addumannata di chiarimenti.",
        "autoblockedtext": "Lu tò nnirizzu IP hà statu bluccatu automaticamenti pirchì fu usatu di n'àutru utenti, chi fu bluccatu di $1.\nLu mutivu è chistu:\n\n:''$2''\n\n* Accuminzata dû bloccu: $8\n* Fini dû bloccu: $6\n* Ntirvallu dû bloccu: $7\n\nPoi cuntattari a $1 o a n'àutru [[{{MediaWiki:Grouppage-sysop}}|amministraturi]] pi discùtiri dû bloccu.\n\nNun poi usari la carattirìstica 'manna n'email a st'utenti' siddu nun è spicificatu nu nnirizzu email vàlidu ntra li tòi [[Special:Preferences|prifirenzi]] e siddu nun fusti bluccatu di l'usari.\n\nLu tò nnirizzu IP attuali è $3, e l'ID dû bloccu è $5.\nPi favuri nclùdilu nta tutti li dumanni chi fai.",
        "history-feed-description": "Crunuluggìa dî canciamenti a' sta pàggina nta sta wiki",
        "history-feed-item-nocomment": "$1 lu $2",
        "history-feed-empty": "La pàggina chi' dumannasti nun esisti.\nPo' aviri statu cancillata dâ wiki, o puru canciata di nomu.\nProva a' [[Special:Search|circari ntâ wiki]] siddu cci sunnu pàggini novi chi' ti ponnu ntirissari.",
+       "history-edit-tags": "Cancia l'etichetti dî virsioni scigghiuti",
        "rev-deleted-comment": "(riassuntu dû canciamentu rimossu)",
        "rev-deleted-user": "(nomu utenti rimossu)",
        "rev-deleted-event": "(dittagghî dû riggistru rimossi)",
        "rev-showdeleted": "ammustra",
        "revisiondelete": "Cancella o annulla la cancillazzioni di virsioni",
        "revdelete-nooldid-title": "Virsioni oggettu nun vàlida",
-       "revdelete-nooldid-text": "O nun spicificasti la virsioni chi' havi a' èssiri oggettu di sta funzioni, o a virsioni chi' spicificasti nun esisti, o puru stai pruvannu a' ammucciari a virsioni currenti.",
+       "revdelete-nooldid-text": "O nun spicificasti nudda virsioni comu oggettu di sta funzioni, o la virsioni chi' spicificasti nun esisti, o puru stai pruvannu a' ammucciari la virsioni currenti.",
        "revdelete-no-file": "Lu file spicificatu nun esisti.",
        "revdelete-show-file-confirm": "Si' sicuru chi' voi talìari na virsioni cancillata dû file \"<nowiki>$1</nowiki>\" dû $2 ê $3?",
        "revdelete-show-file-submit": "Sì",
        "revdelete-unsuppress": "Elìmina le limitazzioni su li rivisioni ripristinati",
        "revdelete-log": "Mutivu:",
        "revdelete-submit": "Àpplica {{PLURAL:$1|â virsioni scigghiuta|ê virsioni scigghiuti}}",
-       "revdelete-success": "<strong>Visibbilitati dâ virsioni mpustata currittamenti.</strong>",
-       "revdelete-failure": "<strong>A visibbilitati dâ virsioni nun potti èssiri mpustata:</strong>\n$1",
-       "logdelete-success": "<strong>Visibbilitati di l'eventu mpustata currittamenti.</strong>",
+       "revdelete-success": "Visibbilitati dâ virsioni mpustata currittamenti.",
+       "revdelete-failure": "A visibbilitati dâ virsioni nun potti èssiri mpustata:\n$1",
+       "logdelete-success": "Visibbilitati di l'eventu mpustata currittamenti.",
        "logdelete-failure": "'''La visibilità dû eventu nun po essiri impustata:'''\n$1",
        "revdel-restore": "cancia la visibbilità",
        "pagehist": "Crunuluggìa dâ pàggina",
        "notextmatches": "Nudda currispunnenza ntô testu dî pàggini",
        "prevn": "li pricidenti {{PLURAL:$1|$1}}",
        "nextn": "li pròssimi {{PLURAL:$1|$1}}",
+       "prev-page": "pàggina arreti",
+       "next-page": "pàggina appressu",
        "prevn-title": "{{PLURAL:$1|Risultatu pricidenti|$1 risultati pricedenti}}",
        "nextn-title": "{{PLURAL:$1|Risultatu successivu|$1 risultata successivi}}",
        "shown-title": "Ammustra {{PLURAL:$1|nu risultatu|$1 risultati}} pi pàggina",
        "prefs-personal": "Prufilu di l'utenti",
        "prefs-rc": "Ùrtimi canciamenti",
        "prefs-watchlist": "Lista taliata",
+       "prefs-editwatchlist": "Cancia la lista taliata",
+       "prefs-editwatchlist-label": "Cancia li vuci dâ to lista taliata:",
+       "prefs-editwatchlist-edit": "Talìa e leva tìtuli dâ to lista taliata",
+       "prefs-editwatchlist-raw": "Cancia la lista taliata comu testu",
+       "prefs-editwatchlist-clear": "Svacanta la to lista taliata",
        "prefs-watchlist-days": "Nùmmiru di jorna a' ammustrari ntâ lista taliata:",
        "prefs-watchlist-days-max": "Màssimu $1 {{PLURAL:$1|jornu|jorna}}",
        "prefs-watchlist-edits": "Nùmmiru di canciamenti a' ammustrari ntâ lista taliata estinnuta:",
        "emailccsubject": "Copia dû missaggiu ca mannasti a' $1: $2",
        "emailsent": "Missaggiu di posta elittrònica mannatu",
        "emailsenttext": "Lu to missaggiu di posta elittrònica fu' mannatu.",
-       "emailuserfooter": "Stu missaggiu fu' mannatu di $1 a' $2 attraversu dâ funzioni \"Manna nu missàggiu di posta elittrònica a' l'utenti\" supra a' {{SITENAME}}.",
+       "emailuserfooter": "Stu missaggiu fu' mannatu di $1 a' $2 pi' menzu dâ funzioni \"{{int:emailpage}}\" supra a' {{SITENAME}}.",
        "usermessage-summary": "Lassatu nu missaggiu di sistema.",
        "usermessage-editor": "Missaggeri di sistema",
        "watchlist": "Lista taliata",
        "import-interwiki-history": "Copia la ntera cronoluggìa di sta pàggina",
        "import-interwiki-templates": "Includi tutti li template",
        "import-interwiki-submit": "Mporta",
-       "import-interwiki-namespace": "Trasfirisci li pàggini ntô namespace:",
-       "import-interwiki-rootpage": "Pàggina ràdica di distinazzioni (facultativu):",
        "import-upload-filename": "Nomu file:",
        "import-comment": "Oggettu:",
        "importtext": "Pi favuri, esporta lu file dâ wiki surgenti adupirannu [[Special:Export|a funziunalità d'espurtazzioni]].\nSàrvalu supra a' lu tò computer e carrìcalu ccà.",
        "lag-warn-high": "A càusa di nu ritardu eccissivu nta l'aggiurnamentu dô server di databbasi, li canciamenti appurtati {{PLURAL:$1|nta l'ùrtimu secundu|nta l'ùrtimi $1 secundi}} ponnu nun èssiri nta sta lista.",
        "watchlistedit-normal-title": "Cancia pàggini taliati",
        "watchlistedit-normal-legend": "Eliminazzioni di pàggini dâ lista dê pàggini taliati",
-       "watchlistedit-normal-explain": "Ccassutta cci su' li tìtuli ntâ to lista taliata.\nPi' livàrinni unu, scegghî la casedda a' latu d'iddu, e clicca \"{{int:Watchlistedit-normal-submit}}\".\nPoi puru [[Special:EditWatchlist/raw|canciari la lista 'n forma testuali]].",
+       "watchlistedit-normal-explain": "Ccassutta cci sunnu li tìtuli dâ to lista taliata.\nPi' livàrinni unu, scegghî la casedda a' latu d'iddu, e clicca \"{{int:Watchlistedit-normal-submit}}\".\nPoi puru [[Special:EditWatchlist/raw|canciari la lista sutta forma di testu]].",
        "watchlistedit-normal-submit": "Elìmina pàggini",
        "watchlistedit-normal-done": "Dâ lista dê pàggini taliati hà{{PLURAL:$1|&nbsp;stata eliminata na pàggina|nnu stati eliminati $1 pàggini}}:",
-       "watchlistedit-raw-title": "Cancia li pàggini taliati 'n forma testuali",
-       "watchlistedit-raw-legend": "Canciamentu testuali pàggini taliati",
+       "watchlistedit-raw-title": "Canciamentu dâ lista taliata sutta forma di testu",
+       "watchlistedit-raw-legend": "Canciamentu dâ lista taliata sutta forma di testu",
        "watchlistedit-raw-explain": "Ccassutta cci su' li tìtuli ntâ to lista taliata, chi' si po' canciari agghiuncennu e livannu tituli, unu pi' riga.\nQuannu hai finutu, clicca \"{{int:Watchlistedit-raw-submit}}\".\nPoi puru [[Special:EditWatchlist|canciari a lista dâ pàggina tradizziunali]].",
        "watchlistedit-raw-titles": "Pàggini:",
-       "watchlistedit-raw-submit": "Aggiorna la lista",
+       "watchlistedit-raw-submit": "Aggiorna la lista taliata",
        "watchlistedit-raw-done": "La tò lista dê pàggini taliati vinni aggiurnata.",
        "watchlistedit-raw-added": "{{PLURAL:$1|Fu junciuta na pàggina|Foru junciuti $1 pàggini}}:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|&nbsp;Vinni scancillata na pàggina|Foru scancillati $1 pàggini}}:",
        "watchlistedit-too-many": "Cci su' troppu pàggini p'ammustràrili cca.",
        "watchlisttools-clear": "Svacanta la lista taliata",
        "watchlisttools-view": "Talìa li canciamenti rilivanti",
-       "watchlisttools-edit": "Talìa e cancia la lista",
-       "watchlisttools-raw": "Cancia la lista 'n forma testuali",
+       "watchlisttools-edit": "Talìa e cancia la lista taliata",
+       "watchlisttools-raw": "Cancia la lista taliata sutta forma di testu",
        "iranian-calendar-m1": "Farvardin",
        "iranian-calendar-m2": "Ordibehesht",
        "iranian-calendar-m3": "Khordad",
        "log-name-pagelang": "Riggistru dî canci di lingua",
        "log-description-pagelang": "Chistu è nu riggistru dî canciamenti â lingua dî pàggini.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|canciau}} a lingua dâ pàggina $3 di $4 a' $5.",
-       "default-skin-not-found": "Whoops! La peddi pridifinuta dâ to wiki, mpustata nta <code dir=\"ltr\">$wgDefaultSkin</code> comu <code>$1</code>, nun è dispunìbbili.\n\nA' quantu pari la to installazzioni ncludi li peddi ccasutta. Talìa [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manuali: Cunfigurazzioni dî peddi] p'istruzzioni supra a' comu s'attìvunu e comu si scegghî chidda pridifinuta.\n\n$2\n\n; Si' hai installatu MediaWiki ora ora:\n: E' prubbàbbili chi' l'installasti dû git, o direttamenti dû còdici surgenti nta quarchi' autra manera. Allura sta cosa è privista. Prova e installa quarchi' peddi di [https://www.mediawiki.org/wiki/Category:All_skins l'archìviu dî peddi di mediawiki.org], a na manera di chisti:\n:* Scàrrica [https://www.mediawiki.org/wiki/Download lu prugramma d'installazzioni in furmatu tar], chi' cunteni tanti peddi ed estinsioni. Poi cupiari e ncuddari la cartella <code>skins/</code> di ddadintra.\n:* Scàrrica a' una a' una quarchi' peddi in furmatu tar di [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clona via git unu dî dipòsiti <code>mediawiki/skins/*</code> ntâ cartella <code dir=\"ltr\">skins/</code> dâ to installazzioni di MediaWiki.\n: Fari accussì' nun avissi a' ntirfirìri cû to dipòsitu git si' si' nu sviluppaturi di MediaWiki.\n\n; Si' hai aggiurnatu MediaWiki ora ora:\n: MediaWiki virsioni 1.24 e succissivi nun attìvunu cchiu' di manera autumàtica i peddi installati (talìa [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manüali: Scuperta autumatica dî peddi]). Poi cupiari e ncuddari sti righi nta <code>LocalSettings.php</code> p'attivari tutti li peddi chi' sunnu pi' com'ora installati:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Si' hai mudificatu <code>LocalSettings.php</code> ora ora:\n: Cuntrolla chi' nun sbagghiasti a' scriviri li nomi dî peddi.",
+       "default-skin-not-found": "Whoops! La peddi pridifinuta dâ to wiki, mpustata nta <code dir=\"ltr\">$wgDefaultSkin</code> comu <code>$1</code>, nun è dispunìbbili.\n\nA' quantu pari la to istallazzioni ncludi {{PLURAL:$4|la peddi|li peddi}} ccasutta. Talìa [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manuali: Cunfigurazzioni dî peddi] p'istruzzioni supra a' comu {{PLURAL:$4|s'attìva|s'attìvunu e comu si scegghî chidda pridifinuta}}.\n\n$2\n\n; Si' hai istallatu MediaWiki ora ora:\n: E' prubbàbbili chi' l'istallasti dû git, o direttamenti dû còdici surgenti nta quarchi' n'autra manera. Allura sta cosa è privista. Prova e istalla quarchi' peddi di [https://www.mediawiki.org/wiki/Category:All_skins l'archìviu dî peddi di mediawiki.org], a na manera di chisti:\n:* Scàrrica [https://www.mediawiki.org/wiki/Download lu prugramma d'istallazzioni in furmatu tar], chi' cunteni tanti peddi ed estinsioni. Poi cupiari e ncuddari la cartella <code>skins/</code> di ddadintra.\n:* Scàrrica a' una a' una quarchi' peddi in furmatu tar di [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clona via git unu dî dipòsiti <code>mediawiki/skins/*</code> ntâ cartella <code dir=\"ltr\">skins/</code> dâ to istallazzioni di MediaWiki.\n: Fari accussì' nun avissi a' ntirfirìri cû to dipòsitu git si' si' nu sviluppaturi di MediaWiki.\n\n; Si' hai aggiurnatu MediaWiki ora ora:\n: MediaWiki virsioni 1.24 e succissivi nun attìvunu cchiu' di manera autumàtica i peddi istallati (talìa [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manüali: Scuperta autumatica dî peddi]). Poi cupiari e ncuddari {{PLURAL:$5|sta riga|sti righi}} nta <code>LocalSettings.php</code> p'attivari {{PLURAL:$5|la peddi chi' pi' com'ora è istallata|tutti li peddi chi' pi' com'ora sunnu istallati}}:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Si' hai mudificatu <code>LocalSettings.php</code> ora ora:\n: Cuntrolla chi' nun sbagghiasti a' scrìviri li nomi dî peddi.",
        "default-skin-not-found-no-skins": "Whoops! La peddi pridifinuta dâ to wiki, mpustata nta <code dir=\"ltr\">$wgDefaultSkin</code> comu <code>$1</code>, nun è dispunìbbili.\n\nNun hai nudda peddi installata.\n\n; Si' hai installatu o puru aggiurnatu MediaWiki ora ora:\n: E' prubbàbbili chi' l'installasti dû git, o direttamenti dû còdici surgenti nta quarchi' autra manera. Allura sta cosa è privista. MediaWiki virsioni 1.24 e succissivi nun cuntènunu nudda peddi ntô dipòsitu principali. Prova e installa quarchi' peddi di [https://www.mediawiki.org/wiki/Category:All_skins l'archìviu dî peddi di mediawiki.org], a na manera di chisti:\n:* Scàrrica [https://www.mediawiki.org/wiki/Download u prugramma d'installazzioni in furmatu tar], chi' cunteni tanti peddi ed estinsioni. Poi cupiari e ncuddari a cartella <code>skins/</code> di ddadintra.\n:* Scàrrica a' una a' una quarchi' peddi in furmatu tar di [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clona via git unu dî dipòsiti <code>mediawiki/skins/*</code> ntâ cartella <code dir=\"ltr\">skins/</code> dâ to installazzioni di MediaWiki.\n: Fari accussì' nun avissi a' ntirfirìri cû to dipòsitu git si' si' nu sviluppaturi di MediaWiki. Talìa [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manüali: Cunfigurazzioni dî peddi] p'istruzzioni supra a' comu s'attìvunu i 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''')",
index 7fde9ab..c337c98 100644 (file)
        "revdelete-unsuppress": "Remuiv restreections oan restored reveesions",
        "revdelete-log": "Raison:",
        "revdelete-submit": "Applie til selected {{PLURAL:$1|reveesion|reveesions}}",
-       "revdelete-success": "<strong>Reveesion veesibeelitie successfully updated.</strong>",
-       "revdelete-failure": "<strong>Reveesion veesibeelitie coudna be updated:</strong>\n$1",
-       "logdelete-success": "<strong>Log veesibeelitie successfully set.</strong>",
-       "logdelete-failure": "<strong>Log veesibddlitie coudna be set:</strong>\n$1",
+       "revdelete-success": "Reveesion veesibeelitie successfully updated.",
+       "revdelete-failure": "Reveesion veesibeelitie coudna be updated:\n$1",
+       "logdelete-success": "Log veesibeelitie successfully set.",
+       "logdelete-failure": "Log veesibddlitie coudna be set:\n$1",
        "revdel-restore": "chynge veesibeelitie",
        "pagehist": "Page histerie",
        "deletedhist": "Delytit histerie",
        "import-interwiki-history": "Copie aw histerie reveesions fer this page",
        "import-interwiki-templates": "Incluid aw templates",
        "import-interwiki-submit": "Import",
-       "import-interwiki-namespace": "Desteenation namespace:",
-       "import-interwiki-rootpage": "Desteenation ruit page (aen optie):",
        "import-upload-filename": "Filename:",
        "import-comment": "Comment:",
        "importtext": "Please export the file fae the soorce wiki uising the [[Special:Export|export utilitie]].\nHain it til yer computer n uplaid it here.",
        "import-rootpage-nosubpage": "Namespace \"$1\" o the ruit page disna permit subpages.",
        "importlogpage": "The Import log",
        "importlogpagetext": "Admeenistrateeve imports o pages wi eedit histerie fae ither wikis.",
-       "import-logentry-upload": "imported [[$1]] bi file uplaid",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|reveesion|reveesions}} importit",
-       "import-logentry-interwiki": "transwikied $1",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|reveesion|reveesions}} importit fae $2",
        "javascripttest": "JavaScript testin",
        "javascripttest-pagetext-noframework": "This page is reserved fer rinnin JavaScript tests.",
        "json-error-utf8": "Malformed UTF-8 chairacters, possiblie wranglie encoded",
        "json-error-recursion": "Yin or mair recurseeve references in the value tae be encoded",
        "json-error-inf-or-nan": "Yin or mair NAN or INF values in the value tae be encoded",
-       "json-error-unsupported-type": "Ae value o ae type that canna be encoded wis gien"
+       "json-error-unsupported-type": "Ae value o ae type that canna be encoded wis gien",
+       "special-characters-group-ipa": "IPA"
 }
index 8ec5156..abe5406 100644 (file)
        "revdelete-unsuppress": "Kankamandey kaa  filla willantey ga",
        "revdelete-log": "Dalil:",
        "revdelete-submit": "Kanandi {PLURAL:$1|filla}} kanante ga",
-       "revdelete-success": "<strong>Filla diiyan alkadar taagandi ka boori.</strong>",
-       "revdelete-failure": "<strong> Filla diiyan alkdar mana hin ka taagandi:</strong>\n$1",
-       "logdelete-success": "<strong>Hantum ceebandu diiyan alkadar kayandi ka boori.</strong>",
-       "logdelete-failure": "<strong>Hantum ceebandu diiyan alkdar mana kayandi:</strong>\n$1",
+       "revdelete-success": "Filla diiyan alkadar taagandi ka boori.",
+       "revdelete-failure": " Filla diiyan alkdar mana hin ka taagandi:\n$1",
+       "logdelete-success": "Hantum ceebandu diiyan alkadar kayandi ka boori.",
+       "logdelete-failure": "Hantum ceebandu diiyan alkdar mana kayandi:\n$1",
        "revdel-restore": "diiyan alkadar barmay",
        "pagehist": "Moo taariki",
        "deletedhist": "Taariku tuusante",
        "import-interwiki-history": "Taariki fillawey kul bere moɲoo woo se",
        "import-interwiki-templates": "Leetey kul dam",
        "import-interwiki-submit": "Dam",
-       "import-interwiki-namespace": "Toodoo maafarru:",
-       "import-interwiki-rootpage": "Toodoo linji moo (suuba-haya):",
        "import-upload-filename": "Tukumaa:",
        "import-comment": "Daara:",
        "importtext": "Tukoo fattandi ka hum aššil wiki ga nda [[Special:Export|fattandi goyjinaa]].\nA gaabu war ordinateroo ga nd'a zijandi ne.",
index 23a59ac..6dfc6f8 100644 (file)
        "import-interwiki-history": "Kopiraj sve verzije historije za ovu stranicu",
        "import-interwiki-templates": "Uključi sve šablone",
        "import-interwiki-submit": "Uvezi - Увези",
-       "import-interwiki-namespace": "Odredišni imenski prostor:",
-       "import-interwiki-rootpage": "Odredišna osnovna stranica (neobavezno):",
        "import-upload-filename": "Naziv datoteke:",
        "import-comment": "Komentar:",
        "importtext": "Molimo Vas da izvezete datoteku iz izvornog wikija koristeći [[Special:Export|alat za izvoz]].\nSnimite je na Vašem računaru i pošaljite ovdje.",
index 646c332..27b1838 100644 (file)
        "revertmerge": "ඒකාබද්ධය අහෝසි කරන්න",
        "mergelogpagetext": "එක් පිටු ඉතිහාසයක් තවකක් හා සමග ඉතා මෑතදී සිදුවූ ඒකාබද්ධ වීම් දැක්වෙන ලැයිස්තුවක් පහත වේ.",
        "history-title": "$1:  සංශෝධන ඉතිහාසය",
+       "difference-title": "\"$1\" හි සංශෝධන අතර වෙනස්කම්",
        "difference-title-multipage": "\"$1\" හා \"$2\" පිටු අතර වෙනස",
        "difference-multipage": "පිටු අතර වෙනස",
        "lineno": "$1 පේළිය:",
        "showhideselectedversions": "තෝරාගත් සංශෝධන පෙන්වන්න/සඟවන්න",
        "editundo": "අහෝසිය",
        "diff-empty": "(වෙනසක් නොමැත)",
+       "diff-multi-sameuser": "(නොපෙන්වන එම පරිශීලකයා මගින් {{PLURAL:$1|එක් අතරමැදි සංස්කරණයක්|අතරමැදි සංස්කරණ $1ක්}})",
        "diff-multi-manyusers": "(පරිශීලකයන් $2 කට වඩා වැඩි ගණනකගේ ආසන්න පුනරීක්‍ෂණ $1ක් පෙන්වා නොමැත)",
        "searchresults": "ගවේෂණ ප්‍රතිඵල",
        "searchresults-title": "\"$1\" සඳහා ගවේෂණ ප්‍රතිඵල",
        "searchrelated": "ආශ්‍රිත",
        "searchall": "සියල්ල",
        "showingresults": "#'''$2''' ගෙන් ආරම්භ කොට, {{PLURAL:$1|ප්‍රතිඵල '''1'''  ක් |ප්‍රතිඵල '''$1''' ක්}} දක්වා පහත පෙන්වා ඇත.",
+       "search-showingresults": "{{PLURAL:$4|ප්‍රතිඵල <strong>$3</strong> කින් <strong>$1</strong> ක්|ප්‍රතිඵල <strong>$3</strong> කින් <strong>$1 සිට $2</strong> දක්වා}}",
        "search-nonefound": "විමසුම හා ගැලපෙන ප්‍රතිඵල කිසිවක් නොමැත.",
        "powersearch-legend": "වැඩිමනත් ගවේෂණය",
        "powersearch-ns": "නාමඅවකාශයන්හි ගවේෂණය කරන්න:",
        "recentchanges-label-minor": "මෙය සුළු සංස්කරණයකි",
        "recentchanges-label-bot": "මෙය රොබෝවක් විසින් කරන ලද සංස්කරණයකි",
        "recentchanges-label-unpatrolled": "මෙම සංස්කරණය තවම විමර්ශනය කර නොමැත",
-       "recentchanges-legend-newpage": "$1 -  නව පිටුව",
+       "recentchanges-label-plusminus": "පිටුවේ බයිට ගණන මෙපමණකින් වෙනස් වී ඇත",
+       "recentchanges-legend-heading": "'''Legend:'''",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|නව පිටු ලැයිස්තුව]] ද බලන්න)",
        "rcnotefrom": "'''$2''' න් පසු සිදුවී ඇති වෙනස්කම් මෙහි පහත දැක්වේ ('''$1''' ක ප්‍රමාණයක උපරිමයක් පෙන්වා ඇත).",
        "rclistfrom": "$3 $2 සිට බලපැවැත්වෙන මෑත වෙනස්වීම් පෙන්වන්න",
        "rcshowhideminor": "සුළු සංස්කරණ $1",
        "rc_categories": "ප්‍රවර්ගයන්ට සීමා කරන්න (\"|\" මගින් වෙන් කරන්න)",
        "rc_categories_any": "ඕනෑම",
        "rc-change-size": "$1",
+       "rc-change-size-new": "වෙනස් කළ පසු {{PLURAL:$1|බයිට|බයිටයන්}} $1 ක්",
        "newsectionsummary": "/* $1 */ නව ඡේදය",
        "rc-enhanced-expand": "විස්තර පෙන්වන්න",
        "rc-enhanced-hide": "විස්තර සඟවන්න",
        "booksources": "මූලාශ්‍ර පොත්",
        "booksources-search-legend": "ග්‍රන්ථ මූලාශ්‍ර සඳහා ගවේෂණය කරන්න",
        "booksources-isbn": "ISBN:",
+       "booksources-search": "සොයන්න",
        "booksources-text": "පහත දැක්වෙන්නේ අළුත් හා පරණ පොත් විකුණන අනෙකුත් අඩවි වලට සබැඳි ලැයිස්තුවක් වන අතර,  ඔබ විසින් සොයන පොත් පිළිබඳ වැඩිමනත් විස්තර ඒවා‍යේ අඩංගු වීමට ඉඩ ඇත:",
        "booksources-invalid-isbn": "සපයන ලද ISBN අංකය නීතික බවක් නොපෙන්වයි; මුල් මුලාශ්‍රය වෙතින් පිටපත් කිරීමේදී සිදුවූ දෝෂ සඳහා පරික්ෂා කරන්න.",
        "specialloguserlabel": "ඉටුකරන්නා:",
        "deleting-backlinks-warning": "'''ප්‍රවේශමෙන්:''' ඔබ සූදානම් වන්නේ ඔබ පරිශීලනය කරන පිටුවට සම්බන්ධ වූ අනෙක් පිටු මකා දැමීමටයි.",
        "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\nපිටුවට අවසන් සංස්කරණය සිදුකොට ඇත්තේ [[User:$3|$3]] ([[User talk:$3|සාකච්ඡාව]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]) විසිනි.",
        "undelete-show-file-submit": "ඔව්",
        "namespace": "නාමඅවකාශය:",
        "invert": "තෝරාගැනුම ප්‍රතිලෝම කරන්න",
+       "tooltip-invert": "තෝරාගත් නාම අවකාශය තුළ ඇති පිටුවල වෙනස්කම් සැඟවීමට මෙම කොටුව ලකුණු කරන්න (ලකුණු කර ඇත්නම් සම්බන්ධ නාම අවකාශයත්)",
        "namespace_association": "ආශ්‍රිත නාම අවකාශය",
+       "tooltip-namespace_association": "තෝරාගත් නාම අවකාශය හා සම්බන්ධ සාකච්ඡා හෝ විෂයය නාම අවකාශය ඇතුළත් කිරීමට මෙම කොටුව ලකුණු කරන්න",
        "blanknamespace": "(ප්‍රධාන)",
        "contributions": "{{GENDER:$1|පරිශීලකගේ}} දායකත්වයන්",
        "contributions-title": " $1 සඳහා පරිශීලක දායකත්වයන්",
        "import-interwiki-history": "මෙම පිටුව සඳහා සියළු ඉතිහාස අනුවාදයන් පිටපත් කරන්න",
        "import-interwiki-templates": "සියළු සැකිලි අන්තර්ගත කරන්න",
        "import-interwiki-submit": "ආයාත කරන්න",
-       "import-interwiki-namespace": "ගමනාන්ත නාමඅවකාශය:",
-       "import-interwiki-rootpage": "ගමනාන්ත මූල පිටුව (අමතර)ථ",
        "import-upload-filename": "ගොනු-නාමය:",
        "import-comment": "පරිකථනය:",
        "importtext": "කරුණාකර [[Special:Export|නිර්යාත උපයුක්තය]] භාවිත කරමින් මූලාශ්‍ර විකිය මගින් ගොනුව නිර්යාත කරන්න .\nඑය ඔබේ පරිගණකයෙහි සුරක්ෂිත කොට මෙතැනට උඩුගත කරන්න.",
        "spambot_username": "මීඩියාවිකි ස්පෑම් ඉවත්කිරීම",
        "spam_reverting": " $1 හට සබැඳියන් නොමැති අවසන් අනුවාදය වෙත ප්‍රතිවර්තනය වෙමින්",
        "spam_blanking": "සියළු සංශෝධනයන්හි  $1 වෙතවූ සබැඳියන් අඩංගු විය, හිස්කරමින්",
-       "simpleantispam-label": "ප්‍රති-ස්පෑම පරීක්‍ෂාව.\nකරුණාකර මෙය පුරවන්න '''එපා'''!",
+       "simpleantispam-label": "ප්‍රති-ස්පෑම පරීක්‍ෂාව.\nකරුණාකර මෙය පුරවන්න <strong>එපා</strong>!",
        "pageinfo-title": "\"$1\" සඳහා තොරතුරු",
        "pageinfo-header-basic": "මූලික තොරතුරු",
        "pageinfo-header-edits": "සංස්කරණ",
        "tags": "නීතික ලෙසින් වෙනස් කල හැකි ටැගයන්",
        "tag-filter": "[[Special:Tags|ටැග]] පෙරහන:",
        "tag-filter-submit": "පෙරහන",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|ටැගය|ටැග}}]]: $2)",
        "tags-title": "ටැගයන්",
        "tags-intro": "මෘදුකාංගය විසින් සංස්කරණයක් සිදුකල හැකි ටැගයන් මෙම පිටුවෙහි ලැයිස්තුගත කොට ඒවායේ තේරුම් දක්වා ඇත.",
        "tags-tag": " ටැග් නම",
        "htmlform-selectorother-other": "වෙනත්",
        "sqlite-has-fts": "$1 සම්පූර්ණ-පෙළ සෙවුම් සහය සමග",
        "sqlite-no-fts": "$1 සම්පූර්ණ-පෙළ සෙවුම් සහය රහිතව",
-       "logentry-delete-delete": "$1 à¶¸à¶\9aà·\8f à¶¯à¶¸à¶± à¶½à¶¯à·\93 à¶´à·\92ටà·\94 $3",
+       "logentry-delete-delete": "$1 à·\80à·\92à·\83à·\92නà·\8a $3 à¶´à·\92ටà·\94à·\80 {{GENDER:$2|මà¶\9aà·\8f à¶¯à¶¸à¶± à¶½à¶¯à·\93}}",
        "logentry-delete-restore": "$1 නැවත පිහිටුවන ලදී පිටු $3",
        "logentry-delete-event-legacy": "$1 විසින් $3 හී ලඝු සිදුවීම් වල දෘශ්‍යතාවය වෙනස් කරන ලදී",
        "logentry-delete-revision-legacy": "$1 විසින් $3 පිටුවෙහි සංශෝධනවල දෘශ්‍යතාවය වෙනස් කරන ලදී",
        "revdelete-uname-unhid": "පරිශීලක-නාමය  සඟවා නොමැත",
        "revdelete-restricted": "පරිපාලකයන් විෂයයෙහි ව්‍යවහාරිත පරිසීමාවන්",
        "revdelete-unrestricted": "පරිපාලකයන්ගේ පරිසීමාවන් ඉවත් කරන ලදි",
-       "logentry-move-move": "$1 $3 සිට $4 දක්වා පිටු ගෙන යන ලදී",
+       "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-newusers-newusers": "$1 පරිශීලක ගිණුමක් තනන ලදී",
-       "logentry-newusers-create": "$1 පරිශීලක ගිණුමක් තනන ලදී",
+       "logentry-newusers-create": "$1 පරිශීලක ගිණුම {{GENDER:$2|තනන ලදී}}",
        "logentry-newusers-create2": "$1 විසින් $3 පරිශීලක ගිණුම තනන ලදී",
        "logentry-newusers-autocreate": "$1 ගිණුම ස්වංක්‍රීයව නිර්මිතය",
+       "logentry-upload-upload": "$1 විසින් $3 {{GENDER:$2|උඩුගත කරන ලදී}}",
        "rightsnone": "(කිසිවක් නොමැත)",
        "revdelete-summary": "සංස්කරණ සාරාංශය",
        "feedback-adding": "ප්‍රතිචාරය පිටුවට එක් කරමින් ...",
index b1eeec0..b5c989e 100644 (file)
@@ -29,7 +29,8 @@
                        "아라",
                        "Matthew Greg",
                        "Ата",
-                       "Macofe"
+                       "Macofe",
+                       "TomášPolonec"
                ]
        },
        "tog-underline": "Podčiarkovať odkazy:",
@@ -56,7 +57,7 @@
        "tog-shownumberswatching": "Zobraziť počet používateľov sledujúcich stránku",
        "tog-oldsig": "Súčasný podpis:",
        "tog-fancysig": "Považovať podpisy za wikitext (bez automatických odkazov)",
-       "tog-uselivepreview": "Používať živý náhľad (experimentálna funkcia)",
+       "tog-uselivepreview": "Používať živý náhľad",
        "tog-forceeditsummary": "Upozoriť ma, keď nevyplním zhrnutie úprav",
        "tog-watchlisthideown": "Skryť moje úpravy zo zoznamu sledovaných",
        "tog-watchlisthidebots": "Skryť úpravy botov zo zoznamu sledovaných",
        "october-date": "$1. októbra",
        "november-date": "$1. novembra",
        "december-date": "$1. decembra",
-       "pagecategories": "{{PLURAL:$1|Kategória|Kategórie|Kategórie}}",
+       "pagecategories": "{{PLURAL:$1|Kategória|Kategórie|Kategórií}}",
        "category_header": "Stránky v kategórii „$1“",
        "subcategories": "Podkategórie",
        "category-media-header": "Multimediálne súbory v kategórii „$1“",
        "personaltools": "Osobné nástroje",
        "articlepage": "Zobraziť stránku",
        "talk": "Diskusia",
-       "views": "Zobrazení",
+       "views": "Zobrazenia",
        "toolbox": "Nástroje",
        "userpage": "Zobraziť stránku používateľa",
        "projectpage": "Zobraziť projektovú stránku",
        "pool-queuefull": "Front je plný",
        "pool-errorunknown": "Neznáma chyba",
        "pool-servererror": "Služba riadiaca prístup k serverom nieje dostupná ($1).",
+       "poolcounter-usage-error": "Chyba použitia: $1",
        "aboutsite": "O {{GRAMMAR:lokál|{{SITENAME}}}}",
        "aboutpage": "Project:Úvod",
        "copyright": "Obsah je dostupný pod $1, pokiaľ nie je uvedené inak.",
        "disclaimers": "Vylúčenie zodpovednosti",
        "disclaimerpage": "Project:Vylúčenie zodpovednosti",
        "edithelp": "Ako upravovať stránku",
+       "helppage-top-gethelp": "Pomoc",
        "mainpage": "Hlavná stránka",
        "mainpage-description": "Hlavná stránka",
        "policy-url": "Project:Zásady a smernice",
        "toc": "Obsah",
        "showtoc": "zobraziť",
        "hidetoc": "skryť",
-       "collapsible-collapse": "zbaliť",
-       "collapsible-expand": "rozbaliť",
+       "collapsible-collapse": "skry",
+       "collapsible-expand": "rozbaľ",
        "confirmable-confirm": "Ste si {{GENDER:$1|istý|istá|istí}}?",
        "confirmable-yes": "Áno",
        "confirmable-no": "Nie",
        "readonly_lag": "Databáza bola automaticky zamknutá pokým záložné databázové servery nedoženú hlavný server",
        "internalerror": "Vnútorná chyba",
        "internalerror_info": "Vnútorná chyba: $1",
+       "internalerror-fatal-exception": "Kritická výnimka typu „$1“",
        "filecopyerror": "Nebolo možné skopírovať súbor „$1“ na „$2“.",
        "filerenameerror": "Nebolo možné premenovať súbor „$1“ na „$2“.",
        "filedeleteerror": "Nebolo možné vymazať súbor „$1“.",
        "directorycreateerror": "Nebolo možné vytvoriť adresár „$1“.",
+       "directoryreadonlyerror": "Adresár \"$1\" je iba na čítanie.",
+       "directorynotreadableerror": "Adresár \"$1\" sa nedá čítať.",
        "filenotfound": "Nebolo možné nájsť súbor „$1“.",
        "unexpected": "Neočakávaná hodnota: „$1“=„$2“.",
        "formerror": "Chyba: nepodarilo sa odoslať formulár",
        "viewyourtext": "Môžete si prehliadnuť a skopírovať zdrojový kód <strong>vašich úprav</strong> tejto stránky:",
        "protectedinterface": "Táto stránka poskytuje text používateľského rozhrania tejto wiki a je zamknutá, aby sa predišlo jej zneužitiu.\nAk chcete pridať alebo zmeniť preklady pre všetky wiki, prosím, použite [//translatewiki.net/ translatewiki.net], projekt lokalizácie MediaWiki.",
        "editinginterface": "'''Upozornenie:''' Upravujete stránku, ktorá poskytuje text používateľského rozhrania.\nZmeny tejto stránky ovplyvnia vzhľad používateľského rozhrania ostatným používateľom.\nAk chcete pridať alebo zmeniť preklady pre všetky wiki, prosím, použite [//translatewiki.net/ translatewiki.net], projekt lokalizácie MediaWiki.",
+       "translateinterface": "Na pridanie a zmeny prekladov pre všetky wiki použite [//translatewiki.net/ translatewiki.net], projekt na lokalizáciu MediaWiki.",
        "cascadeprotected": "Táto stránka bola zamknutá proti úpravám, pretože je použitá na {{PLURAL:$1|nasledovnej stránke, ktorá je zamknutá|nasledovných stránkach, ktoré sú zamknuté}} voľbou „kaskádového zamknutia“:\n$2",
        "namespaceprotected": "Nemáte povolenie upravovať stránky v mennom priestore '''$1'''.",
        "customcssprotected": "Nemáte právo upravovať túto CSS stránku, pretože obsahuje osobné nastavenie iného používateľa.",
        "currentrev": "Aktuálna verzia",
        "currentrev-asof": "Aktuálna revízia z $1",
        "revisionasof": "Verzia zo dňa a času $1",
-       "revision-info": "Revízia z $1; $2",
+       "revision-info": "Verzia z $1, ktorú {{GENDER:$6|vytvoril|vytvorila}} $2$7",
        "previousrevision": "← Staršia verzia",
        "nextrevision": "Novšia verzia →",
        "currentrevisionlink": "Aktuálna úprava",
        "showhideselectedversions": "Zobraziť/skryť vybrané revízie",
        "editundo": "vrátiť",
        "diff-empty": "(Žiaden rozdiel)",
+       "diff-multi-sameuser": "({{PLURAL:$1|Jedna medziľahlá úprava|$1 medziľahlé úpravy|$1 medziľahlých úprav}} od rovnakého používateľa.)",
        "diff-multi-manyusers": "({{PLURAL:$1|$1 medziľahlá revízia|$1 medziľahlé revízie|$1 medziľahlých revízií}} od viac ako {{PLURAL:$2|$2 používateľa|$2 používateľov}} {{PLURAL:$1|nie je zobrazená|nie sú zobrazené|nie je zobrazených}})",
        "difference-missing-revision": "{{PLURAL:$2|$2 revízia|$2 revízie|$2 revízií}} pre požadovaný rozdiel ($1) {{PLURAL:$2|neexistuje|neexistujú|neexistuje}}.\n\nPravdepodobne ste nasledovali zastaraný odkaz na rozdiel revízií, z ktorých niektorá bola medzičasom odstránená.\nPodrobnosti nájdete v [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} zázname zmazaní].",
        "searchresults": "Výsledky vyhľadávania",
        "searchrelated": "súvisiace",
        "searchall": "všetko",
        "showingresults": "Nižšie {{PLURAL:$1|je zobrazený jeden výsledok|sú zobrazené '''1''' výsledky|je zobrazených '''$1''' výsledkov}}, počnúc od  #<b>$2</b>.",
+       "search-showingresults": "{{PLURAL:$4|Výsledok <strong>$1</strong> z <strong>$3</strong>|Výsledky <strong>$1 - $2</strong> z <strong>$3</strong>}}",
        "search-nonefound": "Vyhľadávanie nenašlo žiadne výsledky.",
        "powersearch-legend": "Pokročilé hľadanie",
        "powersearch-ns": "Hľadať v menných priestoroch:",
        "import-interwiki-history": "Skopírovať všetky historické revízie tejto stránky",
        "import-interwiki-templates": "Vložiť všetky šablóny",
        "import-interwiki-submit": "Importovať",
-       "import-interwiki-namespace": "Cieľový menný priestor:",
-       "import-interwiki-rootpage": "Koreňová stránka cieľa (nepovinné):",
        "import-upload-filename": "Názov súboru:",
        "import-comment": "komentár:",
        "importtext": "Prosím, exportujte súbor zo zdrojovej wiki použitím [[Special:Export|nástroja na export]].\nUložte ho na svoj disk a nahrajte sem.",
        "tooltip-pt-mycontris": "Zoznam vašich príspevkov",
        "tooltip-pt-login": "Odporúčame vám prihlásiť sa, nie je to však povinné.",
        "tooltip-pt-logout": "Odhlásiť",
+       "tooltip-pt-createaccount": "Odporúčame vytvoriť si vlastný účet a prihlásiť sa, nie je to však povinné.",
        "tooltip-ca-talk": "Diskusia o obsahu stránky",
        "tooltip-ca-edit": "Môžete upravovať túto stránku. Prosím, pred uložením použite tlačidlo Zobraziť náhľad.",
        "tooltip-ca-addsection": "Začať novú sekciu",
        "tooltip-search": "Vyhľadávanie na {{GRAMMAR:datív|{{SITENAME}}}}",
        "tooltip-search-go": "Prejsť na stránku s presne takýmto názvom, ak existuje",
        "tooltip-search-fulltext": "Hľadať tento text na stránkach",
-       "tooltip-p-logo": "Navštívte Hlavnú stránku",
+       "tooltip-p-logo": "Navštív Hlavnú stránku",
        "tooltip-n-mainpage": "Navštíviť Hlavnú stránku",
        "tooltip-n-mainpage-description": "Navštíviť hlavnú stránku",
        "tooltip-n-portal": "O projekte, ako môžete prispieť, kde čo nájsť",
        "tooltip-n-currentevents": "Aktuálne udalosti a ich pozadie",
-       "tooltip-n-recentchanges": "Zoznam posledných úprav na wiki.",
+       "tooltip-n-recentchanges": "Zoznam posledných úprav na wiki",
        "tooltip-n-randompage": "Zobraziť náhodnú stránku",
        "tooltip-n-help": "Miesto, kde sa môžete dozvedieť",
        "tooltip-t-whatlinkshere": "Zoznam všetkých wiki stránok, ktoré sem odkazujú",
        "metadata-help": "Tento súbor obsahuje ďalšie informácie, pravdepodobne pochádzajúce z digitálneho fotoaparátu či skenera, ktorý ho vytvoril alebo digitalizoval. Ak bol súbor zmenený, niektoré podrobnosti sa nemusia plne zhodovať so zmeneným súborom.",
        "metadata-expand": "Zobraziť detaily EXIF",
        "metadata-collapse": "Skryť detaily EXIF",
-       "metadata-fields": "Metadáta obrázka uvedené v tejto správe budú zahrnuté na stránke obrázka, keď je tabuľka metadát zbalená.\nOstatné budú predvolene skryté.\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": "Metadáta obrázka uvedené v tejto správe budú zahrnuté na stránke obrázka, keď bude tabuľka metadát zbalená.\nOstatné budú predvolene skryté.\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": "Šírka",
        "exif-imagelength": "Výška",
        "exif-bitspersample": "Bitov na zložku",
        "logentry-rights-rights": "$1 zmenil členstvo $3 v skupinách z $4 na $5",
        "logentry-rights-rights-legacy": "$1 zmenil členstvo $3 v skupinách",
        "logentry-rights-autopromote": "$1 bol automaticky povýšený z $4 na $5",
+       "logentry-upload-upload": "$1 {{GENDER:$2|pridal|pridala}} $3",
        "rightsnone": "(žiadne)",
        "revdelete-summary": "zhrnutie úprav",
        "feedback-adding": "Pridáva sa komentár na stránku...",
index 7d278ec..84ecf13 100644 (file)
@@ -9,7 +9,8 @@
                        "Vadgt",
                        "Yerpo",
                        "아라",
-                       "MaGa"
+                       "MaGa",
+                       "Skalcaa"
                ]
        },
        "tog-underline": "Podčrtavanje povezav:",
        "no-null-revision": "Ne morem ustvariti nove ničelne redakcije strani »$1«",
        "badtitle": "Nepravilen naslov",
        "badtitletext": "Navedeni naslov strani je neveljaven, prazen, napačno povezan k drugim jezikom oziroma wikiprojektom.\nMorda vsebuje enega ali več nepodprtih znakov.",
+       "title-invalid-empty": "Zahtevani naslov strani je prazen ali pa vsebuje samo ime imenskega prostora.",
+       "title-invalid-utf8": "Zahtevani naslov strani vsebuje neveljavno zaporedje UTF-8.",
+       "title-invalid-interwiki": "Naslov vsebuje povezavo interwiki",
+       "title-invalid-talk-namespace": "Zahtevani naslov strani se nanaša na pogovorno stran, ki ne more obstajati.",
+       "title-invalid-characters": "Zahtevani naslov strani vsebuje neveljavne znake: »$1«.",
+       "title-invalid-relative": "Naslov ima relativno pot. Relativni naslovi strani (./, ../) niso veljavni, saj pogosto niso dosegljivi, ko jih obravnava uporabnikov brskalnik.",
+       "title-invalid-magic-tilde": "Zahtevani naslov strani vsebuje neveljavno čarobno zaporedje tild (<nowiki>~~~</nowiki>).",
+       "title-invalid-too-long": "Zahtevani naslov strani je predolg. Ne sme biti daljši od $1 bajtov v kodiranju UTF-8.",
+       "title-invalid-leading-colon": "Zahtevani naslov strani na začetku vsebuje neveljavno dvopičje.",
        "perfcached": "Navedeni podatki so shranjeni v predpomnilniku in morda niso popolnoma posodobljeni. V predpomnilniku {{PLURAL:$1|je|sta|so|je}} na razpolago največ $1 {{PLURAL:$1|rezultat|rezultata|rezultate|rezultatov}}.",
        "perfcachedts": "Prikazani podatki so shranjeni v predpomnilniku in so bili zadnjič osveženi $1. V predpomnilniku {{PLURAL:$4|je|sta|so|je}} na razpolago največ $4 {{PLURAL:$4|rezultat|rezultata|rezultate|rezultatov}}.",
        "querypage-no-updates": "Posodobitve za to stran so trenutno onemogočene. Tukajšnji podatki se v kratkem ne bodo osvežili.",
        "import-interwiki-history": "Kopiraj vse dosedanje redakcije te strani",
        "import-interwiki-templates": "Vključi vse predloge",
        "import-interwiki-submit": "Uvozi",
-       "import-interwiki-namespace": "Prenesi strani v imenski prostor:",
-       "import-interwiki-rootpage": "Ciljna korenska stran (neobvezno):",
+       "import-mapping-default": "Uvoz na privzete lokacije",
+       "import-mapping-namespace": "Uvozi v imenski prostor:",
+       "import-mapping-subpage": "Uvozi kot podstrani naslednje strani:",
        "import-upload-filename": "Ime datoteke:",
        "import-comment": "Komentar:",
        "importtext": "Prosimo, izvozite datoteko z izvornega wikija s pomočjo [[Special:Export|orodja za izvoz]].\nShranite jo na vaš računalnik in naložite tukaj.",
        "tags-deactivate-submit": "Dezaktiviraj",
        "tags-apply-no-permission": "Nimate dovoljenja za uveljavljanje sprememb oznak skupaj z vašimi spremembami.",
        "tags-apply-not-allowed-one": "Oznake »$1« ni mogoče uveljaviti ročno.",
-       "tags-apply-not-allowed-multi": "{{PLURAL:$2|Naslednje oznake|Naslednji oznaki|Naslednjih oznak}} ni mogoče uveljaviti ročno: $1",
+       "tags-apply-not-allowed-multi": "{{PLURAL:$2|Naslednje oznake|Naslednji oznaki|Naslednjih oznak}} ni mogoče ročno uveljaviti: $1",
        "tags-update-no-permission": "Nimate dovoljenja za dodajanje ali odstranjevanje oznak na posameznih redakcijah ali dnevniških vnosih.",
        "tags-update-add-not-allowed-one": "Oznake »$1« ni mogoče dodati ročno.",
        "tags-update-add-not-allowed-multi": "{{PLURAL:$2|Naslednje oznake|Naslednji oznaki|Naslednjih oznak}} ni mogoče dodati ročno: $1",
        "tags-edit-manage-link": "Upravljanje oznak",
        "tags-edit-revision-selected": "{{PLURAL:$1|Izbrana redakcija|Izbrani redakciji|Izbrane redakcije}} [[:$2]]:",
        "tags-edit-logentry-selected": "{{PLURAL:$1|Izbran dnevniški vnos|Izbrana dnevniška vnosa|Izbrani dnevniški vnosi}}:",
-       "tags-edit-revision-legend": "Dodaj ali odstrani oznake od {{PLURAL:$1|redakcije|obeh $1 redakcij|vseh $1 redakcij}}",
-       "tags-edit-logentry-legend": "Dodaj ali odstrani oznake od {{PLURAL:$1|dnevniškega vnosa|obeh $1 dnevniških vnosov|vseh $1 dnevniških vnosov}}",
+       "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-new-tags": "Nove 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": "<strong>Spremembe smo uspešno uveljavili.</strong>",
-       "tags-edit-failure": "<strong>Sprememb nismo mogli uveljaviti:</strong>\n$1",
+       "tags-edit-success": "Spremembe smo uspešno 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.",
        "tags-edit-none-selected": "Prosimo, izberite vsaj eno oznako, ki jo želite dodati ali odstraniti.",
        "feedback-error1": "Napaka: Neznan rezultat iz API",
        "feedback-error2": "Napaka: Urejanje je spodletelo",
        "feedback-error3": "Napaka: Ni odgovora od API",
-       "feedback-error4": "Napaka: Ne morem objaviti navedenega naslova povratnih informacij",
+       "feedback-error4": "Napaka: Ni mogoče narediti objave na navedeni naslov povratnih informacij",
        "feedback-message": "Sporočilo:",
        "feedback-subject": "Zadeva:",
        "feedback-submit": "Pošlji",
        "log-name-pagelang": "Dnevnik spreminjanja jezika",
        "log-description-pagelang": "Dnevnik sprememb jezika strani.",
        "logentry-pagelang-pagelang": "$1 je {{GENDER:$2|spremenil|spremenila|spremenil(-a)}} jezik strani $3 z jezika $4 na jezik $5.",
-       "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|koži, navedeni|kože, navedene}} 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:* Klonirajte enega od repozitorijev <code>mediawiki/skins/*</code> z git v mapo <code dir=\"ltr\">skins/</code> vaše namestitve MediaWiki.\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 trenutno {{PLURAL:$4|nameščeno kožo|nameščeni koži|nameščene kože}}:\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": "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:* Klonirajte enega od repozitorijev <code>mediawiki/skins/*</code> z git v mapo <code dir=\"ltr\">skins/</code> vaše namestitve MediaWiki.\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 trenutno {{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:* Klonirajte enega od repozitorijev <code>mediawiki/skins/*</code> z git v mapo <code>skins/</code> vaše namestitve MediaWiki.\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''')",
index dee7937..40f2b12 100644 (file)
        "nov": "Nof",
        "dec": "Dis",
        "pagecategories": "{{PLURAL:$1|Qeybta|Qeybaha}}",
-       "category_header": "Maqaalada ku jirta qeybta \"$1\"",
+       "category_header": "Bogagga ku jira qeybta \"$1\"",
        "subcategories": "Qeybaha hoose",
        "category-media-header": "Wararka ku jiro qeybta\"$1\"",
        "category-empty": "''Qeybtaan hadda wax maqaal ah kuma jirto''",
        "semiprotectedpagewarning": "'''Fiiro gaar ah:''' Boggaan waa la difaacay si ee isticmaalada isdiiwaan geliyay kaliya wax uuga badalaan.\nFariinta gudagalihii ugu danbeeyay hoostaan ee ku qorontahay:",
        "cascadeprotectedwarning": "'''Digniin:''' Boggaan waa la difaacay si ee maamulada kaliya wax uuga badalaan, sababtoo ah waxaa ku jirto kaskadyadaan la difaacay oo soo sosocoto {{PLURAL:$1|bog|boggaga}}:",
        "templatesused": "{{PLURAL:$1|Tusmo|Tusmooyinka}} lagu isticmaalay boggaan:",
+       "templatesusedpreview": "{{PLURAL:$1|Tusmo|Tusmooyin}} loo adeegsaday horfiirintaan:",
        "template-protected": "(la difaacay)",
        "template-semiprotected": "(difaaca-fudud)",
        "hiddencategories": "Boggaan wuxuu ka mid yahay {{PLURAL:$1|1 qeyb oo qarsoon|$1 oo ah qeybaha qarsoon}}:",
        "api-error-unknown-code": "Qalad la aqoon: \"$1\"",
        "api-error-unknown-warning": "Digniin la aqoon: $1",
        "api-error-uploaddisabled": "Soo gelinta waa laga xiray wikigaan.",
+       "limitreport-title": "Faahin caddeymo:",
        "limitreport-cputime": "Waqtiga adeegsiga CPU",
-       "limitreport-walltime": "Waqtiga dhabta ah adeegsiga"
+       "limitreport-walltime": "Waqtiga dhabta ah adeegsiga",
+       "limitreport-ppvisitednodes": "Tirooyinka gutinada ee maskaxda",
+       "limitreport-ppgeneratednodes": "Gutinada ay horay u soo booqatay maskaxda"
 }
index fc870a2..33372e1 100644 (file)
        "import-interwiki-history": "Kopjo të gjitha versionet e historisë për këtë faqe",
        "import-interwiki-templates": "Përfshini të gjitha stampat",
        "import-interwiki-submit": "Importo",
-       "import-interwiki-namespace": "Hapësira e destinuar:",
        "import-upload-filename": "Emri i skedës:",
        "import-comment": "Arsyeja:",
        "importtext": "Ju lutem eksportoni këtë skedë nga burimi wiki duke përdorur  [[Special:Export|export utility]].! XAU Save atë në kompjuterin tuaj dhe ngarkoni këtu.",
index 79b7d88..a6c9c59 100644 (file)
        "notextmatches": "Ниједан текст странице не одговара",
        "prevn": "претходних {{PLURAL:$1|$1}}",
        "nextn": "следећих {{PLURAL:$1|$1}}",
+       "prev-page": "претходна страница",
+       "next-page": "следећа страница",
        "prevn-title": "$1 {{PLURAL:$1|претходни  резултат|претходна резултата|претходних резултата}}",
        "nextn-title": "$1 {{PLURAL:$1|следећи резултат|следећа резултата|следећих резултата}}",
        "shown-title": "Прикажи $1 {{PLURAL:$1|резултат|резултата|резултата}} по страници",
        "import-interwiki-history": "Копирај све верзије историје за ову страницу",
        "import-interwiki-templates": "Укључи све шаблоне",
        "import-interwiki-submit": "Увези",
-       "import-interwiki-namespace": "Одредишни именски простор:",
-       "import-interwiki-rootpage": "Одредишна основна страница (необавезно):",
        "import-upload-filename": "Назив датотеке:",
        "import-comment": "Коментар:",
        "importtext": "Извезите датотеку с изворног викија користећи [[Special:Export|извоз]].\nСачувајте је на рачунар и пошаљите овде.",
        "watchlistedit-raw-done": "Ваш списак надгледања је ажуриран.",
        "watchlistedit-raw-added": "{{PLURAL:$1|1=Додат је један наслов|Додата су $1 наслова|Додато је $1 наслова}}:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|1 наслов је уклоњен|Уклоњена су $1 наслова|Уклоњено је $1 наслова}}:",
-       "watchlistedit-clear-title": "СпиÑ\81ак Ð½Ð°Ð´Ð³Ð»ÐµÐ´Ð°Ñ\9aа Ð¸Ñ\81пÑ\80ажÑ\9aен",
+       "watchlistedit-clear-title": "Ð\9fÑ\80ажÑ\9aеÑ\9aе Ñ\81пиÑ\81ак Ð½Ð°Ð´Ð³Ð»ÐµÐ´Ð°Ñ\9aа",
        "watchlistedit-clear-legend": "Испразни списак надгледања",
        "watchlistedit-clear-explain": "Сви наслови ће бити уклоњени из вашег списка надгледања.",
        "watchlistedit-clear-titles": "Наслови:",
        "tags-deactivate-reason": "Разлог:",
        "tags-deactivate-not-allowed": "Није могуће деактивирати ознаку „$1“.",
        "tags-deactivate-submit": "Декативирај",
+       "tags-edit-existing-tags": "Постојеће ознаке:",
+       "tags-edit-new-tags": "Нове ознаке:",
+       "tags-edit-reason": "Разлог:",
        "comparepages": "Упоређивање страница",
        "compare-page1": "Страница 1",
        "compare-page2": "Страница 2",
index 5d62903..1ad6b7e 100644 (file)
        "import-interwiki-history": "Kopiraj sve verzije istorije za ovu stranicu",
        "import-interwiki-templates": "Uključi sve šablone",
        "import-interwiki-submit": "Uvezi",
-       "import-interwiki-namespace": "Odredišni imenski prostor:",
-       "import-interwiki-rootpage": "Odredišna osnovna stranica (neobavezno):",
        "import-upload-filename": "Naziv datoteke:",
        "import-comment": "Komentar:",
        "importtext": "Izvezite datoteku s izvornog vikija koristeći [[Special:Export|izvoz]].\nSačuvajte je na računar i pošaljite ovde.",
        "watchlistedit-raw-done": "Vaš spisak nadgledanja je ažuriran.",
        "watchlistedit-raw-added": "{{PLURAL:$1|1=Dodat je jedan naslov|Dodata su $1 naslova|Dodato je $1 naslova}}:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|1 naslov je uklonjen|Uklonjena su $1 naslova|Uklonjeno je $1 naslova}}:",
-       "watchlistedit-clear-title": "Spisak nadgledanja ispražnjen",
+       "watchlistedit-clear-title": "Pražnjenje spisak nadgledanja",
        "watchlistedit-clear-legend": "Isprazni spisak nadgledanja",
        "watchlistedit-clear-explain": "Svi naslovi će biti uklonjeni iz vašeg spiska nadgledanja.",
        "watchlistedit-clear-titles": "Naslovi:",
index 2e483ca..10024ac 100644 (file)
        "import-interwiki-history": "Importier aal Versione fon disse Siede",
        "import-interwiki-templates": "Aal Foarloagen iensluute",
        "import-interwiki-submit": "Import",
-       "import-interwiki-namespace": "Siel-Noomensruum:",
        "import-upload-filename": "Doatäinoome:",
        "import-comment": "Kommentoar:",
        "importtext": "Ju Doatäi uur ju Spezioalsiede [[Special:Export|Exportfunktion]] uut dän Wällewiki exportierje.\nDo ap dän lokoale Reekener spiekerje un deerätter hier hoochleede.",
        "import-invalid-interwiki": "Uut dän anroate Wiki is neen Import muugelk.",
        "importlogpage": "Import-Logbouk",
        "importlogpagetext": "Administrativen Import fon Sieden mäd Versionsgeskichte fon uur Wikis.",
-       "import-logentry-upload": "häd „[[$1]]“ fon ne Doatäi importierd",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|Version|Versione}}",
-       "import-logentry-interwiki": "häd „$1“ importierd (Transwiki)",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|Version|Versione}} fon $2",
        "tooltip-pt-userpage": "Dien Benutsersiede",
        "tooltip-pt-anonuserpage": "Benutsersiede fon ju IP-Adresse fon ju uut du Annerengen truchfierst",
index 01819be..17bdc05 100644 (file)
        "revdelete-unsuppress": "Hapus watesan kana révisi anu geus dipulangkeun",
        "revdelete-log": "Alesan:",
        "revdelete-submit": "Larapkeun kana {{PLURAL:$1|révisi|révisi}} nu dipilih",
-       "revdelete-success": "<strong>Visibilitas révisi geus dimutahirkeun.</strong>",
+       "revdelete-success": "Visibilitas révisi geus dimutahirkeun.",
        "revdelete-failure": "'''Visibilitas révisi teu bisa diapdét:'''\n$1",
        "logdelete-success": "Log pangatur nyumputkeun junun dilarapkeun.",
        "logdelete-failure": "'''Visibilitas log teu bisa disét:'''\n$1",
        "import-interwiki-history": "Salin sakabéh vérsi jujutan pikeun ieu kaca",
        "import-interwiki-templates": "Kaasup sakabéh citakan",
        "import-interwiki-submit": "Impor",
-       "import-interwiki-namespace": "Spasi ngaran tujuan:",
        "import-upload-filename": "Ngaran berkas:",
        "import-comment": "Ringkesan:",
        "importtext": "Mangga ékspor koropakna ti sumber nu dipaké ku wiki migunakeun fungsi Special:Export, simpen na piringan anjeun, teras muatkeun di dieu.",
        "import-invalid-interwiki": "Teu bisa ngimpor ti wiki nu dipilih.",
        "importlogpage": "Log impor",
        "importlogpagetext": "Impor administratif kaca-kaca ti wiki séjén katut jujutanana.",
-       "import-logentry-upload": "Muatkeun [[$1]] make pamuatan koropak",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|vérsi heubeul}}",
-       "import-logentry-interwiki": "$1 geus ditranswikikeun",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|vérsi heubel}} ti $2",
        "javascripttest": "Nguji JavaScript",
        "tooltip-pt-userpage": "Kaca kontributor Anjeun",
        "expand_templates_output": "Hasil:",
        "expand_templates_xml_output": "Output XML",
        "expand_templates_ok": "Heug",
-       "expand_templates_preview": "Pramidang"
+       "expand_templates_preview": "Pramidang",
+       "special-characters-group-latin": "Latin",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Lambang",
+       "special-characters-group-greek": "Yunani",
+       "special-characters-group-cyrillic": "Sirilik",
+       "special-characters-group-arabic": "Arab",
+       "special-characters-group-persian": "Parsi",
+       "special-characters-group-hebrew": "Ibrani",
+       "special-characters-group-bangla": "Bangla",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Sinhala",
+       "special-characters-group-gujarati": "Gujarati",
+       "special-characters-group-thai": "Thai",
+       "special-characters-group-lao": "Lao",
+       "special-characters-group-khmer": "Khmer"
 }
index 7cc861f..5eb5ba1 100644 (file)
@@ -65,7 +65,8 @@
                        "Boom",
                        "Marfuas",
                        "Macofe",
-                       "Aaoo"
+                       "Aaoo",
+                       "Josve05a"
                ]
        },
        "tog-underline": "Stryk under länkar:",
        "no-null-revision": "Kunde inte skapa ny tom version för sidan \"$1\"",
        "badtitle": "Felaktig titel",
        "badtitletext": "Den begärda sidtiteln är antingen ogiltig eller tom, eller så är titeln felaktigt länkad från en annan wiki.\nDen kan innehålla ett eller flera tecken som inte får användas i sidtitlar.",
+       "title-invalid-empty": "Den begärda sidtitel är tom eller innehåller bara namnet av en namnrymd.",
+       "title-invalid-utf8": "Den begärda sidtiteln innehåller en ogiltig UTF-8-sekvens.",
+       "title-invalid-interwiki": "Titel innehåller en interwiki-länk",
+       "title-invalid-talk-namespace": "Den begärda sidtitel hänvisar till en diskussionssida som inte kan existera.",
+       "title-invalid-characters": "Den begärda sidtiteln innehåller ogiltiga tecken: \"$1\".",
+       "title-invalid-too-long": "Den begärda sidtiteln är för lång. Det får inte vara längre än $1 byte i UTF-8-kodning.",
        "perfcached": "Följande data är cachad och är möjligtvis inte helt uppdaterad. Maximalt {{PLURAL:$1|ett|$1}} resultat finns {{PLURAL:$1|tillgängligt|tillgängliga}} i cachen.",
        "perfcachedts": "Följande data är cachad och uppdaterades senast $1. Maximalt {{PLURAL:$4|ett|$4}} resultat finns {{PLURAL:$4|tillgängligt|tillgängliga}} i cachen.",
        "querypage-no-updates": "Uppdateringar för den här sidan är för närvarande inaktiverade.\nData kommer i nuläget inte att uppdateras.",
        "logempty": "Inga matchande träffar i loggen.",
        "log-title-wildcard": "Sök efter sidtitlar som börjar med texten",
        "showhideselectedlogentries": "Visa/Dölj markerade loggposter",
+       "log-edit-tags": "Redigera märken i valda loggposter",
        "allpages": "Alla sidor",
        "nextpage": "Nästa sida ($1)",
        "prevpage": "Föregående sida ($1)",
        "import-interwiki-history": "Kopiera hela versionshistoriken för denna sida",
        "import-interwiki-templates": "Inkludera alla mallar",
        "import-interwiki-submit": "Importera",
-       "import-interwiki-namespace": "Målnamnrymd:",
-       "import-interwiki-rootpage": "Destinationens grundsida (valfri):",
+       "import-mapping-default": "Importera till standardplatser",
+       "import-mapping-namespace": "Importera till en namnrymd:",
+       "import-mapping-subpage": "Importera som undersidor till följande sida:",
        "import-upload-filename": "Filnamn:",
        "import-comment": "Kommentar:",
        "importtext": "Var god exportera filen från ursprungs-wikin med hjälp av [[Special:Export|exporteringsverktyget]].\nSpara den på din dator och ladda upp den här.",
        "tooltip-pt-preferences": "Dina inställningar",
        "tooltip-pt-watchlist": "Listan över sidor du bevakar för ändringar",
        "tooltip-pt-mycontris": "Lista över dina bidrag",
-       "tooltip-pt-login": "Du uppmuntras att logga in, men det är inte nödvändigt",
+       "tooltip-pt-login": "Inloggning ger tillgång till fler funktioner, och kan vara nödvändigt, för den som vill redigera sidor.",
        "tooltip-pt-logout": "Logga ut",
        "tooltip-pt-createaccount": "Du uppmuntras att skapa ett konto och logga in, men det är inte obligatoriskt",
        "tooltip-ca-talk": "Diskussion om innehållssidan",
        "pageinfo-protect-cascading-yes": "Ja",
        "pageinfo-protect-cascading-from": "Skrivskydd kaskaderar från",
        "pageinfo-category-info": "Kategoriinformation",
+       "pageinfo-category-total": "Totalt antal medlemmar",
        "pageinfo-category-pages": "Antal sidor",
        "pageinfo-category-subcats": "Antal underkategorier",
        "pageinfo-category-files": "Antal filer",
        "patrol-log-page": "Patrulleringslogg",
        "patrol-log-header": "Detta är en logg över patrullerade sidversioner.",
        "log-show-hide-patrol": "$1 patrulleringslogg",
+       "log-show-hide-tag": "$1 märkeslogg",
        "deletedrevision": "Raderade gammal sidversion $1",
        "filedeleteerror-short": "Fel vid radering av fil: $1",
        "filedeleteerror-long": "Fel inträffade vid raderingen av filen:\n\n$1",
        "tag-filter-submit": "Filter",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Märke|Märken}}]]: $2)",
        "tags-title": "Märken",
-       "tags-intro": "Denna sida listar märkena som mjukvaran kan markera en redigering med, och deras betydelse.",
+       "tags-intro": "Denna sida listar de märken som mjukvaran kan markera en redigering med, och deras betydelse.",
        "tags-tag": "Märkesnamn",
        "tags-display-header": "Utseende på listor över ändringar",
        "tags-description-header": "Full beskrivning av betydelse",
        "tags-deactivate-reason": "Anledning:",
        "tags-deactivate-not-allowed": "Det är inte möjligt att inaktivera taggen \"$1\".",
        "tags-deactivate-submit": "Inaktivera",
+       "tags-apply-not-allowed-one": "Märket \"$1\" kan inte läggas till manuellt.",
+       "tags-apply-not-allowed-multi": "Följande {{PLURAL:$2|märke|märken}} kan inte läggas till manuellt: $1",
+       "tags-update-add-not-allowed-one": "Märket \"$1\" kan inte läggas till manuellt.",
+       "tags-update-add-not-allowed-multi": "Följande {{PLURAL:$2|märke|märken}} kan inte läggas till manuellt: $1",
        "tags-update-remove-not-allowed-one": "Märket \"$1\" får inte tas bort.",
        "tags-update-remove-not-allowed-multi": "Följande {{PLURAL:$2|märke|märken}} får inte tas bort manuellt: $1",
        "tags-edit-title": "Redigera märken",
        "tags-edit-reason": "Anledning:",
        "tags-edit-revision-submit": "Verkställ ändringar för {{PLURAL:$1|denna sidversion|$1 sidversioner}}",
        "tags-edit-logentry-submit": "Verkställ ändringar för {{PLURAL:$1|denna loggpost|$1 loggposter}}",
-       "tags-edit-success": "<strong>Ändringarna verkställdes.</strong>",
-       "tags-edit-failure": "<strong>Ändringarna kunde inte verkställas:</strong>\n$1",
+       "tags-edit-success": "Ändringarna verkställdes.",
+       "tags-edit-failure": "Ändringarna kunde inte verkställas:\n$1",
+       "tags-edit-nooldid-title": "Ogiltig målversion",
+       "tags-edit-nooldid-text": "Antingen har du inte valt en målversion för funktionen eller så finns inte den valda ändringen.",
+       "tags-edit-none-selected": "Välj åtminstone ett märke att lägga till eller ta bort.",
        "comparepages": "Jämför sidor",
        "compare-page1": "Sida 1",
        "compare-page2": "Sida 2",
index 878be69..a46d488 100644 (file)
        "import-interwiki-history": "Leta pamoja na mapitio yote ya ukurasa huu",
        "import-interwiki-templates": "Leta pamoja na vigezo vyote",
        "import-interwiki-submit": "Leta",
-       "import-interwiki-namespace": "Eneo la wiki la mwishilio:",
        "import-upload-filename": "Jina la faili:",
        "import-comment": "Maelezo:",
        "importtext": "Tafadhali upeleke faili kutoka wiki lake kwa kutumia [[Special:Export|zana ya kupeleka]].\nUlihafadhie katika tarakalishi yako, halafu ulipakie hapa.",
        "duration-years": "{{PLURAL:$1|mwaka|miaka}} $1",
        "duration-centuries": "{{PLURAL:$1|karne}} $1",
        "expand_templates_ok": "Sawa",
-       "expand_templates_preview": "Hakiki"
+       "expand_templates_preview": "Hakiki",
+       "special-characters-group-latin": "Kilatini",
+       "special-characters-group-latinextended": "Kilatini kilichoongezwa",
+       "special-characters-group-ipa": "Herufi za Fonetiki za Kimataifa (IPA)",
+       "special-characters-group-symbols": "Alama",
+       "special-characters-group-greek": "Kigiriki",
+       "special-characters-group-cyrillic": "Kikyrili",
+       "special-characters-group-arabic": "Kiarabu",
+       "special-characters-group-arabicextended": "Kiarabu kilichoongezwa",
+       "special-characters-group-persian": "Kiajemi",
+       "special-characters-group-hebrew": "Kiyahudi",
+       "special-characters-group-bangla": "Kibangla",
+       "special-characters-group-telugu": "Kitelugu",
+       "special-characters-group-sinhala": "Kisinhala",
+       "special-characters-group-gujarati": "Kigujarati",
+       "special-characters-group-thai": "Kitai",
+       "special-characters-group-lao": "Kilao",
+       "special-characters-group-khmer": "Kikhmeri"
 }
index c4be101..881e620 100644 (file)
        "userlogin-yourname-ph": "Wszkryflej swoje mjano użytkowńika",
        "createacct-another-username-ph": "Wszkryflej mjano użytkowńika",
        "yourpassword": "Hasło:",
+       "userlogin-yourpassword": "Hasło",
        "userlogin-yourpassword-ph": "Wszkryflej swoje hasło",
        "createacct-yourpassword-ph": "Wszkryflej hasło",
        "yourpasswordagain": "Naszkryflej ausdruk zaś",
        "gotaccountlink": "Naloguj śe",
        "userlogin-resetlink": "Zapomńoł żeś dane lo nalogowańo?",
        "userlogin-resetpassword-link": "Ńy pamjyntosz hasła?",
+       "userlogin-helplink2": "Hilfa przi logůwańu",
        "userlogin-loggedin": "Zalogowano kej {{GENDER:$1|$1}}. Użyj formulara půńiżyj, coby zalogować śe kej inkszy używocz.",
        "userlogin-createanother": "Twůrz inksze kůnto",
        "createacct-emailrequired": "E-brif",
        "suspicious-userlogout": "Polecyńe wylogowańo uostoło uodćepńynte skiż tygo co wyglůnda, aże uostoło posłane bez uszkodzůna przeglůndarka abo buforujůncy serwer proxy.",
        "createacct-another-realname-tip": "Wszkryflańy twojigo mjana a nazwiska ńy je końyczne.\nKej bydźesz chćoł je podoć, bydům użyte, coby dokůmyntowoć Twoje autorstwo.",
        "pt-login": "Zaloguj sie",
+       "pt-login-button": "Zalogůj sie",
        "pt-createaccount": "Twōrz nowe konto",
+       "pt-userlogout": "Uodloguj śe",
        "php-mail-error-unknown": "Ńyznany feler we funkcyji mail()",
        "user-mail-no-addy": "Průba posłańo e‐brifa bez adresu uodbjorcy",
        "user-mail-no-body": "Bůła průba posłańo e-brifa uo blank abo krůtkim tekśće.",
        "currentrev": "Aktuelno wersyjo",
        "currentrev-asof": "Aktuelno wersyjo na dźyń $1",
        "revisionasof": "Wersyjo ze dńa $1",
-       "revision-info": "Wersyjo s dńa $1; $2",
+       "revision-info": "Wersyjo ze dńo $1 autorstwa {{GENDER:$6|$2}}$7",
        "previousrevision": "← starszo wersyjo",
        "nextrevision": "Nostympno wersyjo→",
        "currentrevisionlink": "Aktualno wersyjo",
        "revertmerge": "Uodkupluj",
        "mergelogpagetext": "Půńiżyj je lista uostatńich kuplowań historyji půmjyńań zajtůw.",
        "history-title": "Gyszichta sprowjyń \"$1\"",
+       "difference-title": "$1: Růżńice mjyndzy wersyjůma",
        "difference-multipage": "(Porůwnańy zajt)",
        "lineno": "Lińijo $1:",
        "compareselectedversions": "zrůwnej uobrane wersyje",
        "searchrelated": "podane",
        "searchall": "wszyjske",
        "showingresults": "To lista na keryj je {{PLURAL:$1|'''1''' wyńik|'''$1''' wyńikůw}}, sztartujůnc uod nůmery '''$2'''.",
+       "search-showingresults": "{{PLURAL:$4|Rezultat <strong>$1</strong> ze <strong>$3</strong>|Rezultaty <strong>$1 - $2</strong> ze <strong>$3</strong>}}",
        "search-nonefound": "Ńy mo wynikůw, kere uodpadajům kryterjům zapytańo.",
        "powersearch-legend": "Sznupańy zaawansowane",
        "powersearch-ns": "Sznupej we przestrzyńach mjan:",
        "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",
        "rcshowhideminor": "$1 drobne půmjyńańa",
+       "rcshowhideminor-show": "Pokoż",
        "rcshowhideminor-hide": "Schrůń",
        "rcshowhidebots": "$1 boty",
        "rcshowhidebots-show": "Pokoż",
+       "rcshowhidebots-hide": "Schrůń",
        "rcshowhideliu": "$1 zaregisztrowanych",
        "rcshowhideliu-hide": "Schrůń",
        "rcshowhideanons": "$1 anůńimowych",
+       "rcshowhideanons-show": "Pokoż",
        "rcshowhideanons-hide": "Schrůń",
        "rcshowhidepatr": "$1 uowjerzůne",
        "rcshowhidemine": "$1 uody mje sprowjůne",
+       "rcshowhidemine-show": "Pokoż",
        "rcshowhidemine-hide": "Schrůń",
        "rclinks": "Ukoż uostatńe $1 sprowjyń bez uostatńe $2 dńi.<br />$3",
        "diff": "zmj.",
        "suppress": "Oversight",
        "booksources": "Kśůnžki",
        "booksources-search-legend": "Sznupej za zdrzůdłůma kśůnżkowymi",
+       "booksources-search": "Sznupej",
        "booksources-text": "Půńiżyj je lista uodnośńikůw do inkszych witryn, kere pośredńiczům we sprzedaży nowych a używanych buchůw, a tyż můgům mjeć dolsze informacyje uo poszukiwanym bez ćebje buchu.",
        "booksources-invalid-isbn": "Podany numer ISBN zostoł rozpoznany kej felerny. Sprowdź aże podany numer je zgodny s numerym kery je we zdrzůdle.",
        "specialloguserlabel": "Užytkowńik:",
        "import-interwiki-text": "Wybjer wiki i nmjano zajty do importowańo.\nDaty a tyž mjana autorůw bydům zachowane.\nWšyjstke uoperacyje importu transwiki sům uodnotowywane w [[Special:Log/import|rejeře importu]].",
        "import-interwiki-history": "Kopjuj couko historja sprowjyń tyi zajty",
        "import-interwiki-submit": "Importuj",
-       "import-interwiki-namespace": "Docelowo przestrzyń mjan:",
        "import-upload-filename": "Mjano plika:",
        "import-comment": "Kůmyntorz:",
        "importtext": "Używajůnc werkcojga [[Special:Export|eksportuj]] wyeksportuj plik ze zdrzůdłowyj wiki, naszkryflej go na swojym dysku, a potym wćepńij go tukej.",
        "watchlisttools-view": "Pokož wažńijše pomjyńańo",
        "watchlisttools-edit": "Pokož i zmjyńoj pozorliste",
        "watchlisttools-raw": "Zmjyńoj surowo pozorlista",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|dyskusyjo]])",
        "duplicate-defaultsort": "Pozůr: Zmjarkowanym kluczym sortowańo bydźe \"$2\" a zastůmpi uůn zawczasu używany klucz \"$1\".",
        "version": "Wersjo",
        "version-extensions": "Zainstalowane rozšeřyńa",
        "logentry-delete-delete": "$1 {{GENDER:$2|wyćepoł|wyćepała}} zajta $3",
        "revdelete-restricted": "naštaluj uograničyńo do administratorůw",
        "revdelete-unrestricted": "wycofej uograničyńo do administratorůw",
+       "logentry-move-move": "$1 {{GENDER:$2|przećep|przećepła}} zajta $3 do $4",
        "logentry-newusers-create": "Kůnto {{GENDER:$2|używocza}} $1 uostało stworzůne",
+       "logentry-upload-upload": "$1 {{GENDER:$2|posłoł|posłała}} $3",
        "rightsnone": "podstawowo",
        "revdelete-summary": "uopis pomjyńań",
        "searchsuggest-search": "Sznupej",
index 2cfe460..6befde3 100644 (file)
@@ -37,7 +37,8 @@
                        "Kalyanasundar",
                        "தமிழ்த்தம்பி",
                        "Macofe",
-                       "AntanO"
+                       "AntanO",
+                       "கலைவாணன்"
                ]
        },
        "tog-underline": "இணைப்புகளுக்கு அடிக்கோடிடு",
        "otherlanguages": "மற்ற மொழிகளில்",
        "redirectedfrom": "($1 இலிருந்து வழிமாற்றப்பட்டது)",
        "redirectpagesub": "பக்கவழிமாற்றுப் பக்கம்",
+       "redirectto": "வழிமாற்றவும்:",
        "lastmodifiedat": "இப்பக்கம் கடைசியாக $1, $2 மணிக்குத் திருத்தப்பட்டது.",
        "viewcount": "இப்பக்கம் {{PLURAL:$1|ஒரு முறை|$1 முறைகள்}} அணுகப்பட்டது.",
        "protectedpage": "காக்கப்பட்ட பக்கம்",
        "suspicious-userlogout": "உங்கள் விடுபதிகை கோரிக்கை மறுக்கப்பட்டது ஏனென்றால் அது அறுபட்ட உலாவி அல்லது மாற்று இடைக்கிடங்கியால் அனுப்பப்பட்டுள்ளது.",
        "createacct-another-realname-tip": "உண்மையான பெயர் கட்டாயமற்றது.\nநீங்கள் இதை கொடுத்தால் உங்கள் ஆக்கங்களுக்கான உரிமையளிப்புகளின் போது இது பயன்படும்.",
        "pt-login": "புகுபதிகை",
+       "pt-login-button": "புகுபதிகை",
        "pt-createaccount": "புதிய கணக்கை உருவாக்கவும்",
        "pt-userlogout": "விடுபதிகை",
        "php-mail-error-unknown": "PHP 's mail() செயல்பாட்டில் அறியப்படாத பிழை.",
        "preview": "முன்தோற்றம்",
        "showpreview": "முன்தோற்றம் காட்டு",
        "showdiff": "மாற்றங்களைக் காட்டு",
-       "anoneditwarning": "'''எச்சரிக்கை:''' நீங்கள் புகுபதிகை செய்யவில்லை.\nஉங்கள் ஐ.பி. முகவரி இப்பக்கத்தின் தொகுப்பு வரலாற்றில் பதிவு செய்யப்படும்.",
+       "anoneditwarning": "<strong>எச்சரிக்கை:</strong> நீங்கள் புகுபதிகை செய்யவில்லை. நீங்கள் தொகுத்தால் உங்கள் ஐ.பி. முகவரி எல்லோருக்கும் தெரியும்படி இருக்கும். நீங்கள் <strong>[$1 புகுபதிகை செய்தாலோ]</strong> அல்லது <strong>[$2 புதிய கணக்கு உருவாக்கினாலோ]</strong>, பிற பயன்களோடு நீங்கள் செய்யும் தொகுப்புகள் உங்கள் பயனர் பெயரோடு தொடர்புப்படுத்திக்காட்டப்படும்.",
        "anonpreviewwarning": "நீங்கள் புகுபதிகை செய்யவில்லை. இந்த பக்கத்தை சேமித்தால் உஙகள் ஐ.பி. முகவரி இதன் வரலாற்றுப் பக்கத்தில் பதிவாகும்.",
        "missingsummary": "'''நினைவூட்டல்:''' நீர் தொகுப்புச் சுருக்கமொன்றைக் கொடுக்கவில்லை.\nஇன்னொரு முறை பக்கத்தை சேமி என்பதை அழுத்தினால் உங்கள் தொகுப்பு சுருக்கமெதுவுமில்லாமல் சேமிக்கப்படும்.",
        "missingcommenttext": "கீழே சுருக்கமொன்றக் குறிப்பிடவும்.",
        "currentrev": "நடைமுறையிலுள்ள திருத்தம்",
        "currentrev-asof": "$1 இல் கடைசித் திருத்தம்",
        "revisionasof": "$1 இல் நிலவும் திருத்தம்",
-       "revision-info": "$2 பயனரால் செய்யப்பட்ட $1 அன்றிருந்தவாரான திருத்தம்",
+       "revision-info": "{{GENDER:$6|$2}} பயனரால் செய்யப்பட்ட $1 அன்றிருந்தவாரான திருத்தம்$7",
        "previousrevision": "←முந்தைய தொகுப்பு",
        "nextrevision": "புதிய தொகுப்பு→",
        "currentrevisionlink": "நடப்பிலுள்ள திருத்தம்",
        "shown-title": "ஒரு பக்கத்திற்கு $1 {{PLURAL:$1|முடிவு|முடிவுகள்}} காட்டவும்",
        "viewprevnext": "($1 {{int:pipe-separator}} $2) ($3) பக்கங்களைப் பார்.",
        "searchmenu-exists": "'''\"[[:$1]]\" என்னும் பெயருடைய பக்கம் இந்த விக்கியில் உள்ளது'''",
-       "searchmenu-new": "'''\"[[:$1]]\" பக்கத்தை இந்த விக்கியில் உருவாக்கவும்!'''",
+       "searchmenu-new": "<strong>\"[[:$1]]\" பக்கத்தை இந்த விக்கியில் உருவாக்கவும்!</strong> {{PLURAL:$2|0=|உங்கள் தேடல் மூலம் கண்டுபிடிக்கப்பட்டப்பக்கத்தைக் காண்க.| தேடல் முடிவுகளை காண்க.}}",
        "searchprofile-articles": "உள்ளடக்கப் பக்கங்களின் பட்டியல்",
        "searchprofile-images": "பல்லூடகம்",
        "searchprofile-everything": "எல்லாம்\n\nஅத்தனையும்",
        "action-editmywatchlist": "உங்கள் கவனிப்பு பட்டியலை தொகு",
        "action-viewmywatchlist": "உங்கள் கவனிப்பு பட்டியலை பார்",
        "nchanges": "{{PLURAL:$1|ஓர் மாற்றம்|$1 மாற்றங்கள்}}",
+       "enhancedrc-history": "வரலாறு",
        "recentchanges": "அண்மைய மாற்றங்கள்",
        "recentchanges-legend": "அண்மைய மாற்றங்களின் தேர்வுகள்",
        "recentchanges-summary": "இந்த விக்கிக்கு மிக அண்மையில் செய்யப்பட்ட மாற்றங்களை, இந்தப் பக்கத்தில் காணலாம்.",
        "recentchanges-label-minor": "இது ஒரு சிறு தொகுப்பு",
        "recentchanges-label-bot": "இந்த தொகுப்பானது ஒரு தானியங்கியால் செய்யப்பட்டதாகும்",
        "recentchanges-label-unpatrolled": "இந்த  தொகுப்பு  இன்னும் ரோந்திடப்படவில்லை",
-       "recentchanges-legend-newpage": "$1 - புதிய பக்கம்",
+       "recentchanges-label-plusminus": "இத்தனை பைட்டுகளுக்கு பக்கத்தின் அளவு மாற்றப்பட்டுள்ளது",
+       "recentchanges-legend-heading": "'''குறியீட்டு விளக்கம்:'''",
+       "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",
+       "rcshowhidemine-show": "காட்டு",
+       "rcshowhidemine-hide": "மறை",
        "rclinks": "கடைசி $2 நாட்களில் கடைசி $1 மாற்றங்களைக் காட்டு.<br />$3",
        "diff": "வேறுபாடு",
        "hist": "வரலாறு",
        "import-interwiki-history": "இப்பக்கத்தின் அனைத்து வரலாற்றுப் பதிப்புகளையும் நகலெடு",
        "import-interwiki-templates": "அனைத்து வார்ப்புருக்களையும் சேர்",
        "import-interwiki-submit": "இறக்கு",
-       "import-interwiki-namespace": "பின்வரும் பெயர்வெளிக்கு மாற்று:",
+       "import-mapping-default": "வழக்கமான இடங்களுக்கு இறக்குமதி செய்யவும்",
+       "import-mapping-namespace": "ஏதேனும் ஓர் பெயர்வெளிக்கு இறக்குமதி செய்யவும்:",
+       "import-mapping-subpage": "பின் வரும் பக்கத்தை துணை பக்கங்களாக இறக்குமதி செய்யவும்:",
        "import-upload-filename": "கோப்புப்பெயர்:",
        "import-comment": "கருத்து:",
        "importtext": "தயவுசெய்து மூல விக்கியிலிருந்து [[Special:Export|ஏற்றுமதி அம்சத்தைப்]] பயன்படுத்தி கோப்பை ஏற்றுமதி செய்யவும்.\nஉங்கள் கணினியில் இதை சேமித்து பிறகு அக்கோப்பை இங்கே பதிவேற்றவும்.",
        "tooltip-pt-mycontris": "உங்கள் பங்களிப்புக்களின் பட்டியல்",
        "tooltip-pt-login": "நீங்கள் புகுபதிகை செய்ய ஊக்குவிக்கப்படுகிறீர்கள், ஆனால் இது கட்டாயமன்று.",
        "tooltip-pt-logout": "விடுபதிகை",
+       "tooltip-pt-createaccount": "நீங்கள் ஒரு பயனர் கணக்கைத் துவங்கி உள்புக வரவேற்கப்படுகிறீர்கள்; எனினும் இது கட்டாயம் அல்ல.",
        "tooltip-ca-talk": "உள்ளடக்கப் பக்கம் தொடர்பான உரையாடல் பக்கம்",
        "tooltip-ca-edit": "நீங்கள் இப்பக்கத்தைத் தொகுக்க முடியும். \"முன்தோற்றம் காட்டு\" பொத்தானைப் பயன்படுத்திய பின்னர் உங்கள் மாற்றங்களை சேமிக்கவும்.",
        "tooltip-ca-addsection": "புதிய பகுதியைத் தொடங்கு",
        "revdelete-uname-unhid": "பயனர் பெயர் மறைக்கப்பட்டது நீக்கப்பட்டுள்ளது.",
        "revdelete-restricted": "நிர்வாகிகளுக்கு கட்டுப்பாடுகள் விதிக்கப்பட்டது",
        "revdelete-unrestricted": "நிர்வாகிகளின் கட்டுப்பாடுகள் நீக்கப்பட்டது",
-       "logentry-move-move": "$1 à®ªà®¯à®©à®°à®¾à®²à¯\8d $3, $4 à®\8eனà¯\8dà®± à®¤à®²à¯\88பà¯\8dபà¯\81à®\95à¯\8dà®\95à¯\81 à®¨à®\95à®°à¯\8dதà¯\8dதபà¯\8dபà®\9fà¯\8dà®\9fà¯\81ளà¯\8dளதà¯\81.",
+       "logentry-move-move": "$1 à®ªà®\95à¯\8dà®\95à®®à¯\8d $3-à®\90 $4à®\95à¯\8dà®\95à¯\81 {{GENDER:$2|நà®\95à®°à¯\8dதà¯\8dதினாரà¯\8d}}",
        "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-newusers-create": "$1 à®\92à®°à¯\81 à®ªà¯\81திய à®ªà®¯à®©à®°à¯\8d à®\95ணà®\95à¯\8dà®\95à¯\88 à®\89à®°à¯\81வாà®\95à¯\8dà®\95ியà¯\81ளà¯\8dளாரà¯\8d.",
+       "logentry-newusers-create": "$1 à®ªà¯\81திய à®ªà®¯à®©à®°à¯\8d à®\95ணà®\95à¯\8dà®\95à¯\81 à®\89à®°à¯\81வாà®\95à¯\8dà®\95பà¯\8dபà®\9fà¯\8dà®\9fà¯\81ளà¯\8dளதà¯\81.",
        "logentry-newusers-create2": "$3 பயனர் கணக்கினை $1 உருவாக்கினார்",
        "logentry-newusers-autocreate": "பயனர் கணக்கு $1 தானாக உருவாக்கப்பட்டது",
+       "logentry-upload-upload": "$1 $3ஐ {{GENDER:$2|பதிவேற்றினார்}}",
        "rightsnone": "(எதுவுமில்லை)",
        "revdelete-summary": "தொகுப்பு சுருக்கத்தை",
        "feedback-adding": "பக்கத்தில் கருத்தைச் சேர்க்கிறது...",
index 9838a43..80b656d 100644 (file)
        "revdelete-unsuppress": "పునస్థాపిత కూర్పులపై నిబంధనలను తీసివెయ్యి",
        "revdelete-log": "కారణం:",
        "revdelete-submit": "ఎంచుకున్న {{PLURAL:$1|కూర్పుకు|కూర్పులకు}} ఆపాదించు",
-       "revdelete-success": "<strong>కూర్పు కనబడే విధానాన్ని జయప్రదంగా తాజాకరించాం.</strong>",
-       "revdelete-failure": "<strong>కూర్పు కనబడే పద్ధతిని తాజాపరచలేకపోయాం:</strong>\n$1",
-       "logdelete-success": "<strong>ఘటన కనబడే విధానాన్ని జయప్రదంగా సెట్ చేసాం.</strong>",
+       "revdelete-success": "కూర్పు కనబడే విధానాన్ని జయప్రదంగా తాజాకరించాం.",
+       "revdelete-failure": "కూర్పు కనబడే పద్ధతిని తాజాపరచలేకపోయాం:\n$1",
+       "logdelete-success": "ఘటన కనబడే విధానాన్ని జయప్రదంగా అమర్చాం.",
        "logdelete-failure": "'''చిట్టా కనబడే పద్ధతిని అమర్చలేకపోయాం:'''\n$1",
        "revdel-restore": "దృశ్యతని మార్చు",
        "pagehist": "పేజీ చరిత్ర",
        "import-interwiki-history": "ఈ పేజీ యొక్క అన్ని చారిత్రక కూర్పులను కాపీ చెయ్యి",
        "import-interwiki-templates": "అన్ని మూసలను ఉంచు",
        "import-interwiki-submit": "దిగుమతించు",
-       "import-interwiki-namespace": "లక్ష్యిత నేంస్పేసు:",
-       "import-interwiki-rootpage": "గమ్యస్థానపు మూలపు పేజీ (ఐచ్ఛికం):",
        "import-upload-filename": "పైలుపేరు:",
        "import-comment": "వ్యాఖ్య:",
        "importtext": "[[Special:Export|ఎగుమతి ఉపకరణాన్ని]] ఉపయోగించి, ఈ ఫైలుని  మూల వికీ నుంచి ఎగుమతి చెయ్యండి.\nదాన్ని మీ కంప్యూటర్లో భద్రపరచి, ఆపై ఇక్కడికి ఎక్కించండి.",
index 44b6978..a337bdd 100644 (file)
        "revdelete-unsuppress": "Хотимаи маҳдудиятҳо дар мавриди нусхаҳои интихобшуда",
        "revdelete-log": "Сабаб:",
        "revdelete-submit": "Амалӣ кардан бар {{PLURAL:$1|нусхаи|нусхаҳои}} интихобшуда",
-       "revdelete-success": "<strong>Тағйири намоёнии нусха бо муваффақият анҷом шуд.</strong>",
+       "revdelete-success": "Тағйири намоёнии нусха бо муваффақият анҷом шуд.",
        "logdelete-success": "'''Тағйири намоёнии маврид бо муваффақият анҷом шуд.'''",
        "revdel-restore": "Тағйири падидорӣ",
        "pagehist": "Таърихи саҳифа",
        "import-interwiki-text": "Як вики ва як номи саҳифаро интихоб кунед, то иттилоот аз он ворид шавад.\nТаърихи нусхаҳо ва номҳои вироишкунандагон сабт хоҳанд монд.\nИттилооти марбут ба ворид кардани саҳифаҳо дар [[Special:Log/import|гузоришҳои воридот]] сабт хоҳад шуд.",
        "import-interwiki-history": "Тамоми таърихи нусхаҳои ин саҳифа интиқол дода шавад",
        "import-interwiki-submit": "Ворид шавад",
-       "import-interwiki-namespace": "Фазои номи мақсад:",
        "import-upload-filename": "Номи парванда:",
        "import-comment": "Тавзеҳ:",
        "importtext": "Лутфан парвандаро аз вики манбаъ содир кунед, аз тариқи саҳифа [[Special:Export|абзори содирот]].\nПас онро ба компютератон захира карда инҷо боргузорӣ кунед.",
index c3dff49..760949e 100644 (file)
        "import-interwiki-text": "Jak viki va jak nomi sahifaro intixob kuned, to ittiloot az on vorid şavad.\nTa'rixi nusxaho va nomhoi viroişkunandagon sabt xohand mond.\nIttilooti marbut ba vorid kardani sahifaho dar [[Special:Log/import|guzorişhoi voridot]] sabt xohad şud.",
        "import-interwiki-history": "Tamomi ta'rixi nusxahoi in sahifa intiqol doda şavad",
        "import-interwiki-submit": "Vorid şavad",
-       "import-interwiki-namespace": "Fazoi nomi maqsad:",
        "import-upload-filename": "Nomi parvanda:",
        "import-comment": "Tavzeh:",
        "importtext": "Lutfan parvandaro az viki manba' sodir kuned, az tariqi sahifa [[Special:Export|abzori sodirot]].\nPas onro ba kompjuteraton zaxira karda inço borguzorī kuned.",
        "import-invalid-interwiki": "Az vikiji muşaxxasşuda nametavon voridot kard.",
        "importlogpage": "Voridi guzorişho",
        "importlogpagetext": "Vorid kardani sahifaho bo hamrohi ta'rixcai viroişi onho az vikihoi digar.",
-       "import-logentry-upload": "[[$1]] az tariqi borguzoriji parvanda, vorid şud",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|nusxa|nusxa}}",
-       "import-logentry-interwiki": "$1 transvikişuda",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|nusxa|nusxa}} az $2",
        "tooltip-pt-userpage": "Sahifai korbariji şumo",
        "tooltip-pt-anonuserpage": "Sahifai korbari IP, ki bo on şumo viroiş mekuned",
index 0988de6..b75b945 100644 (file)
        "disclaimers": "ข้อปฏิเสธความรับผิดชอบ",
        "disclaimerpage": "Project:ข้อปฏิเสธความรับผิดชอบทั่วไป",
        "edithelp": "คำอธิบายการแก้ไข",
+       "helppage-top-gethelp": "คำอธิบาย",
        "mainpage": "หน้าหลัก",
        "mainpage-description": "หน้าหลัก",
        "policy-url": "Project:นโยบาย",
        "content-model-text": "ข้อความธรรมดา",
        "content-model-javascript": "จาวาสคริปต์",
        "content-model-css": "CSS",
-       "duplicate-args-category": "หà¸\99à¹\89าà¸\97ีà¹\88à¹\83à¸\8aà¹\89อารà¹\8cà¸\81ิวà¹\80มà¸\99à¸\95à¹\8cà¸\88ำลอà¸\87ในการเรียกแม่แบบ",
+       "duplicate-args-category": "หà¸\99à¹\89าà¸\97ีà¹\88à¹\83à¸\8aà¹\89อารà¹\8cà¸\81ิวà¹\80มà¸\99à¸\95à¹\8cà¸\8bà¹\89ำในการเรียกแม่แบบ",
        "expensive-parserfunction-warning": "<strong>คำเตือน:</strong> หน้านี้มีการเรียกใช้ฟังก์ชันแจงส่วนมากเกินไป\n\nหน้านี้ควรมีการเรียกใช้น้อยกว่า $2  ครั้ง แต่ปัจจุบันมีการเรียกใช้ $1 ครั้ง",
        "expensive-parserfunction-category": "หน้าที่มีการเรียกใช้ฟังก์ชันแจงส่วนมากเกินไป",
        "post-expand-template-inclusion-warning": "<strong>คำเตือน:</strong> แม่แบบที่นำมารวมมีขนาดใหญ่เกินไป\nจะไม่รวมบางแม่แบบเข้ามา",
        "revdelete-unsuppress": "ลบการจำกัดแก่รุ่นปรับปรุงที่กู้คืน",
        "revdelete-log": "เหตุผล:",
        "revdelete-submit": "ใช้กับรุ่นปรับปรุง{{PLURAL:$1|}}ที่เลือก",
-       "revdelete-success": "<strong>ปรับทัศนวิสัยรุ่นปรับปรุงสำเร็จ</strong>",
-       "revdelete-failure": "<strong>ไม่สามารถปรับทัศนวิสัยของรุ่นปรับปรุงได้:</strong>\n$1",
-       "logdelete-success": "<strong>ตั้งทัศนวิสัยปูมสำเร็จ</strong>",
-       "logdelete-failure": "<strong>ไม่สามารถตั้งทัศนวิสัยของปูม:</strong>\n$1",
+       "revdelete-success": "ปรับทัศนวิสัยรุ่นปรับปรุงสำเร็จ",
+       "revdelete-failure": "ไม่สามารถปรับทัศนวิสัยของรุ่นปรับปรุงได้:\n$1",
+       "logdelete-success": "ตั้งทัศนวิสัยปูมสำเร็จ",
+       "logdelete-failure": "ไม่สามารถตั้งทัศนวิสัยของปูม:\n$1",
        "revdel-restore": "เปลี่ยนทัศนวิสัย",
        "pagehist": "ประวัติหน้า",
        "deletedhist": "ประวัติที่ถูกลบ",
        "namespace": "เนมสเปซ:",
        "invert": "กลับการเลือก",
        "tooltip-invert": "เลือกกล่องนี้เพื่อซ่อนการเปลี่ยนแปลงไปยังหน้าในเนมเปซที่เลือก (และเนมสเปซที่เกี่ยวข้องถ้าเลือก)",
+       "tooltip-whatlinkshere-invert": "เลือกกล่องนี้เพื่อซ่อนลิงก์จากหน้าในเนมสเปซที่เลือก",
        "namespace_association": "เนมสเปซที่เกี่ยวข้อง",
        "tooltip-namespace_association": "เลือกกล่องนี้เพื่อรวมเนมสเปซพูดคุยหรือหัวข้อที่เกี่ยวข้องกับเนมสเปซที่เลือกด้วย",
        "blanknamespace": "(หลัก)",
        "import-interwiki-history": "คัดลอกประวัติทั้งหมดในหน้านี้",
        "import-interwiki-templates": "รวมแม่แบบทั้งหมด",
        "import-interwiki-submit": "นำเข้า",
-       "import-interwiki-namespace": "เนมสเปซปลายทาง:",
        "import-upload-filename": "ชื่อไฟล์:",
        "import-comment": "ความเห็น:",
        "importtext": "กรุณาส่งออกไฟล์จากวิกิต้นทางโดยใช้[[Special:Export|เครื่องมือส่งออก]]\nบันทึกลงคอมพิวเตอร์ของคุณ และอัปโหลดที่นี่",
        "pageinfo-protect-cascading-yes": "ใช่",
        "pageinfo-protect-cascading-from": "การล็อกสืบทอดจาก",
        "pageinfo-category-info": "สารสนเทศหมวดหมู่",
+       "pageinfo-category-total": "จำนวนสมาชิกรวม",
        "pageinfo-category-pages": "จำนวนหน้า",
        "pageinfo-category-subcats": "จำนวนหมวดหมู่ย่อย",
        "pageinfo-category-files": "จำนวนไฟล์",
index ce14aea..9d7ebe9 100644 (file)
        "import-interwiki-history": "Bu sahypa üçin ähli geçmiş wersiýalary göçür",
        "import-interwiki-templates": "Ähli şablonlary giriz",
        "import-interwiki-submit": "Importirle",
-       "import-interwiki-namespace": "Niýetlenilýän at giňişligi:",
        "import-upload-filename": "Faýlyň ady:",
        "import-comment": "Teswir:",
        "importtext": "Faýly düýp wikiden [[Special:Export|eksportirleme funksiýasyny]] ulanmak arkaly eksportirläň.\nKompýuteriňize ýazdyryň we şu ýere ýükläň.",
        "import-invalid-interwiki": "Görkezilen wikiden importirläp bolmaýar",
        "importlogpage": "Import gündeligi",
        "importlogpagetext": "Özgerdiş geçmişli sahypalaryň başga wikilerden administratiw importirlenmeleri",
-       "import-logentry-upload": "[[$1]] faýl ýüklemesi arkaly importirlendi",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|wersiýa|wersiýa}}",
-       "import-logentry-interwiki": "$1 transwikilendi",
        "import-logentry-interwiki-detail": "$2 sahypasyndan $1 {{PLURAL:$1|wersiýa|wersiýa}}",
        "tooltip-pt-userpage": "Ulanyjy sahypaňyz",
        "tooltip-pt-anonuserpage": "Redaktirleýän IP-ňiz üçin ulanyjy sahypasy",
        "expand_templates_remove_comments": "Teswirleri aýyr",
        "expand_templates_remove_nowiki": "Netijelerde <nowiki> teglerini bökdäň",
        "expand_templates_generate_xml": "XML ýygnama agajyny görkez",
-       "expand_templates_preview": "Deslapky syn"
+       "expand_templates_preview": "Deslapky syn",
+       "special-characters-group-latin": "Latyn",
+       "special-characters-group-latinextended": "Giňeldilen latyn",
+       "special-characters-group-ipa": "HFE (IPA)",
+       "special-characters-group-symbols": "Simwollar",
+       "special-characters-group-greek": "Grek",
+       "special-characters-group-cyrillic": "Kirillisa",
+       "special-characters-group-arabic": "Arap",
+       "special-characters-group-persian": "Parsça",
+       "special-characters-group-hebrew": "Iwrit",
+       "special-characters-group-bangla": "Bengalça",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Singal",
+       "special-characters-group-gujarati": "Güjerat",
+       "special-characters-group-thai": "Taýlandça",
+       "special-characters-group-lao": "Laosça",
+       "special-characters-group-khmer": "Khmerçe"
 }
index 649f8e9..d3d5588 100644 (file)
        "import-interwiki-history": "Kopyahin ang lahat ng mga bersyon ng kasaysayan para sa pahinang ito",
        "import-interwiki-templates": "Isama ang lahat ng mga suleras",
        "import-interwiki-submit": "Mag-angkat",
-       "import-interwiki-namespace": "Kapupuntahang espasyo ng pangalan:",
-       "import-interwiki-rootpage": "Ugat na pahina ng kapupuntahan (maaaring wala ito):",
        "import-upload-filename": "Pangalan ng talaksan:",
        "import-comment": "Komento:",
        "importtext": "Pakiluwas ang talaksan magmula sa pinagmulang wiki na ginagamit ang [[Special:Export|kasangkapang pangluwas]].  \nSagipin mo ito sa iyong kompyuter at papaitaas na ikarga ito rito.",
        "import-rootpage-nosubpage": "Ang puwang ng pangalan na \"$1\" ng ugat na pahina ay hindi nagpapahintulot ng kabahaging mga pahina.",
        "importlogpage": "Talaan ng pagaangkat",
        "importlogpagetext": "Mga administratibong pagaangkat ng mga pahinang may kasaysayan ng pagbabago mula sa ibang mga wiki.",
-       "import-logentry-upload": "inangkat ang [[$1]] sa pamamagitan ng pagkarga ng talaksan (file upload)",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|pagbabago|mga pagbabago}}",
-       "import-logentry-interwiki": "Na-i-transwiki na ang $1",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|pagbabago|mga pagbabago}} mula sa $2",
        "javascripttest": "Pagsubok sa JavaScript",
        "javascripttest-pagetext-noframework": "Nakalaan ang pahinang ito para sa pagpapatakbo ng mga pagsubok ng JavaScript.",
        "expand_templates_remove_comments": "Tanggalin ang mga puna (kumento)",
        "expand_templates_remove_nowiki": "Pigilin ang mga tatak na <nowiki> sa loob ng resulta",
        "expand_templates_generate_xml": "Ipakita ang puno na pambanghay ng XML",
-       "expand_templates_preview": "Paunang tingin"
+       "expand_templates_preview": "Paunang tingin",
+       "special-characters-group-latin": "Latin",
+       "special-characters-group-latinextended": "Pinalawig na Latin",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Mga sagisag",
+       "special-characters-group-greek": "Griyego",
+       "special-characters-group-cyrillic": "Siriliko",
+       "special-characters-group-arabic": "Arabe",
+       "special-characters-group-arabicextended": "Pinalawig na Arabe",
+       "special-characters-group-persian": "Persyano",
+       "special-characters-group-hebrew": "Hebreo",
+       "special-characters-group-bangla": "Bangla",
+       "special-characters-group-tamil": "Tamil",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Sinhala",
+       "special-characters-group-gujarati": "Guharati",
+       "special-characters-group-devanagari": "Devanagari",
+       "special-characters-group-thai": "Thai",
+       "special-characters-group-lao": "Lao",
+       "special-characters-group-khmer": "Khmer"
 }
index 63528e3..7271f93 100644 (file)
                        "Ayrıntılı Bilgi",
                        "Gokalpselamet",
                        "Macofe",
-                       "Nighteagle2000"
+                       "Nighteagle2000",
+                       "Watermelon juice",
+                       "Ömer Berkay"
                ]
        },
        "tog-underline": "Bağlantıların altını çiz:",
        "tog-hideminor": "Son değişiklikler sayfasında küçük değişiklikleri gizle",
-       "tog-hidepatrolled": "Son değişikliklerde gözden geçirilen düzenlemeleri gizle",
-       "tog-newpageshidepatrolled": "Kontrol edilmiş sayfaları yeni sayfalar listesinde gizle",
-       "tog-extendwatchlist": "İzleme listesini sadece en son değil, tüm değişiklikleri göstermek için genişlet",
-       "tog-usenewrc": "Son değişiklikler sayfasındaki ve izleme listesindeki değişiklikleri gruplandır",
+       "tog-hidepatrolled": "Son değişikliklerde devriye görmüş değişiklikleri gizle",
+       "tog-newpageshidepatrolled": "Yeni sayfalar listesinde, devriye görmüş sayfaları gizle",
+       "tog-extendwatchlist": "İzleme listesini sadece en son değil, tüm değişiklikleri göstermek üzere genişlet",
+       "tog-usenewrc": "Son değişiklikler sayfasındaki ve izleme listesindeki değişiklikleri sayfalara gruplandır",
        "tog-numberheadings": "Başlıkları otomatik numaralandır",
        "tog-showtoolbar": "Düzenleme araç çubuğunu göster",
        "tog-editondblclick": "Çift tıklayarak sayfaları düzenle",
-       "tog-editsectiononrightclick": "Bölüm başlığına sağ tıklayarak bölümleri düzenleyebilme olanağı ver",
-       "tog-watchcreations": "Açtığım sayfaları ve yüklediğim dosyaları izleme listeme ekle",
+       "tog-editsectiononrightclick": "Bölüm başlığına sağ tıklayarak bölüm düzenleyebilmeyi etkinleştir",
+       "tog-watchcreations": "Oluşturduğum sayfaları ve yüklediğim dosyaları izleme listeme ekle",
        "tog-watchdefault": "Düzenleme yaptığım sayfaları ve dosyaları izleme listeme ekle",
        "tog-watchmoves": "Taşıdığım sayfaları ve dosyaları izleme listeme ekle",
        "tog-watchdeletion": "Sildiğim sayfaları ve dosyaları izleme listeme ekle",
-       "tog-watchrollback": "Eski haline getirme kullandığım sayfaları izleme listeme ekle",
-       "tog-minordefault": "Varsayılan olarak bütün düzenlemeleri küçük olarak işaretle",
-       "tog-previewontop": "Ön izlemeyi düzenleme kutusunun üstünde göster",
+       "tog-watchrollback": "Geridönüş yaptığım sayfaları izleme listeme ekle",
+       "tog-minordefault": "Varsayılan olarak, bütün düzenlemelerimi küçük değişiklik olarak işaretle",
+       "tog-previewontop": "Ön izlemeyi, düzenleme kutusunun üstünde göster",
        "tog-previewonfirst": "İlk düzenlemede ön izlemeyi göster",
-       "tog-enotifwatchlistpages": "İzleme listemdeki bir sayfanın ya da dosyanın değiştirilmesi durumunda bana e-posta gönder",
+       "tog-enotifwatchlistpages": "İzleme listemdeki bir sayfa veya dosya değiştirilirse bana e-posta gönder",
        "tog-enotifusertalkpages": "Kullanıcı mesaj sayfamda değişiklik olduğunda bana e-posta gönder",
-       "tog-enotifminoredits": "Sayfalardaki ve dosyalardaki küçük değişikliklerde bana e-posta gönder",
-       "tog-enotifrevealaddr": "E-posta adresimi bildiri postalarımda göster.",
+       "tog-enotifminoredits": "Sayfalardaki ve dosyalardaki küçük değişikliklerde de bana e-posta gönder",
+       "tog-enotifrevealaddr": "Bildirim postalarında benim eposta adresimi açıkça göster",
        "tog-shownumberswatching": "İzleyen kullanıcı sayısını göster",
        "tog-oldsig": "Mevcut imza:",
        "tog-fancysig": "İmzaya vikimetin muamelesi yap (otomatik bir bağlantı olmadan)",
        "tog-uselivepreview": "Canlı ön izlemeyi kullan",
        "tog-forceeditsummary": "Özeti boş bıraktığımda beni uyar",
-       "tog-watchlisthideown": "İzleme listemden düzenlemelerimi gizle",
-       "tog-watchlisthidebots": "İzleme listemden bot değişikliklerini gizle",
-       "tog-watchlisthideminor": "İzleme listemden küçük değişiklikleri gizle",
-       "tog-watchlisthideliu": "İzleme listemde, kayıtlı kullanıcılar tarafından yapılan değişiklikleri gösterme",
+       "tog-watchlisthideown": "İzleme listemde benim değişkliklerimi gizle",
+       "tog-watchlisthidebots": "İzleme listemde bot değişikliklerini gizle",
+       "tog-watchlisthideminor": "İzleme listemde küçük değişiklikleri gizle",
+       "tog-watchlisthideliu": "İzleme listemde, kayıtlı kullanıcılar tarafından yapılan değişiklikleri gizle",
        "tog-watchlisthideanons": "İzleme listemde, anonim kullanıcılar tarafından yapılan değişiklikleri gizle",
-       "tog-watchlisthidepatrolled": "İzleme listesinde kontrol edilmiş değişiklikleri gizle",
-       "tog-ccmeonemails": "Diğer kullanıcılara gönderdiğim e-postaların kopyalarını bana da gönder",
-       "tog-diffonly": "Sayfa içeriğini sürüm farklarının altında gösterme",
+       "tog-watchlisthidepatrolled": "İzleme listesinde, devriye görmüş değişiklikleri gizle",
+       "tog-ccmeonemails": "Diğer kullanıcılara gönderdiğim e-postaların bir kopyasını bana da gönder",
+       "tog-diffonly": "Sayfa içeriğini, sürüm farklarının altında gösterme",
        "tog-showhiddencats": "Gizli kategorileri göster",
-       "tog-norollbackdiff": "Geridönüş uygulandıktan sonra değişikliği atla",
-       "tog-useeditwarning": "Kaydedilmemiş değişikliğe sahip bir değişiklik sayfasından çıkarken beni uyar",
-       "tog-prefershttps": "Oturumu açarken her zaman güvenli bağlantı kullan",
+       "tog-norollbackdiff": "Geri döndürme uygulandıktan sonra değişiklik görünümünü es geç",
+       "tog-useeditwarning": "Yaptığım değişiklikleri kaydetmeden sayfayı kapatırken beni uyar",
+       "tog-prefershttps": "Oturum açarken her zaman güvenli bağlantı kullan",
        "underline-always": "Daima",
        "underline-never": "Asla",
        "underline-default": "Tema ya da tarayıcı varsayılanı",
        "category_header": "\"$1\" kategorisindeki sayfalar",
        "subcategories": "Alt kategoriler",
        "category-media-header": "\"$1\" kategorisindeki dosyalar",
-       "category-empty": "''Bu kategoride henüz herhangi bir sayfa ya da dosya bulunmamaktadır.''",
+       "category-empty": "<em>Bu kategoride henüz herhangi bir sayfa ya da dosya bulunmamaktadır.</em>",
        "hidden-categories": "{{PLURAL:$1|Gizli kategori|Gizli kategoriler}}",
        "hidden-category-category": "Gizli kategoriler",
-       "category-subcat-count": "{{PLURAL:$2|Bu kategori sadece aşağıdaki alt kategoriyi içermektedir.|Bu kategoride aşağıdaki {{PLURAL:$1|alt kategori|$1 alt kategorisi}} dahil $2 alt kategorisi vardır.}}",
+       "category-subcat-count": "{{PLURAL:$2|Bu kategori sadece aşağıdaki alt kategoriyi içermektedir.|Bu kategoride aşağıdaki {{PLURAL:$1|alt kategori|$1 alt kategori}} dahil $2 alt kategori vardır.}}",
        "category-subcat-count-limited": "Bu kategori aşağıdaki {{PLURAL:$1|alt kategoriye|$1 alt kategoriye}} sahiptir.",
-       "category-article-count": "{{PLURAL:$2|Bu kategori sadece aşağıdaki sayfayı içermektedir.|Toplam $2 taneden, aşağıdaki {{PLURAL:$1|sayfa|$1 sayfalar}} bu kategoridedir.}}",
-       "category-article-count-limited": "Bu kategoride {{PLURAL:$1|sayfa|$1 sayfalar}} bulunmaktadır.",
-       "category-file-count": "{{PLURAL:$2|Bu kategori sadece aşağıdaki dosyayı içerir.|Toplam $2 taneden, aşağıdaki {{PLURAL:$1|dosya|$1 dosyalar}} bu kategoridedir.}}",
-       "category-file-count-limited": "Aşağıdaki {{PLURAL:$1|dosya|$1 dosyalar}} mevcut kategoridedir.",
+       "category-article-count": "{{PLURAL:$2|Bu kategori sadece aşağıdaki sayfayı içermektedir.|Toplam $2 taneden, aşağıdaki {{PLURAL:$1|sayfa|$1 sayfa}} bu kategoridedir.}}",
+       "category-article-count-limited": "Bu kategoride {{PLURAL:$1|sayfa|$1 sayfa}} bulunmaktadır.",
+       "category-file-count": "{{PLURAL:$2|Bu kategori sadece aşağıdaki dosyayı içerir.|Toplam $2 taneden, aşağıdaki {{PLURAL:$1|dosya|$1 dosya}} bu kategoridedir.}}",
+       "category-file-count-limited": "Aşağıdaki {{PLURAL:$1|dosya|$1 dosya}} bu kategoridedir.",
        "listingcontinuesabbrev": "(devam)",
-       "index-category": "Dizinli sayfalar",
-       "noindex-category": "Dizinli olmayan sayfalar",
+       "index-category": "Dizinlenmiş sayfalar",
+       "noindex-category": "Dizinlenmemiş sayfalar",
        "broken-file-category": "Bozuk dosya bağlantıları içeren sayfalar",
        "categoryviewer-pagedlinks": "($1) ($2)",
        "about": "Hakkında",
        "article": "İçerik sayfası",
        "newwindow": "(yeni bir pencerede açılır)",
        "cancel": "İptal",
-       "moredotdotdot": "Daha...",
+       "moredotdotdot": "Daha...",
        "morenotlisted": "Bu liste tam değildir.",
        "mypage": "Sayfa",
        "mytalk": "Mesaj",
        "deletethispage": "Bu sayfayı sil",
        "undeletethispage": "Bu sayfanın silme işlemini geri al",
        "undelete_short": "$1 değişikliği geri getir",
-       "viewdeleted_short": "{{PLURAL:$1|bir silinmiş değişiklik|$1 silinmiş değişiklikleri}} görüntüle.",
+       "viewdeleted_short": "{{PLURAL:$1|bir silinmiş değişikliği|$1 silinmiş değişikliği}} görüntüle.",
        "protect": "Korumaya al",
        "protect_change": "değiştir",
-       "protectthispage": "Sayfayı koruma altına al",
+       "protectthispage": "Bu sayfayı koruma altına al",
        "unprotect": "Korumayı değiştir",
        "unprotectthispage": "Bu sayfanın korumasını değiştir",
        "newpage": "Yeni sayfa",
        "views": "Görünümler",
        "toolbox": "Araçlar",
        "userpage": "Kullanıcı sayfasını görüntüle",
-       "projectpage": "Proje sayfasına bak",
+       "projectpage": "Proje sayfasını görüntüle",
        "imagepage": "Dosya sayfasını görüntüle",
-       "mediawikipage": "Mesaj sayfasını göster",
+       "mediawikipage": "Mesaj sayfasını görüntüle",
        "templatepage": "Şablon sayfasını görüntüle",
-       "viewhelppage": "Yardım sayfasına bak",
-       "categorypage": "Kategori sayfasını göster",
-       "viewtalkpage": "Tartışma sayfasına git",
+       "viewhelppage": "Yardım sayfasına görüntüle",
+       "categorypage": "Kategori sayfasını görüntüle",
+       "viewtalkpage": "Tartışma sayfasını görüntüle",
        "otherlanguages": "Diğer dillerde",
        "redirectedfrom": "($1 sayfasından yönlendirildi)",
        "redirectpagesub": "Yönlendirme sayfası",
        "redirectto": "Şuraya yönlendir:",
        "lastmodifiedat": "Bu sayfa son olarak $1, $2 tarihinde güncellenmiştir.",
-       "viewcount": "Bu sayfaya {{PLURAL:$1|bir|$1 }} defa erişilmiş.",
+       "viewcount": "Bu sayfaya {{PLURAL:$1|bir|$1}} defa erişilmiş.",
        "protectedpage": "Korumalı sayfa",
-       "jumpto": "Atla:",
+       "jumpto": "Şuraya atla:",
        "jumptonavigation": "kullan",
        "jumptosearch": "ara",
-       "view-pool-error": "Üzgünüz, sunucular şu anda aşırı yüklendi.\nBirçok kullanıcı bu sayfayı görüntülemeye çalışıyor.\nLütfen bu sayfaya  tekrar erişmeyi denemeden önce biraz bekleyin.\n\n$1",
-       "generic-pool-error": "Üzgünüz, sunucular şu anda aşırı yüklendi.\nBirçok kullanıcı bu sayfayı görüntülemeye çalışıyor.\nLütfen bu sayfaya  tekrar erişmeyi denemeden önce biraz bekleyin.\n\n$1",
+       "view-pool-error": "Üzgünüz, şu an sunucular aşırı yüklendi.\nÇok fazla kullanıcı bu sayfayı görüntülemeye çalışıyor.\nLütfen bu sayfaya tekrar erişmeyi denemeden önce biraz bekleyin.\n\n$1",
+       "generic-pool-error": "Üzgünüz, şu an sunucular aşırı yüklendi.\nÇok fazla kullanıcı bu sayfayı görüntülemeye çalışıyor.\nLütfen bu sayfaya  tekrar erişmeyi denemeden önce biraz bekleyin.",
        "pool-timeout": "Kilit için zaman bitimi bekleniyor",
        "pool-queuefull": "Havuz sırası dolu",
        "pool-errorunknown": "Bilinmeyen hata",
        "poolcounter-usage-error": "Kullanım hatası: $1",
        "aboutsite": "{{SITENAME}} hakkında",
        "aboutpage": "Project:Hakkında",
-       "copyright": "Aksi belirtilmedikçe içerik $1 altındadır.",
+       "copyright": "Aksi belirtilmedikçe içeriğin kullanımı $1 lisansı kapsamında uygundur.",
        "copyrightpage": "{{ns:project}}:Telif hakları",
        "currentevents": "Güncel olaylar",
        "currentevents-url": "Project:Güncel olaylar",
        "youhavenewmessagesfromusers": "{{PLURAL:$3|Başka bir kullanıcıdan|$3 kullanıcıdan}} $1 var ($2).",
        "youhavenewmessagesmanyusers": "Birçok kullanıcıdan $1 var ($2).",
        "newmessageslinkplural": "{{PLURAL:$1|yeni mesajınız|yeni mesajlarınız}}",
-       "newmessagesdifflinkplural": "son {{PLURAL:$1|değişiklik|değişiklikler}}",
+       "newmessagesdifflinkplural": "son {{PLURAL:$1|değişiklik|değişiklik}}",
        "youhavenewmessagesmulti": "$1'de yeni mesajınız var",
-       "editsection": "düzenle",
+       "editsection": "değiştir",
        "editold": "değiştir",
        "viewsourceold": "kaynağı gör",
        "editlink": "değiştir",
        "viewsourcelink": "kaynağı gör",
        "editsectionhint": "Değiştirilen bölüm: $1",
-       "toc": "Konu başlıkları",
+       "toc": "İçindekiler",
        "showtoc": "göster",
        "hidetoc": "gizle",
        "collapsible-collapse": "Daralt",
        "viewdeleted": "$1 gör?",
        "restorelink": "{{PLURAL:$1|bir silinmiş değişikliği|$1 silinmiş değişikliği}}",
        "feedlinks": "Besleme:",
-       "feed-invalid": "Hatalı besleme tipi.",
-       "feed-unavailable": "Sendikalaşma özet akışları geçerli değil.",
+       "feed-invalid": "Hatalı abonelik beslemesi tipi.",
+       "feed-unavailable": "Birleştirme beslemeleri kullanılabilir değil.",
        "site-rss-feed": "$1 RSS Aboneliği",
        "site-atom-feed": "$1 Atom beslemesi",
-       "page-rss-feed": "\"$1\" RSS Beslemesi",
+       "page-rss-feed": "\"$1\" RSS beslemesi",
        "page-atom-feed": "\"$1\" Atom beslemesi",
        "feed-atom": "Atom",
        "feed-rss": "RSS",
        "nstab-category": "Kategori",
        "nosuchaction": "Böyle bir eylem yok",
        "nosuchactiontext": "URL tarafından tanımlanan eylem geçersiz.\nURL'yi yanlış yazmış olabilir, ya da doğru olmayan bir bağlantıyı takip etmiş olabilirsiniz.\nBu, {{SITENAME}} sitesindeki bir hatayı da belirtebilir.",
-       "nosuchspecialpage": "Bu isimde bir özel sayfa yok",
-       "nospecialpagetext": "Bulunmayan bir özel sayfaya girdiniz. Varolan tüm özel sayfaları [[Special:SpecialPages|özel sayfalar]] sayfasında görebilirsiniz.",
+       "nosuchspecialpage": "Böyle bir özel sayfa yok",
+       "nospecialpagetext": "<strong>Mevcut olmayan bir özel sayfayı istediniz.</strong>\n\nVarolan tüm özel sayfaları [[Special:SpecialPages|özel sayfalar]] sayfasında görebilirsiniz.",
        "error": "Hata",
        "databaseerror": "Veritabanı hatası",
-       "databaseerror-text": "Bir veritabanı sorgu hatası oluştu.\nBu yazılım bir hata gösteriyor olabilir.",
+       "databaseerror-text": "Bir veritabanı sorgu hatası oluştu.\nBu, yazılımdaki bir hatadan kaynaklanıyor olabilir.",
        "databaseerror-textcl": "Bir veritabanı sorgu hatası oluştu.",
        "databaseerror-query": "Sorgu: $1",
        "databaseerror-function": "Fonksiyon: $1",
        "databaseerror-error": "Hata: $1",
-       "laggedslavemode": "Uyarı: Sayfa son güncellemeleri içermeyebilir.",
-       "readonly": "Veritabanı kilitlendi",
+       "laggedslavemode": "<strong>Uyarı:</strong> Sayfa son güncellemeleri içermeyebilir.",
+       "readonly": "Veritabanı koruma altına alındı",
        "enterlockreason": "Koruma için bir neden belirtin. Korumanın ne zaman kaldırılacağına dair tahmini bir tarih eklemeyi unutmayın.",
-       "readonlytext": "Veritabanı olağan bakım/onarım çalışmaları sebebiyle, geçici olarak giriş ve değişiklik yapmaya kapatılmıştır. Kısa süre sonra normale dönecektir.\n\nVeritabanını kilitleyen operatörün açıklaması: $1",
+       "readonlytext": "Veritabanı, muhtemelen olağan bakım/onarım çalışmaları sebebiyle, geçici olarak giriş ve değişiklik yapmaya kapatılmıştır. Çalışmaların ardından normale dönecektir.\n\nVeritabanını kilitleyen yöneticinin açıklaması şu şekilde: $1",
        "missing-article": "Veritabanında bulunması istenen \"$1\" $2 adlı sayfaya ait metin bulunamadı.\n\nBu durum, genellikle silinmiş bir sayfanın geçmiş bir sürümüne yönlendirilmekten kaynaklanır.\n\nEğer neden bu değilse yazılımda bir hata ile karşılaşmış olabilirsiniz.\nLütfen URL'yi not ederek bunu bir [[Special:ListUsers/sysop|hizmetliye]] iletin.",
        "missingarticle-rev": "(revizyon#: $1)",
        "missingarticle-diff": "(Fark: $1, $2)",
-       "readonly_lag": "Yedek sunucular ana sunucu ile güncellenmeye çalışılırken veritabanı otomatik olarak kilitlendi.",
-       "internalerror": "Yazılım hatası",
-       "internalerror_info": "İç hata: $1",
-       "internalerror-fatal-exception": "Tip \"$1\" hayati hata",
-       "filecopyerror": "\"$1\"  \"$2\" dosyasına kopyalanamıyor.",
+       "readonly_lag": "Yedek sunucular ana sunucu ile güncellenirken veritabanı otomatik olarak kilitlendi.",
+       "internalerror": "Dahili hata",
+       "internalerror_info": "Dahili hata: $1",
+       "internalerror-fatal-exception": "\"$1\" tipinde hayati istisna",
+       "filecopyerror": "\"$1\" \"$2\" dosyasına kopyalanamıyor.",
        "filerenameerror": "\"$1\" dosyasının ismi \"$2\" olarak değiştirilemedi.",
        "filedeleteerror": "\"$1\" dosyası silinemedi.",
        "directorycreateerror": "\"$1\" dizini oluşturulamadı",
        "directorynotreadableerror": "\"$1\" dizini okunabilir değil.",
        "filenotfound": "\"$1\" dosyası bulunamadı.",
        "unexpected": "beklenmeyen değer: \"$1\"=\"$2\".",
-       "formerror": "Hata: Form gönderilemiyor",
-       "badarticleerror": "Bu işlem, bu sayfada yapılamaz.",
-       "cannotdelete": "\"$1\" sayfa ya da dosyası silinemedi.\nBaşka bir kullanıcı tarafından silinmiş olabilir.",
-       "cannotdelete-title": "\"$1\" sayfasını silemezsiniz",
-       "delete-hook-aborted": "Silme işlemi kanca tarafından durduruldu. \nHiçbir açıklama yapılmadı.",
+       "formerror": "Hata: Form gönderilemiyor.",
+       "badarticleerror": "Bu işlem bu sayfada gerçekleştirilemez.",
+       "cannotdelete": "\"$1\" sayfa ya da dosyası silinemedi.\nBaşka bir kullanıcı tarafından zaten silinmiş olabilir.",
+       "cannotdelete-title": "\"$1\" sayfası silinemiyor",
+       "delete-hook-aborted": "Silme işlemi uzantı kancası tarafından durduruldu. \nBir açıklama sunulmadı.",
        "no-null-revision": "\"$1\" sayfası için yeni boş bir sürüm oluşturulamadı",
        "badtitle": "Geçersiz başlık",
        "badtitletext": "Girilen sayfa adı ya hatalı ya boş ya da diller arası bağlantı veya vikiler arası bağlantı içerdiğinden geçerli değil. Başlıklarda kullanılması yasak olan bir ya da daha çok karakter içeriyor olabilir.",
+       "title-invalid-empty": "İstenilen sayfanın başlığı boş veya sadece bir ad alanının adını taşıyor.",
+       "title-invalid-utf8": "İstenen sayfanın başlığı geçersiz bir UTF-8 dizisi içeriyor.",
+       "title-invalid-interwiki": "Başlık vikiiçi bağlantı içeriyor",
+       "title-invalid-talk-namespace": "İstenen sayfa başlığı mevcut olmayan bir tartışma sayfasına gönderme yapıyor.",
+       "title-invalid-characters": "İstenen sayfa başlığı geçersiz karakter içeriyor: \"$1\"",
+       "title-invalid-relative": "Başlık göreli yol içeriyor. Göreli yol içeren başlıklar (./, ../ gibi) kullanılamaz, çünkü genelde kullanıcıların tarayıcıları bu şekildeki başlıklara erişimde sıkıntı yaşar.",
+       "title-invalid-magic-tilde": "İstenen sayfa başlığı geçersiz bir sihirli yaklaşık işareti dizisi içeriyor (<nowiki>~~~</nowiki>).",
+       "title-invalid-too-long": "İstenen sayfa başlığı çok uzun. UTF-8 kodlamasında $1 bayttan daha uzun olmamalı.",
+       "title-invalid-leading-colon": "İstenen sayfa başlığının başında geçersiz bir \"iki nokta\" var.",
        "perfcached": "Aşağıdaki veriler önbellekten alınmıştır ve güncel olmayabilir. Önbellekte en fazla {{PLURAL:$1|bir sonuç|$1 sonuç}} mevcut.",
        "perfcachedts": "Aşağıdaki veri önbelleklenmiştir, son güncelleme tarihi: $1. Önbellekte en fazla {{PLURAL:$1|bir sonuç|$4 sonuç}} mevcut.",
-       "querypage-no-updates": "Şu an için güncellemeler devre dışı bırakıldı. Buradaki veri hemen yenilenmeyecektir.",
+       "querypage-no-updates": "Şu an bu sayfa için güncellemeler devre dışı bırakıldı. Buradaki veri hemen yenilenmeyecektir.",
        "viewsource": "Kaynağı gör",
        "viewsource-title": "$1 sayfasının kaynağını görüntüle",
-       "actionthrottled": "Eylem kısılmışdır",
-       "actionthrottledtext": "Anti-spam önlemleri nedeniyle, bir eylemi kısa bir zaman aralığında çok defa yapmanız kısıtlandı, ve siz sınırı aşmış bulunmaktasınız.\nLütfen birkaç dakika sonra yeniden deneyin.",
+       "actionthrottled": "Eylem kısılmıştır",
+       "actionthrottledtext": "Spam'e karşı alınan önlemler dahilinde belirli bir süre aralığında bu eylemin gerçekleştirilmesine izin verilen miktarı aştınız.\nLütfen birkaç dakika sonra yeniden deneyin.",
        "protectedpagetext": "Bu sayfa değişiklik ya da diğer eylemlerin yapılmasını engellemek için koruma altına alınmıştır.",
        "viewsourcetext": "Bu sayfanın kaynağını görebilir ve kopyalayabilirsiniz:",
-       "viewyourtext": "Bu sayfaya '''yaptığınız değişikliklerin''' kaynağını görünteleyip kopyalayabilirsiniz:",
-       "protectedinterface": "Bu sayfa yazılım için arayüz metni sağlamaktadır ve kötüye kullanımı önlemek için korumaya alınmıştır. Eklemek ya da bütün vikilerdeki çevirileri değiştirmek için lütfen MediaWiki yerelleştirme projesi [//translatewiki.net/ translatewiki.net]'i kullanın.",
+       "viewyourtext": "Bu sayfada <strong>yaptığınız değişikliklerin</strong> kaynağını görünteleyip kopyalayabilirsiniz:",
+       "protectedinterface": "Bu sayfa yazılım için arayüz metni sağlamaktadır ve kötüye kullanımı önlemek için korumaya alınmıştır.\nBütün vikilere dair çeviri eklemek veya bunları değiştirmek için lütfen MediaWiki yerelleştirme projesi [//translatewiki.net/ translatewiki.net]'i kullanın.",
        "editinginterface": "<strong>Uyarı:</strong> Yazılım için arayüz metni sağlayan bir sayfayı değiştiriyorsunuz.\nBu sayfada yapılacak değişiklikler diğer kullanıcıların vikilerindeki kullanıcı arayüzlerinin görünümünü de etkileyecektir.",
        "translateinterface": "Tüm vikilerde çeviri eklemek veya çevirileri değiştirmek için lütfen MediaWiki yerelleştirme projesini [//translatewiki.net/] kullanın.",
        "cascadeprotected": "Bu sayfa değişiklik yapılması engellenmiştir, çünkü  \"kademeli\" seçeneği aktif hale getirilerek koruma altına alınan {{PLURAL:$1|sayfada|sayfada}} kullanılmaktadır:\n$2",
        "wrongpassword": "Parolayı yanlış girdiniz. Lütfen tekrar deneyiniz.",
        "wrongpasswordempty": "Boş parola girdiniz. Lütfen tekrar deneyiniz.",
        "passwordtooshort": "Parolalar en az {{PLURAL:$1|1 karakter|$1 karakter}} uzunluğunda olmalı.",
+       "passwordtoolong": "Parolalar en az {{PLURAL:$1|1 karakter|$1 karakter}} uzunluğunda olmalı.",
        "password-name-match": "Şifreniz kullanıcı adınızdan farklı olmalıdır.",
        "password-login-forbidden": "Bu kullanıcı adı ve şifre kullanımı yasaklanmıştır",
        "mailmypassword": "Parolayı sıfırla",
        "hr_tip": "Yatay çizgi (çok sık kullanmayın)",
        "summary": "Özet:",
        "subject": "Konu/başlık:",
-       "minoredit": "Küçük değişiklik",
+       "minoredit": "Bu küçük bir değişiklik",
        "watchthis": "Bu sayfayı izle",
        "savearticle": "Sayfayı kaydet",
        "preview": "Önizleme",
        "missingcommentheader": "'''Hatırlatma:''' Bu yorum için bir konu/başlık sunmadınız. Eğer \"{{int: savearticle}}\" tuşuna tekrar basarsanız, değişikliğiniz konu/başlık olmadan kaydedilecektir.",
        "summary-preview": "Ön izleme özeti:",
        "subject-preview": "Konu/Başlık ön izlemesi:",
+       "previewerrortext": "Yaptığınız değişikliklerin önizlemesi sırasında bir hata oluştu.",
        "blockedtitle": "Kullanıcı erişimi engellendi.",
        "blockedtext": "'''Kullanıcı adı veya IP adresiniz engellenmiştir.'''\n\nSizi engelleyen hizmetli: $1.<br />\nEngelleme sebebi: ''$2''.\n\n* Engellenmenin başlangıcı: $8\n* Engellenmenin bitişi: $6\n* Engellenme süresi: $7\n\nBelirtilen nedene göre engellenmenizin uygun olmadığını düşünüyorsanız, $1 ya da başka bir [[{{MediaWiki:Grouppage-sysop}}|hizmetli]] ile bu durumu görüşebilirsiniz. [[Special:Preferences|Tercihlerim]] kısmında geçerli bir e-posta adresi girmediyseniz \"Kullanıcıya e-posta gönder\" özelliğini kullanamazsınız, tercihlerinize e-posta adresinizi eklediğinizde e-posta gönderme hakkına sahip olacaksınız.\n<br />Şu anki IP adresiniz $3, engellenme numaranız #$5.\n<br />Bir hizmetliden durumunuz hakkında bilgi almak istediğinizde veya herhangi bir sorguda bu bilgiler gerekecektir, lütfen not ediniz.",
        "autoblockedtext": "IP adresiniz otomatik olarak engellendi, çünkü $1 tarafından engellenmiş başka bir kullanıcı tarafından kullanılmaktaydı.\nBelirtilen sebep şudur:\n\n:''$2''\n\n* Engellemenin başlangıcı: $8\n* Engellemenin bitişi: $6\n* Bloke edilmesi istenen: $7\n\nEngelleme hakkında tartışmak için $1 ile veya diğer [[{{MediaWiki:Grouppage-sysop}}|hizmetlilerden]] biriyle irtibata geçebilirsiniz.\n\nNot, [[Special:Preferences|kullanıcı tercihlerinize]] geçerli bir e-posta adresi kaydetmediyseniz  \"kullanıcıya e-posta gönder\" özelliğinden faydalanamayabilirsiniz ve bu özelliği kullanmaktan engellenmediniz.\n\nŞu anki IP numaranız $3 ve engellenme ID'niz #$5.\nLütfen yapacağınız herhangi bir sorguda yukarıdaki bütün detayları bulundurun.",
        "accmailtitle": "Parola gönderildi.",
        "accmailtext": "[[User talk:$1|$1]] için rastgele oluşturulan parola $2 adresine gönderildi.\n\nBu yeni hesap için parola, giriş yapıldıktan sonra ''[[Special:ChangePassword|parolayı değiştir]]'' bölümünde değiştirilebilir.",
        "newarticle": "(Yeni)",
-       "newarticletext": "Henüz varolmayan bir sayfaya konulmuş bir bağlantıya tıkladınız.\nSayfayı oluşturmak için aşağıdaki metin kutusunu kullanın. ([$1 yardım sayfasına] bakınız).\nBuraya yanlışlıkla geldiyseniz tarayıcınızın '''geri''' tuşuna tıklayın.",
+       "newarticletext": "Henüz varolmayan bir sayfaya konulmuş bir bağlantıya tıkladınız.\nSayfayı oluşturmak için aşağıdaki metin kutusunu kullanın. ([$1 yardım sayfasına] bakınız).\nBuraya yanlışlıkla geldiyseniz tarayıcınızın  <strong>geri </strong> tuşuna tıklayın.",
        "anontalkpagetext": "----''Bu sayfa henüz bir kullanıcı hesabı oluşturmamış veya hesabını kullanmayan bir anonim kullanıcının mesaj sayfasıdır. Bu nedenle bu kişiyi belirtmek için rakamsal IP adresini kullanmak zorundayız. Bu gibi IP adresleri birçok kullanıcı tarafından paylaşılabilir. Eğer siz de bir anonim kullanıcıysanız ve size sizin ilginiz olmayan iletiler geliyorsa, lütfen diğer anonim kullanıcılarla olabilecek olan karmaşayı önlemek için [[Special:UserLogin/signup|bir hesap edinin]] veya [[Special:UserLogin|oturum açın]].''",
        "noarticletext": "Bu sayfa şu anda boştur.\nBu başlığı [[Special:Search/{{PAGENAME}}|diğer sayfalarda arayabilir]],\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ilgili kayıtları arayabilir],\nya da bu sayfayı [{{fullurl:{{FULLPAGENAME}}|action=edit}} değiştirebilirsiniz]</span>.",
-       "noarticletext-nopermission": "Bu sayfa şu anda boştur. \nBu başlığı [[Special:Search/{{PAGENAME}}|diğer sayfalarda arayabilir]] ya da <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ilgili kayıtları tarayabilirsiniz].</span>",
+       "noarticletext-nopermission": "Bu sayfa şu anda boştur. \nBu başlığı [[Special:Search/{{PAGENAME}}|diğer sayfalarda arayabilir]] ya da <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ilgili kayıtları tarayabilirsiniz]</span>, fakat sayfayı yaratma yetkiniz bulunmamaktadır.",
        "missing-revision": "\"{{FULLPAGENAME}}\" sayfasının #$1 sürümü yok.\n\nBu duruma genellikle silinmiş bir sayfaya eski tarihli bir bağlantının takip edilmesi neden olur.\n\nDaha fazla detaylı bilgi [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} sayfasında bulunabilir].",
        "userpage-userdoesnotexist": "\"<nowiki>$1</nowiki>\" kullanıcı hesabı kayıtlı değil. Bu sayfayı oluşturmak/değiştirmek istiyorsanız lütfen kontrol edin.",
        "userpage-userdoesnotexist-view": "\"$1\" kullanıcı hesabı kayıtlı değil.",
        "revision-info": "$2 tarafından oluşturulmuş $1 tarihli sürüm $7",
        "previousrevision": "← Önceki hâli",
        "nextrevision": "Sonraki hâli →",
-       "currentrevisionlink": "en güncel halini göster",
+       "currentrevisionlink": "En güncel hâli",
        "cur": "fark",
        "next": "sonraki",
        "last": "son",
        "history-feed-description": "Viki üzerindeki bu sayfanın değişiklik geçmişi.",
        "history-feed-item-nocomment": "$1, $2'de",
        "history-feed-empty": "İstediğiniz sayfa bulunmamaktadır.\nSayfa vikiden silinmiş ya da ismi değiştirilmiş olabilir.\nKonu ile alakalı diğer sayfaları bulmak için [[Special:Search|vikide arama yapmayı]] deneyin.",
+       "history-edit-tags": "Seçilen sürümlerin etiketlerini düzenle",
        "rev-deleted-comment": "(düzenleme özeti silindi)",
        "rev-deleted-user": "(kullanıcı adı silindi)",
        "rev-deleted-event": "(kayıt ayrıntıları silindi)",
        "rev-showdeleted": "göster",
        "revisiondelete": "Sürümleri sil/geri getir",
        "revdelete-nooldid-title": "Hedef sürüm geçersiz",
-       "revdelete-nooldid-text": "Bu fonksiyonu uygulamak için belirli hedef değişiklik veya değişikileriniz yok. Sunulmuş olan revizyon mevcut değil, veya mevcut revizyonu gizlemeye çalışıyorsunuz.",
+       "revdelete-nooldid-text": "Bu fonksiyonu uygulamak için bir hedef sürüm belirtilmemiş, belirtilen sürüm mevcut değil veya mevcut sürümü gizlemeye çalışıyorsunuz.",
        "revdelete-no-file": "Belirtilen dosya mevcut değil.",
        "revdelete-show-file-confirm": "\"<nowiki>$1</nowiki>\" dosyasının $2 $3 tarihli silinmiş bir revizyonunu görmek istediğinize emin misiniz?",
        "revdelete-show-file-submit": "Evet",
        "mergehistory-empty": "Hiçbir sürüm birleştirilemez.",
        "mergehistory-success": "[[:$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-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.",
        "mergehistory-invalid-source": "Kaynak sayfanın geçerli bir başlığı olmalı.",
        "showhideselectedversions": "Seçili sürümleri göster/gizle",
        "editundo": "geri al",
        "diff-empty": "(Fark yok)",
-       "diff-multi-sameuser": "(Aynı kullanıcıdan {{PLURAL:$1|bir ara revizyon|$1 ara revizyon}} gösterilmiyor)",
+       "diff-multi-sameuser": "(Aynı kullanıcının {{PLURAL:$1|aradaki bir diğer değişikliği|aradaki diğer $1 değişikliği}} gösterilmiyor)",
        "diff-multi-otherusers": "({{PLURAL:$2|Bir diğer kullanıcıdan|$2 kullanıcıdan}} {{PLURAL:$1|bir ara revizyon|$1 ara revizyon}} gösterilmiyor)",
        "diff-multi-manyusers": "($2 kullancıdan fazla {{PLURAL:$2|kullanıcı|kullanıcı}} tarafından yapılan {{PLURAL:$1|bir ara revizyon|$1 ara revizyon}} gösterilmiyor)",
        "difference-missing-revision": "Bu farkın {{PLURAL:$2|bir revizyonu|$2 revizyonu}} ($1) {{PLURAL:$2|bulunamadı|bulunamadı}}.\n\nBu genellikle, silinen bir sayfaya olan eski tarihli bir fark sayfasına bağlantılardan dolayı olur.\nAyrıntılar [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} silme günlüğünde] bulunabilir.",
        "search-interwiki-more": "(daha çok)",
        "search-relatedarticle": "ilgili",
        "searchrelated": "ilgili",
-       "searchall": "hepsi",
+       "searchall": "tümü",
        "showingresults": "$2. sonuçtan başlayarak {{PLURAL:$1|'''1''' sonuç |'''$1''' sonuç }} aşağıdadır:",
        "showingresultsinrange": "<strong>$2</strong> ile <strong>$3</strong> arasında toplam <strong>$1</strong> sonuç gösteriliyor.",
+       "search-showingresults": "{{PLURAL:$4|<strong>$3</strong> için sonuç|<strong>$3</strong> için <strong>$1 - $2</strong> sonuçlar}}",
        "search-nonefound": "Sorguyla eşleşen bir sonuç yok.",
        "powersearch-legend": "Gelişmiş arama",
        "powersearch-ns": "Ad alanlarında ara:",
        "prefs-rc": "Son değişiklikler",
        "prefs-watchlist": "İzleme listesi",
        "prefs-editwatchlist": "İzleme listesini düzenle",
-       "prefs-editwatchlist-label": "İzleme listesinizdeki girişleri düzenle",
-       "prefs-editwatchlist-edit": "İzleme listesini gör ve düzenle",
+       "prefs-editwatchlist-label": "İzleme listenizdeki girişleri düzenleyin:",
+       "prefs-editwatchlist-edit": "İzleme listenizdeki başlıkları görüntüleyin ve düzenleyin",
        "prefs-editwatchlist-raw": "Ham izleme listesini düzenle",
-       "prefs-editwatchlist-clear": "İzleme listesini temizle",
+       "prefs-editwatchlist-clear": "İzleme listenizi temizleyin",
        "prefs-watchlist-days": "İzleme listesinde görüntülenecek gün sayısı:",
        "prefs-watchlist-days-max": "en fazla $1 {{PLURAL:$1|gün|gün}}",
        "prefs-watchlist-edits": "Genişletilmiş izleme listesinde gösterilecek değişiklik sayısı:",
        "right-browsearchive": "Silinen sayfaları ara",
        "right-undelete": "Bir sayfanın silinmesini geri al",
        "right-suppressrevision": "Sysoplardan gizlenmiş revizyonlarını gizle ve göster",
+       "right-viewsuppressed": "Herhangi bir kullanıcıdan saklanan sürümleri göster",
        "right-suppressionlog": "Özel günlükleri gör",
        "right-block": "Diğer kullanıcıların değişiklik yapmalarını engelle",
        "right-blockemail": "Bir kullanıcının e-posta göndermesini engelle",
        "right-override-export-depth": "Sayfaları, derinlik 5'e kadar bağlantılı sayfalarla beraber, dışa aktar",
        "right-sendemail": "Diğer kullanıcılara e-posta gönder",
        "right-passwordreset": "Parola sıfırlama e-postalarını görür",
+       "right-managechangetags": "Veritabanında [[Special:Tags|etiket]] oluşturma veya silme",
+       "right-applychangetags": "Değişiklikleriyle beraber [[Special:Tags|etiketleri]] uygula",
+       "right-changetags": "Tekil sürümler ve günlük kayıtlarına rastgele [[Special:Tags|etiket]] ekleme veya çıkarma",
        "newuserlogpage": "Yeni kullanıcı kayıtları",
        "newuserlogpagetext": "En son kaydolan kullanıcı kayıtları.",
        "rightslog": "Kullanıcı hakları kayıtları",
        "action-viewmywatchlist": "izleme listeni gör",
        "action-viewmyprivateinfo": "kendi özel bilgilerinizi görmeye",
        "action-editmyprivateinfo": "kendi özel bilgilerinizi değiştirmeye",
+       "action-editcontentmodel": "bir sayfanın içerik modelini düzenle",
+       "action-managechangetags": "veritabanındaki etiketleri yarat ve sil",
+       "action-applychangetags": "değişikliklerle beraber etiketlendirmeyi de uygula",
+       "action-changetags": "tekil sürümlere veya günlük kayıtlarına etiket ekleme veya çıkarma",
        "nchanges": "$1 {{PLURAL:$1|değişiklik|değişiklik}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|son ziyaretten bu yana}}",
        "enhancedrc-history": "geçmiş",
        "recentchanges": "Son değişiklikler",
        "recentchanges-legend": "Son değişiklikler seçenekleri",
-       "recentchanges-summary": "Yapılan en son değişiklikleri bu sayfadan izleyin.",
+       "recentchanges-summary": "Vikide yapılan en son değişiklikleri bu sayfadan izleyin.",
        "recentchanges-noresult": "Belirtilen kriterlere uyan herhangi bir değişiklik bulunamadı.",
        "recentchanges-feed-description": "Bu beslemede, viki'de yapılan en son değişiklikleri takip edin.",
-       "recentchanges-label-newpage": "Bu değişiklikle [[Special:NewPages|yeni bir sayfa]] oluşturuldu",
-       "recentchanges-label-minor": "Küçük değişiklik",
-       "recentchanges-label-bot": "Bir bot tarafından yapılan değişiklik",
+       "recentchanges-label-newpage": "Bu değişiklikle yeni bir sayfa oluşturuldu",
+       "recentchanges-label-minor": "Bu küçük bir değişiklik",
+       "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-newpage": "{{int:recentchanges-label-newpage}}",
-       "rcnotefrom": "<strong>$2</strong> tarihinden itibaren yapılan değişiklikler aşağıdadır (en fazla <strong>$1</strong> tanesi gösterilmektedir).",
+       "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).",
        "rclistfrom": "$3 $2 tarihinden itibaren yeni değişiklikleri göster",
        "rcshowhideminor": "Küçük değişiklikleri $1",
        "rcshowhideminor-show": "Göster",
        "uploaderror": "Yükleme hatası",
        "upload-recreate-warning": "'''Uyarı: Bu adı taşıyan bir dosya silindi veya taşındı.'''\n\nBu sayfanın silme ve taşıma günlüğü kolaylık için burada sağlanmıştır:",
        "uploadtext": "Dosya yüklemek için aşağıdaki formu kullanın.\nÖnceden yüklenmiş dosyaları görmek ya da aramak için [[Special:FileList|yüklenmiş dosyalar listesine]] bakın, (tekrar) yüklenenler [[Special:Log/upload|yükleme günlüğü]]nde, silinenler [[Special:Log/delete|silinme günlüğü]]nde tutulumaktadır.\n\nBir sayfaya dosya koymak için bağlantınızda aşağıdaki formlardan birini kullanın;\n* Dosyanın tam sürümünü kullanmak için: '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Dosya.jpg]]</nowiki></code>'''\n* Sol kenarda bir kutu içinde, altında tanım olarak 'alt metin' ile, 200 piksel genişiğindeki sürümü kullanmak için: '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Dosya.png|200px|thumb|left|alt metin]]</nowiki></code>'''\n* Dosyayı göstermeden, dosyaya direk bağlantı vermek için: '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Dosya.ogg]]</nowiki></code>'''",
-       "upload-permitted": "İzin verilen dosya türleri: $1.",
-       "upload-preferred": "Tercih edilen dosya türleri: $1.",
-       "upload-prohibited": "Yasaklanan dosya türleri: $1.",
+       "upload-permitted": "İzin verilen dosya {{PLURAL:$2|türü|türleri}}: $1.",
+       "upload-preferred": "Tercih edilen dosya {{PLURAL:$2|türü|türleri}}: $1.",
+       "upload-prohibited": "Yasaklanan dosya {{PLURAL:$2|türü|türleri}}: $1.",
        "uploadlogpage": "Dosya yükleme kaydı",
        "uploadlogpagetext": "Aşağıda en son eklenen [[Special:NewFiles|dosyaların bir listesi]] bulunmaktadır.",
        "filename": "Dosya adı",
        "uploaddisabledtext": "Dosya yüklemeleri devredışı bırakılmıştır.",
        "php-uploaddisabledtext": "PHP dosyası yüklemeleri devre dışıdır. Lütfen file_uploads ayarını kontrol edin.",
        "uploadscripted": "Bu dosya bir internet tarayıcısı tarafından hatalı çevrilebilecek bir HTML veya script kodu içermektedir.",
+       "uploadscriptednamespace": "Bu SVG dosyası geçersiz \"$1\" alan adını içermektedir.",
        "uploadinvalidxml": "Yüklenen dosyadaki XML işlenemedi.",
        "uploadvirus": "Bu dosya virüslüdür! Detayları: $1",
        "uploadjava": "Dosya, bir Java .classdosyası içeren bir ZIP dosyasıdır.\nJava dosyalarının yüklenmesine izin verilmemektedir, zira güvenlik kısıtlamalarının atlanmasına neden olabilmektedirler.",
        "unwatchedpages": "İzlenmeyen sayfalar",
        "listredirects": "Yönlendirmeleri listele",
        "listduplicatedfiles": "Kopyası bulunan dosyalar listesi",
+       "listduplicatedfiles-summary": "Bu, en son sürümü başka bir dosyanın en son sürümünün aynısı olan dosyaların listesidir. Sadece yerel dosyalar gözönüe alınmaktadır.",
+       "listduplicatedfiles-entry": "[[:File:$1|$1]] dosyasının [[$3|{{PLURAL:$2|bir kopyası|$2 kopyası}}]] var.",
        "unusedtemplates": "Kullanılmayan şablonlar",
        "unusedtemplatestext": "Bu sayfa, {{ns:template}} alan adında bulunan ve diğer sayfalara eklenmemiş olan sayfaları listeler. Şablonlara olan diğer bağlantıları da kontrol etmeden silmeyiniz.",
        "unusedtemplateswlh": "diğer bağlantılar",
        "unusedimages": "Kullanılmayan dosyalar",
        "wantedcategories": "İstenen kategoriler",
        "wantedpages": "İstenen sayfalar",
+       "wantedpages-summary": "Sadece yönlendirme sayfalarınca bağlantı veilen sayfalar hariç, kendine en çok bağlantı verilmiş ve mevcut olmayan sayfaların listesi. Yönlendirme sayfalarınca bağlantı verilmiş, mevcut olmayan sayfaları görmek için bakınız: [[{{#special:BrokenRedirects}}]]",
        "wantedpages-badtitle": "Sonuç kümesinde geçersiz başlık: $1",
        "wantedfiles": "İstenen dosyalar",
        "wantedfiletext-cat": "Aşağıdaki dosyalar kullanılıyor ama mevcut değil. Yabancı depolardaki dosyalar, varolsalar bile gösterilebilir. Böyle yanlış pozitiflerin <del>üstü çizilecektir</del>. Ek olarak, varolmayan dosyaları gömen sayfalar [[:$1]] sayfasında listelenmiştir.",
+       "wantedfiletext-cat-noforeign": "Aşağıdaki dosyalar kullanılıyor fakar mevcut değiller. Ek olarak, mevcut olmayan dosyaları içeren sayfalar şurada listelenmektedir:  [[:$1]]",
        "wantedfiletext-nocat": "Aşağıdaki dosyalar kullanılıyor ama mevcut değil. Yabancı depolardaki dosyalar, varolsalar bile gösterilebilir. Böyle yanlış pozitiflerin <del>üstü çizilecektir</del>.",
        "wantedfiletext-nocat-noforeign": "Aşağıdaki dosyalar kullanıyor ancak mevcut değil.",
        "wantedtemplates": "İstenen şablonlar",
        "mostlinked": "Kendisine en fazla bağlantı verilmiş sayfalar",
        "mostlinkedcategories": "En çok maddeye sahip kategoriler",
-       "mostlinkedtemplates": "En çok kullanılan şablonlar",
+       "mostlinkedtemplates": "En çok dahil edilen sayfalar",
        "mostcategories": "En fazla kategoriye bağlanmış sayfalar",
        "mostimages": "En çok bağlantı verilmiş dosyalar",
        "mostinterwikis": "En çok interwiki'ye sahip sayfalar",
        "logempty": "Kayıtlarda eşleşen bilgi yok.",
        "log-title-wildcard": "Bu metinle başlayan başlıklar ara",
        "showhideselectedlogentries": "Seçili günlük girdilerinin görünürlüğünü değiştir",
+       "log-edit-tags": "Seçili kayıtların etiketlerini düzenle",
        "allpages": "Tüm sayfalar",
        "nextpage": "Sonraki sayfa ($1)",
        "prevpage": "Önceki sayfa ($1)",
        "listgrouprights-removegroup-self": "Kendi hesabından {{PLURAL:$2|grup|grupları}} çıkarabilir: $1",
        "listgrouprights-addgroup-self-all": "Kendi hesabına tüm grupları ekleyebilir",
        "listgrouprights-removegroup-self-all": "Kendi hesabından tüm grupları çıkarabilir",
+       "listgrouprights-namespaceprotection-header": "Ad kısıtlamaları",
+       "listgrouprights-namespaceprotection-namespace": "Ad alanı",
        "listgrouprights-namespaceprotection-restrictedto": "Kullanıcının değişiklik yapmasına izin veren hak(lar)",
+       "trackingcategories": "Eşleşen kategoriler",
+       "trackingcategories-summary": "Bu sayfa MediaWiki yazılımı tarafından otomatik olarak doldurulan takip kategorilerini listelemektedir. {{ns:8}} ad alanındaki ilgili sistem mesajları değiştirilerek isimleri düzenlenebilir.",
+       "trackingcategories-msg": "İzleme kategorisi",
+       "trackingcategories-name": "Mesaj Duvarı",
+       "trackingcategories-desc": "Kategori dahil etme kriterleri",
+       "noindex-category-desc": "Bu sayfa robotlar tarafından dizinlenmemektedir çünkü üzerinde <code><nowiki>__NOINDEX__</nowiki></code> sihirli kodu bulunmakta ve bu işarete müsade edilen bir ad alanına dahil.",
+       "index-category-desc": "Bu sayfada <code><nowiki>__INDEX__</nowiki></code> kodu var (ve bu işarete izin verilen bir ad alanında), bu yüzden normalde yapılmayacak olsa da, robotlar tarafından dizinleniyor.",
+       "post-expand-template-inclusion-category-desc": "Sayfa, bütün şablonlar genişletildiğinde <code>$wgMaxArticleSize</code> boyutundan büyük olacağı için bazı şablonlar genişletilmedi.",
+       "post-expand-template-argument-category-desc": "Bir şablonun içerdiği bir önerme (üçlü kıvrımlı parantez içinde bulunan, örneğin <code>{{{hede}}}</code> şeklinde bir girdi) genişletildiğinde bu sayfanın büyüklüğü <code>$wgMaxArticleSize</code> büyüklüğünü geçmektedir.",
+       "expensive-parserfunction-category-desc": "Bu sayfa çok fazla zengin derleyici fonksiyonu çağrısına (örneğin <code>#ifexist</code>) sahiptir. Lütfen bakınız: [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit]",
        "broken-file-category-desc": "Sayfa bozuk dosya bağlantısı (mevcut olmayan bir dosyayı kullanmaya çalışan bağlantı) içeriyor.",
+       "hidden-category-category-desc": "Bu kategorinin sayfa içeriğinde bulunan <code><nowiki>__HIDDENCAT__</nowiki></code>, sayfalardaki kategori bağlantıları kutusunda varsayılan olarak gösterilmesini engellemektedir.",
        "trackingcategories-nodesc": "Açıklama yok.",
        "trackingcategories-disabled": "Kategori devre dışı",
        "mailnologin": "Gönderi adresi yok.",
        "emailccsubject": "$1'e gönderdiğiniz mesajın kopyası: $2",
        "emailsent": "E-posta gönderildi",
        "emailsenttext": "E-postanız gönderildi.",
-       "emailuserfooter": "Bu e-posta $1 tarafından $2 kullanıcısına, {{SITENAME}} sitesindeki \"Kullanıcıya e-posta gönder\" fonksiyonu ile gönderilmiştir.",
+       "emailuserfooter": "Bu e-posta $1 tarafından $2 kullanıcısına, {{SITENAME}} sitesindeki \"Kullanıcıya e-posta gönder\" (\"{{int:emailpage}}\") fonksiyonu ile gönderilmiştir.",
        "usermessage-summary": "Sistem mesajı bırakın.",
        "usermessage-editor": "Sistem habercisi",
        "watchlist": "İzleme listesi",
        "rollback": "değişiklikleri geri al",
        "rollbacklink": "geri döndür",
        "rollbacklinkcount": "$1 {{PLURAL:$1|değişikliği|değişikliği}} geri döndür",
-       "rollbacklinkcount-morethan": "$1 {{PLURAL:$1|değişiklikten|değişiklikten}} fazla geri döndür",
+       "rollbacklinkcount-morethan": "$1 {{PLURAL:$1|değişiklikten|değişiklikten}} daha fazlasını geri döndür",
        "rollbackfailed": "geri alma işlemi başarısız",
        "cantrollback": "Sayfaya son katkıda bulunan kullanıcı, sayfaya katkıda bulunmuş tek kişi olduğu için, değişiklikler geri alınamıyor.",
-       "alreadyrolled": "[[User:$2|$2]] ([[User talk:$2|Tartışma]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) tarafından [[:$1]] sayfasında yapılmış son değişiklik geriye alınamıyor;\nbaşka birisi sayfada değişiklik yaptı ya da sayfayı geriye aldı.\n\nSon değişikliği yapan: [[User:$3|$3]] ([[User talk:$3|Tartışma]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
+       "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.",
        "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",
        "undelete-show-file-confirm": "\"<nowiki>$1</nowiki>\" dosyasının $2 $3 tarihli silinmiş bir revizyonunu görmek istediğinize emin misiniz?",
        "undelete-show-file-submit": "Evet",
        "namespace": "Ad alanı:",
-       "invert": "Seçili haricindekileri göster",
-       "tooltip-invert": "Seçili ad alanındaki sayfalara olan değişiklikleri gizlemek için bu kutucuğu işaretleyin (ve ilgili ad alanı, eğer seçiliyse)",
+       "invert": "Seçimi ters çevir",
+       "tooltip-invert": "Seçili ad alanındaki (ve seçiliyse, ilişkili ad alanlarındaki) sayfalara olan değişiklikleri gizlemek için bu kutucuğu işaretleyin",
+       "tooltip-whatlinkshere-invert": "Seçili ad alanlarında bulunan sayfalardaki bağlantıları gizlemek için bu kutucuğu işaretleyin.",
        "namespace_association": "İlişkili ad alanı",
        "tooltip-namespace_association": "Seçili ad alanıyla ilgili tartışma ya da madde ad alanlarını da eklemek için bu kutucuğu işaretleyin",
        "blanknamespace": "(Ana)",
        "contributions-userdoesnotexist": "\"$1\" kullanıcı hesabı kayıtlı değil.",
        "nocontribs": "Bu kriterlere uyan değişiklik bulunamadı",
        "uctop": "(son)",
-       "month": "Ay:",
+       "month": "Bu aya kadar (ve önceki aylar):",
        "year": "Bu yıla kadar (ve önceki yıllar):",
        "sp-contributions-newbies": "Sadece yeni kullanıcıların katkılarını göster",
        "sp-contributions-newbies-sub": "Yeni kullanıcılar için",
        "sp-contributions-newbies-title": "Yeni hesaplar için kullanıcı katkıları",
        "sp-contributions-blocklog": "Engel kaydı",
+       "sp-contributions-suppresslog": "Silinen kullanıcı katkıları",
        "sp-contributions-deleted": "silinen kullanıcı katkıları",
        "sp-contributions-uploads": "yüklenenler",
        "sp-contributions-logs": "kayıtlar",
        "unblocked": "[[User:$1|$1]] - engelleme kaldırıldı",
        "unblocked-range": "$1 engeli kaldırıldı",
        "unblocked-id": "$1 engeli çıkarıldı",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] engellenmiştir.",
        "blocklist": "Engellenmiş kullanıcılar",
        "ipblocklist": "Engellenmiş kullanıcılar",
        "ipblocklist-legend": "Engellenen kullanıcı ara",
        "move-page": "$1 taşınıyor",
        "move-page-legend": "İsim değişikliği",
        "movepagetext": "Aşağıdaki formu kullanmak sayfanın adını değiştirir, tüm geçmiş kayıtlarını da yeni isme aktarır.\nEski başlık yeni başlığa yönlendirme hâline dönüşür. Otomatik olarak eski başlığa yönlendirmeleri güncelleyebilirsiniz.\nEğer istemezseniz, tüm [[Special:DoubleRedirects|çift]] veya [[Special:BrokenRedirects|geçersiz]] yönlendirmeleri kontrol ettiğinizden emin olun.\nTüm bağlantıların olması gerektiği gibi çalıştığından sizin sorumlu olduğunuzu unutmayınız.\n\nEğer yeni isimde bir madde zaten varsa isim değişikliği '''yapılmayacaktır''', sonraki bir yönlendirme olup geçmiş değişiklik geçmişi olmadığı müddetçe.\nBu şu anlama gelir ki, eğer bir hata yaparsanız sayfayı değiştirildiği isme geri isimlendirebilirsiniz, ve mevcut bir sayfanın üstüne yazmazsınız.\n\n'''UYARI!'''\nBu değişim popüler bir sayfa için etkili ve beklenmeyen sonuçlar doğurabilir; lütfen devam etmeden önce olabilecekleri anladığınızdan emin olun.",
-       "movepagetext-noredirectfixer": "Aşağıdaki formu doldurmak bir sayfayı yeniden adlandırır, tüm geçmişini yeni ada taşır.\nEski başlık yeni başlığa bir yönlendirme sayfası olur.\n[[Special:DoubleRedirects|Çift]] ya da [[Special:BrokenRedirects|nozuk yönlendirmeler]] sayfalarını kontrol edin.\nBağlantıların gitmeleri gereken yerlere gittiklerinden emin olmak sizin sorumluluğunuzdadır.\n\nYeni başlıkta mevcut bir sayfa varsa, boş yada bir yönlendirme olmadıkça ve değişiklik geçmişi bulunmadıkça, sayfa '''taşınmayacaktır'''.\nBu şu anlama gelir, bir sayfayı yanlışlık yaparsanız sayfayı eski adıyla yeniden adlandırabilirsiniz, bu mevcut sayfanın üzerine yazmaz.\n\n'''Uyarı!'''\nBu popüler bir sayfa için etkili ve beklenmedik bir değişiklik olabilir;\nLütfen onaylamadan önce bunun sonuçlarını anladığınızdan emin olun.",
+       "movepagetext-noredirectfixer": "Aşağıdaki formu doldurmak bir sayfayı yeniden adlandırır, tüm geçmişini yeni ada taşır.\nEski başlık yeni başlığa bir yönlendirme sayfası olur.\n[[Special:DoubleRedirects|Çift]] ya da [[Special:BrokenRedirects|bozuk yönlendirmeler]] sayfalarını kontrol edin.\nBağlantıların gitmeleri gereken yerlere gittiklerinden emin olmak sizin sorumluluğunuzdadır.\n\nYeni başlıkta mevcut bir sayfa varsa, boş yada bir yönlendirme olmadıkça ve değişiklik geçmişi bulunmadıkça, sayfa '''taşınmayacaktır'''.\nBu şu anlama gelir, bir sayfayı yanlışlık yaparsanız sayfayı eski adıyla yeniden adlandırabilirsiniz, bu mevcut sayfanın üzerine yazmaz.\n\n'''Uyarı!'''\nBu popüler bir sayfa için etkili ve beklenmedik bir değişiklik olabilir;\nLütfen onaylamadan önce bunun sonuçlarını anladığınızdan emin olun.",
        "movepagetalktext": "İlişikteki tartışma sayfası da (eğer varsa) otomatik olarak yeni isme taşınacaktır. Ama şu durumlarda '''taşınmaz''':\n\n*Alanlar arası bir taşıma ise, (örnek: \"Project:\" --> \"Help:\")\n*Yeni isimde bir tartışma sayfası zaten var ise,\n*Alttaki kutucuğu seçmediyseniz.\n\nBu durumlarda sayfayı kendiniz aktarmalısınız.",
        "movearticle": "Eski isim",
        "moveuserpage-warning": "'''Uyarı:''' Bir kullanıcı sayfasını taşımak üzeresiniz. Lütfen sadece sayfanın taşınacağına, ancak kullanıcının yeniden ''adlandırılmayacağına'' dikkat edin.",
        "thumbnail-temp-create": "Geçici küçük resim dosyası oluşturulamıyor",
        "thumbnail-dest-create": "Küçük resim hedefe kaydedilemiyor",
        "thumbnail_invalid_params": "Geçersiz küçük resim parametreleri",
+       "thumbnail_toobigimagearea": "$1 boyutundan büyük olan dosyalar",
        "thumbnail_dest_directory": "Hedef dizini oluşturulamıyor",
        "thumbnail_image-type": "Görüntü türü desteklenmiyor",
        "thumbnail_gd-library": "Eksik GD kütüphanesi yapılandırması: kayıp fonksiyon $1",
        "thumbnail_image-missing": "Dosya kayıp gibi görünüyor: $1",
        "thumbnail_image-failure-limit": "Yakın zamanda bu küçük resmin oluşturulması için çok fazla başarısız  girişim oldu ($1 ya da daha fazla). Lütfen daha sonra yeniden deneyin.",
        "import": "Sayfaları aktar",
-       "importinterwiki": "Vikilerarası içe aktarım",
+       "importinterwiki": "Başka bir vikiden içe aktar",
        "import-interwiki-text": "İçe aktarmak için bir viki ve sayfa başlığı seçin.\nRevizyon tarihleri ve yazarların isimleri korunacaktır.\nBütün vikilerarası içe aktarım eylemleri [[Special:Log/import|içe aktarım günlüğünde]] kaydedilmektedir.",
        "import-interwiki-sourcewiki": "Kaynak viki:",
        "import-interwiki-sourcepage": "Kaynak sayfa:",
        "import-interwiki-history": "Sayfanın tüm geçmiş sürümlerini kopyala",
        "import-interwiki-templates": "Tüm şablonları içer",
        "import-interwiki-submit": "Import",
-       "import-interwiki-namespace": "Hedef ad alanı:",
-       "import-interwiki-rootpage": "Hedeflenen kaynak sayfası (isteğe bağlı):",
+       "import-mapping-default": "Varsayılan konumların içine aktar",
+       "import-mapping-namespace": "Bir ad alanının içine aktar:",
+       "import-mapping-subpage": "Şu sayfanın alt sayfaları olarak içe aktar:",
        "import-upload-filename": "Dosya adı:",
        "import-comment": "Yorum:",
        "importtext": "Lütfen dosyayı [[Special:Export|dışa aktarım yardımcı yazılımıyla]] kaynak vikiden dışa aktarın.\nBilgisayarınıza kaydedin ve buraya yükleyin.",
        "importcantopen": "İçeri aktarma dosyası açılamadı",
        "importbadinterwiki": "Yanlış interwiki bağlantısı",
        "importsuccess": "Aktarma sonuçlandı!",
-       "importnosources": "Hiç vikilerarası içe aktarım kaynağı tanımlanmamış ve doğrudan geçmiş yüklemeleri devre dışı.",
+       "importnosources": "Hangi vikiden içeri aktarılacağı tanımlanmamış ve doğrudan geçmiş yüklemeleri devre dışı.",
        "importnofile": "Bir aktarım dosyası yüklenmedi.",
        "importuploaderrorsize": "İçe aktarılmış dosyanın yüklenmesi başarısız oldu.\nDosya, izin verilen yükleme boyutundan büyük.",
        "importuploaderrorpartial": "İçe aktarılmış dosyanın yüklenmesi başarısız oldu.\nDosyanın sadece bir kısmı yüklendi.",
        "pageinfo-protect-cascading-yes": "Evet",
        "pageinfo-protect-cascading-from": "Korumalar üzerinden geçiş",
        "pageinfo-category-info": "Kategori bilgileri",
+       "pageinfo-category-total": "Üye sayısı",
        "pageinfo-category-pages": "Sayfa sayısı",
        "pageinfo-category-subcats": "Alt kategori sayısı",
        "pageinfo-category-files": "Dosya sayısı",
        "patrol-log-page": "Kontrol kaydı",
        "patrol-log-header": "Bu gözlenmiş revizyonların günlüğüdür.",
        "log-show-hide-patrol": "Gözetim günlüğünü $1",
+       "log-show-hide-tag": "$1 Etiket günlüğü",
        "deletedrevision": "$1 sayılı eski sürüm silindi.",
        "filedeleteerror-short": "$1 dosyanın silinmesinde hata oldu",
        "filedeleteerror-long": "Dosyayı silerken hatalarla karşılaşıldı:\n\n$1",
        "exif-imagedescription": "Resim başlığı",
        "exif-make": "Kamera markası",
        "exif-model": "Kamera modeli",
-       "exif-software": "Yazılım",
+       "exif-software": "Kullanılan yazılım",
        "exif-artist": "Yaratıcısı",
        "exif-copyright": "Telif hakkı sahibi",
        "exif-exifversion": "Exif sürümü",
        "exif-pixelxdimension": "Resim yüksekliği",
        "exif-usercomment": "Kullanıcı yorumu",
        "exif-relatedsoundfile": "İlişkin ses dosyası",
-       "exif-datetimeoriginal": "Orjinal yaratma zamanı",
+       "exif-datetimeoriginal": "Verinin ilk yaratılma zamanı",
        "exif-datetimedigitized": "Dijitalleştirme zamanı",
        "exif-subsectime": "Alt-ikinci zaman",
        "exif-subsectimeoriginal": "Orjinal alt-ikinci zaman",
        "hijri-calendar-m10": "Şevval",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|mesaj]])",
        "duplicate-defaultsort": "'''Uyarı:''' Varsayılan \"$2\" sınıflandırma anahtarı, önceki \"$1\" sınıflandırma anahtarını geçersiz kılıyor.",
+       "duplicate-displaytitle": "<strong>Uyarı:</strong> \"$2\" şeklindeki yeni başlık \"$1\" şeklindeki eski başlığın üzerine yazılacak.",
+       "invalid-indicator-name": "<strong>Hata:</strong> Sayfa durum göstergelerinin <code>name</code> özelliği boş olamaz.",
        "version": "Sürüm",
        "version-extensions": "Yüklü ekler",
        "version-skins": "Yüklü görünümler",
        "tags-tag": "Etiket adı",
        "tags-display-header": "Değişiklik listelerindeki görünüm",
        "tags-description-header": "Anlamının tam açıklaması",
+       "tags-source-header": "Kaynak",
        "tags-active-header": "Etkin?",
        "tags-hitcount-header": "Etiketli değişiklikler",
+       "tags-actions-header": "Eylemler",
        "tags-active-yes": "Evet",
        "tags-active-no": "Hayır",
+       "tags-source-extension": "Bir uzantı tarafından tanımlanmış",
+       "tags-source-manual": "Kullanıcı ve botlar tarafından elle uygulanır",
+       "tags-source-none": "Artık kullanımda",
        "tags-edit": "değiştir",
+       "tags-delete": "sil",
+       "tags-activate": "Etkinleştir",
+       "tags-deactivate": "Devre dışı bırakma",
        "tags-hitcount": "$1 {{PLURAL:$1|değişiklik|değişiklik}}",
+       "tags-manage-no-permission": "Yeni sayfalar oluşturmaya yetkiniz yok.",
+       "tags-create-heading": "Yeni bir öge oluştur",
+       "tags-create-explanation": "Varsayılan olarak, Yeni oluşturulan etiketlerin hazır hale getirilmesi kullanıcılar ve botlar tarafından yapılacaktır.",
+       "tags-create-tag-name": "Etiket adı:",
+       "tags-create-reason": "Neden:",
+       "tags-create-submit": "Oluştur",
+       "tags-create-no-name": "Etik adı belirtmeniz gerekiyor",
+       "tags-create-invalid-chars": "Etiket isimleri virgül (<code>,</code>) veya ileri eğik çizgi (<code>/</code>) içeremez.",
+       "tags-create-invalid-title-chars": "Sayfa başlıklarında kullanılamayan karakterler etiketlerde kullanılamaz.",
+       "tags-create-already-exists": "\"$1\" etiketi zaten mevcut.",
+       "tags-create-warnings-above": "\"$1\" etiketini oluşturmaya çalışırken aşağıdaki {{PLURAL:$2|hatayla|hatalarla}} karşılaşıldı:",
+       "tags-create-warnings-below": "Etiketi yaratmaya devam etmek istiyor musunuz?",
+       "tags-delete-title": "Etiketi Sil",
+       "tags-delete-explanation-initial": "\"$1\" etiketini veritabanından silmek üzeresiniz.",
+       "tags-delete-explanation-in-use": "Etiket haliahazırda uygulandığı {{PLURAL:$2|$2 sürüm veya günlük kaydından|$2 sürüm ve/veya günlük kaydının tümünden}} kaldırılacaktır.",
+       "tags-delete-explanation-warning": "Bu işlem veritabanı yöneticileri tarafından dahi <strong>geri alınamaz</strong> ve <strong>silinemez</strong>. Silmek istediğiniz etiketin bu olduğunda emin olun.",
+       "tags-delete-explanation-active": "<strong>\"$1\" etiketi hala aktif ve gelecekte de uygulanmaya devam edecek.</strong> Bunun olmasını önlemek için bu etiketin uygulanmak üzere ayarlandığı yer(ler)e gidin ve oradan kullanım dışı bırakın.",
+       "tags-delete-reason": "Gerekçe:",
+       "tags-delete-submit": "Bu etiketi geri döndürülemez şekilde sil",
+       "tags-delete-not-allowed": "Bir uzantı tarafından tanımlanan etiketler o uzantı özellikle izin vermedikçe silinemez.",
+       "tags-delete-not-found": "\"$1\" etiketi mevcut değil.",
+       "tags-delete-too-many-uses": "\"$1\" etiketinin uygulandığı sürüm sayısı fazla ($2 sürüm); bu yüzden bu etiket silinemez.",
+       "tags-delete-warnings-after-delete": "\"$1\" etiketi başarıyla silindi; fakat aşağıdaki {{PLURAL:$2|uyarıyla|uyarılarla}} karşılaşıldı:",
+       "tags-activate-title": "Aktif etiket",
+       "tags-activate-question": "\"$1\" etiketini etkinleştirmek üzeresiniz.",
+       "tags-activate-reason": "Neden:",
+       "tags-activate-not-allowed": "\"$1\" etiketini etkinleştirmek mümkün değil.",
+       "tags-activate-not-found": "\"$1\" etiketi mevcut değil.",
+       "tags-activate-submit": "Etkinleştir",
+       "tags-deactivate-title": "Aktif olmayan etiket",
+       "tags-deactivate-question": "\"$1\" etiketini devre dışı bırakmak üzeresiniz.",
+       "tags-deactivate-reason": "Sebep:",
+       "tags-deactivate-not-allowed": "\"$1\" etiketini devre dışı bırakmak mümkün değil.",
+       "tags-deactivate-submit": "Aktif değil",
+       "tags-apply-no-permission": "Değişikliklerinizle beraber etiket değişiklikleri uygulamak için yetkiniz yok.",
+       "tags-apply-not-allowed-one": "\"$1\" etiketi elle uygulanamaz.",
+       "tags-apply-not-allowed-multi": "Bu {{PLURAL:$2|etiket|etiketler}} elle uygulanamaz: $1",
+       "tags-update-no-permission": "Tekil sürüm ve kayıt girilerindeki değişiklik etiketlerini değiştirmek veya kaldırmak için yetkiniz yok.",
+       "tags-update-add-not-allowed-one": "\"$1\" etiketi elle uygulanamaz.",
+       "tags-update-add-not-allowed-multi": "Bu {{PLURAL:$2|etiket|etiketler}} elle uygulanamaz: $1",
+       "tags-update-remove-not-allowed-one": "\"$1\" etiketinin kaldırılmasına izin verilmiyor.",
+       "tags-update-remove-not-allowed-multi": "Bu {{PLURAL:$2|etiket|etiketler}} elle kaldırılamaz: $1",
+       "tags-edit-title": "Etiketleri düzenle",
+       "tags-edit-manage-link": "Etiketleri yönet",
+       "tags-edit-revision-selected": "[[:$2]] için seçilen {{PLURAL:$1|sürüm|sürümler}}:",
+       "tags-edit-logentry-selected": "{{PLURAL:$1|Seçilen günlük kaydı|Seçilen günlük kayıtları}}:",
+       "tags-edit-revision-legend": "{{PLURAL:$1|Bu sürüme|Bu $1 sürüme}} etiket ekle veya kaldır.",
+       "tags-edit-logentry-legend": "{{PLURAL:$1|Bu günlük kaydına|Bu $1 günlük kaydına}} etiket ekle veya kaldır",
+       "tags-edit-existing-tags": "Mevcut etiketler:",
+       "tags-edit-existing-tags-none": "\"Hiçbiri\"",
+       "tags-edit-new-tags": "Yeni etiketler:",
+       "tags-edit-add": "Bu etiketleri ekleyin:",
+       "tags-edit-remove": "Bu etiketleri kaldır:",
+       "tags-edit-remove-all-tags": "(tüm etiketleri kaldır)",
+       "tags-edit-chosen-placeholder": "Bazı etiketleri seç",
+       "tags-edit-chosen-no-results": "Bunlarla eşleşen etiket bulunamadı",
+       "tags-edit-reason": "Neden:",
+       "tags-edit-revision-submit": "{{PLURAL:$1|Bu sürüme|$1 sürüme}} değişiklikleri uygula",
+       "tags-edit-logentry-submit": "{{PLURAL:$1|Bu günlük kaydına|Bu $1 günlük kaydına}} değişiklikleri uygula",
+       "tags-edit-success": "Değişiklikler başarıyla uygulandı.",
+       "tags-edit-failure": "Değişiklikler uygulanamadı:\n$1",
+       "tags-edit-nooldid-title": "Hedef sürüm geçersiz",
+       "tags-edit-nooldid-text": "Bu işlemi gerçekleştirmek için herhangi bir hedef sürüm belirtmediniz, ya da belirtilen sürüm mevcut değil.",
+       "tags-edit-none-selected": "Eklemek ya da çıkarmak için en az bir etiketi seçin lütfen.",
        "comparepages": "Sayfaları karşılaştır",
        "compare-page1": "Sayfa 1",
        "compare-page2": "Sayfa 2",
        "revdelete-restricted": "hizmetliler için uygulanmış kısıtlamalar",
        "revdelete-unrestricted": "hizmetliler için kaldırılmış kısıtlamalar",
        "logentry-block-block": "$1 {{GENDER:$2|engelledi}} {{GENDER:$4|$3}} engelleme süresi: $5 $6",
+       "logentry-block-unblock": "$1 kullanıcısının {{GENDER:$2|engeli kaldırıldı}} {{GENDER:$4|$3}}",
        "logentry-block-reblock": "$1 {{GENDER:$2|changed}} block settings for {{GENDER:$4|$3}} engelleme süresi $5 $6",
+       "logentry-suppress-block": "{{GENDER:$4|$3}} $1 tarafından {{GENDER:$2|engellendi}} Zamanaşımı: $5 $6",
        "logentry-suppress-reblock": "$1 {{GENDER:$2|changed}} block settings for {{GENDER:$4|$3}} engelleme süresi $5 $6",
+       "logentry-import-upload": "$1 dosya yükleme ile {{GENDER:$2|içe aktardı}}: $3",
+       "logentry-import-interwiki": "$1 başka bir vikiden şunu {{GENDER:$2|içe aktardı}}: $3",
+       "logentry-merge-merge": "$1, $3 sayfasını $4 ile {{GENDER:$2|birleştirdi}}($5 tarihine kadar olan sürümleri)",
        "logentry-move-move": "$1, $3 sayfasını $4 sayfasına {{GENDER:$2|taşıdı}}",
        "logentry-move-move-noredirect": "$1, $3 sayfasını $4 sayfasına yönlendirme olmaksızın {{GENDER:$2|taşıdı}}",
        "logentry-move-move_redir": "$1, $3 sayfasını $4 sayfasına yönlendirme üzerinden {{GENDER:$2|taşıdı}}",
        "logentry-rights-autopromote": "$1, $4 iken $5 olarak otomatik {{GENDER:$2|terfi edildi}}",
        "logentry-upload-upload": "$1 {{GENDER:$2|yükledi}} $3",
        "logentry-upload-overwrite": "$1 $3 dosyasının yeni bir sürümünü {{GENDER:$2|yükledi}}",
+       "logentry-upload-revert": "$1 {{GENDER:$2|yükledi}}: $3",
+       "log-name-managetags": "Etiket yönetimi günlüğü",
+       "log-description-managetags": "Bu sayfa [[Special:Tags|etiketlere]] dair idare görevlerini listelemektedir. Günlükte sadece yöneticiler tarafından elle yapılan eylemler bulunmaktadır; viki yazılımı tarafından bu günlükte kayıt altına alınmadan etiketler yaratılabilir veya silinebilir.",
+       "logentry-managetags-create": "$1, \"$4\" etiketini {{GENDER:$2|oluşturdu}}",
+       "logentry-managetags-delete": "$1 \"$4\" etiketini {{GENDER:$2|sildi}} ($5 {{PLURAL:$5|sürüm veya günlük kaydından|sürüm ve/veya günlük kaydından}} kaldırıldı)",
+       "logentry-managetags-activate": "$1, \"$4\" etiketini kullanıcı ve botların {{GENDER:$2|kullanımına açtı}}",
+       "logentry-managetags-deactivate": "$1, \"$4\" etiketini kullanıcı ve botların {{GENDER:$2|kullanımına kapadı}}",
+       "log-name-tag": "Etiket günlüğü",
+       "log-description-tag": "Bu sayfa kullanıcıların ne zaman tekil sürümlere veya günlük kayıtlarına etiket ekleyip kaldırdığını göstermektedir. Bir düzenleme, silme veya benzeri işlem eşliğinde gerçekleşen etiket değişikliği işlemleri burada listelenmemektedir.",
+       "logentry-tag-update-add-revision": "$1, $3 sayfasının $4 numaralı sürümüne {{PLURAL:$7|etiket|etiket}} {{GENDER:$2|ekledi}}: $6",
+       "logentry-tag-update-add-logentry": "$1, $3 sayfasının $5 numaralı günlük kaydına {{PLURAL:$7|etiket|etiket}} {{GENDER:$2|ekledi}}: $6",
+       "logentry-tag-update-remove-revision": "$1, $3 sayfasının $4 numaralı sürümünden {{PLURAL:$9|etiket|etiket}} {{GENDER:$2|kaldırdı}}: $8",
+       "logentry-tag-update-remove-logentry": "$1, $3 sayfasının $5 numaralı günlük kaydından {{PLURAL:$9|etiket|etiket}} {{GENDER:$2|kaldırdı}}: $8",
+       "logentry-tag-update-revision": "$1, $3 sayfasının $4 numaralı sürümündeki etiketleri  {{GENDER:$2|güncelledi}}. Eklenen {{PLURAL:$7|etiket|etiket}}: $6; kaldırılan {{PLURAL:$9|etiket|etiket}}: $8",
+       "logentry-tag-update-logentry": "$1, $3 sayfasının $5 numaralı günlük kaydındaki etiketleri {{GENDER:$2|güncelledi}}. Eklenen {{PLURAL:$7|etiket|etiket}}: $6; kaldırılan {{PLURAL:$9|etiket|etiket}}: $8",
        "rightsnone": "(hiçbiri)",
        "revdelete-summary": "değişiklik özeti",
        "feedback-adding": "Sayfaya geribildirim ekleniyor...",
        "feedback-bugornote": "Eğer teknik bir problemi detaylarıyla açıklamaya hazırsanız lütfen [$1 bir hata raporlayın]. Diğer taraftan, aşağıdaki kolay formu kullanabilirsiniz. Yorumunuz, kullanıcı adınızla beraber \"[$3 $2]\" sayfasına eklenecektir.",
        "feedback-cancel": "İptal",
        "feedback-close": "Tamamlandı",
+       "feedback-external-bug-report-button": "Teknik hata raporu ilet",
+       "feedback-dialog-title": "Geribildirim gönder",
+       "feedback-dialog-intro": "Geribildirimde bulunmak için aşağıdaki basit formu kullanabilirsiniz. Yorumunuz kullanıcı adınızla beraber \"$1\" sayfasına eklenecektir.",
+       "feedback-error-title": "Hata",
        "feedback-error1": "Hata: Bilinmeyen API sonucu",
        "feedback-error2": "Hata: Düzenleme başarısız oldu",
        "feedback-error3": "Hata: API'den yanıt yok",
+       "feedback-error4": "Hata: Belirtilen geribildirim başlığına gönderi yapılamıyor",
        "feedback-message": "Mesaj:",
        "feedback-subject": "Konu:",
        "feedback-submit": "Gönder",
+       "feedback-terms": "Geribildirimimle beraber iletilicek ve açıkça görüntülenecek bilgiler arasında, kullandığım tarayıcının ve işletim sistemimimin sürüm bilgisinin tam olarak bulunduğunu anlıyor ve buna izin veriyorum.",
+       "feedback-termsofuse": "Kullanım Şartları'na uygun biçimde geribildirim vermeyi kabul ediyorum.",
        "feedback-thanks": "Teşekkürler! Görüşleriniz \"[$2 $1]\" sayfasında paylaşılmıştır.",
+       "feedback-thanks-title": "Teşekkürler!",
+       "feedback-useragent": "Kullanıcı temsilcisi",
        "searchsuggest-search": "Ara",
        "searchsuggest-containing": "içeren...",
        "api-error-badaccess-groups": "Bu wiki için dosya yüklemenize izin verilmiyor.",
        "api-error-stashfailed": "İç hata: Sunucu, geçici dosyaları kaybetti.",
        "api-error-publishfailed": "İç hata: Sunucu geçici dosyayı yayınlarken başarısız oldu.",
        "api-error-stasherror": "Dosya zulaya yüklenirken hata oluştu.",
+       "api-error-stashedfilenotfound": "Saklandığı yerden yüklenmeye çalışılan dosya bu yerde bulunamadı.",
+       "api-error-stashpathinvalid": "Saklanan dosyanın bulunması beklenen yer bilgisi geçersiz.",
+       "api-error-stashfilestorage": "Dosya zulaya saklanmaya çalışılırken hata ile karşılaşıldı.",
+       "api-error-stashzerolength": "Sunucu dosyayı zulada saklayamadı; çünkü dosya boyutu sıfır uzunlukta.",
+       "api-error-stashnotloggedin": "Dosya yükleme zulasına dosya kaydetmek için oturum açmış olmanız gerekiyor.",
+       "api-error-stashwrongowner": "Zulada erişmeye çalıştığınız belge size ait değil.",
+       "api-error-stashnosuchfilekey": "Zulaya erişmeye çalışırken kullanılan dosya anahtarı mevcut değil.",
        "api-error-timeout": "Sunucu beklenen süre içinde yanıt vermedi.",
        "api-error-unclassified": "Bilinmeyen bir hata oluştu.",
        "api-error-unknown-code": "Bilinmeyen hata: \"$1\"",
        "expand_templates_generate_xml": "XML derleyici ağacını göster",
        "expand_templates_generate_rawhtml": "Ham HTML göster",
        "expand_templates_preview": "Önizleme",
+       "expand_templates_preview_fail_html": "<em>{{SITENAME}} işlenmemiş HTML koduna izin verdiği ve oturum verilerinde kayıp yaşandığı için, ön izleme, JavaScript saldırılarına karşı önlem olarak gizlendi.</em>\n\n<strong>Eğer meşru bir ön izleme girişimi idiyse, tekrar deneyiniz.</strong>\nYine de çalışmıyorsa, [[Special:UserLogout|oturum kapamayı]] ve tekrar açmayı deneyin.",
+       "expand_templates_preview_fail_html_anon": "<em>{{SITENAME}} işlenmemiş HTML koduna izin verdiği ve oturum verilerinde kayıp yaşandığı için, ön izleme, JavaScript saldırılarına karşı önlem olarak gizlendi.</em>\n\n<strong>Eğer meşru bir ön izleme girişimi idiyse, lütfen  [[Special:UserLogin|oturum açarak]] tekrar deneyin.</strong>",
        "pagelanguage": "Sayfa dili seçicisi",
        "pagelang-name": "Sayfa",
        "pagelang-language": "Dil",
        "right-pagelang": "Sayfa dilini değiştir",
        "action-pagelang": "sayfa dilini değiştir",
        "log-name-pagelang": "Dil günlüğünü değiştir",
+       "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ışı''')",
        "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%)",
        "special-characters-group-gujarati": "Gücerat",
        "special-characters-group-thai": "Tay",
        "special-characters-group-lao": "Lao",
-       "special-characters-group-khmer": "Kmer"
+       "special-characters-group-khmer": "Kmer",
+       "special-characters-title-endash": "tire",
+       "special-characters-title-emdash": "uzun çizgi",
+       "special-characters-title-minus": "Eksi işareti"
 }
index 49d66ac..c9b0a5a 100644 (file)
        "import-interwiki-history": "Бу битнең барлык үзгәртү тарихын күчермәләү",
        "import-interwiki-templates": "Барлык үрнәкләрне кертү",
        "import-interwiki-submit": "Импортлау",
-       "import-interwiki-namespace": "Исемнәр тирәлеге:",
        "import-upload-filename": "Файл исеме:",
        "import-comment": "Искәрмә:",
        "importtext": "Зинһар өчен, битне күчерү өчен [[Special:Export|махсус корал]] кулланыгыз. Файлны дискка саклагыз, аннан соң монда йөкләгез.",
index bd1e1a9..b6a4003 100644 (file)
        "importfailed": "İmportlaw xatası: <nowiki>$1</nowiki>",
        "importsuccess": "İmportlaw uñışlı buldı!",
        "importlogpage": "Kertü köndälege",
-       "import-logentry-interwiki": "«$1» — wikiara  importlaw",
        "tooltip-pt-userpage": "Qullanuçı bitegez",
        "tooltip-pt-mytalk": "Bäxäs bitegez",
        "tooltip-pt-preferences": "Köylänmäläregez",
index ce10969..e35ef3a 100644 (file)
        "history": "Арынның төөгүзү",
        "history_short": "Төөгү",
        "printableversion": "Саазынга үндүрерин көөрү",
-       "permalink": "Турум холбаа",
+       "permalink": "Турум айтыг",
        "print": "Саазынга үндүрер",
        "view": "Көөрү",
        "edit": "Эдер",
        "mainpage": "Кол Арын",
        "mainpage-description": "Кол Арын",
        "policy-url": "Project:Чурум",
-       "portal": "Ниитилелдиң хаалгазы",
-       "portal-url": "Project:Ниитилелдиң хаалгазы",
+       "portal": "Ниитилел хаалгазы",
+       "portal-url": "Project:Ниитилел хаалгазы",
        "privacy": "Актыг бүзүрел дугуржулгазы",
        "privacypage": "Project:Актыг бүзүрел дугуржулгазы",
        "badaccess": "Алдаг:Эргеңер чок.",
        "nstab-user": "Ажыглакчының арыны",
        "nstab-media": "Медиа арыны",
        "nstab-special": "Тускай арын",
-       "nstab-project": "Төлевилелдиң арыны",
+       "nstab-project": "Төлевилел дугайында",
        "nstab-image": "Файл",
        "nstab-mediawiki": "Чагаа",
        "nstab-template": "Майык",
        "createaccountreason": "Чылдагаан:",
        "badretype": "Силерниң парлаан чажыт сөзүңер таарышпас.",
        "userexists": "Силерниң парлаан адыңар амгы үеде ажыглаттынып турар.\nӨске аттан шилип алыңар.",
-       "loginerror": "Ð\91агай ÐºÐ¸Ñ\80еÑ\80и",
+       "loginerror": "Ð\9aиÑ\80им Ð°Ð»Ð´Ð°Ð° (ЧазÑ\8bглÑ\8bг ÐºÐ¸Ñ\80им)",
        "loginsuccesstitle": "Чедимчелиг кирери",
        "login-userblocked": "Бо ажыглакчы blocked.  Кирери хоржок.",
        "password-login-forbidden": "Бо ажыглакчының ады болгаш чажыт сөс хоржок.",
        "subject": "Кол сөс:",
        "minoredit": "Бо эдилге бичии-дир",
        "watchthis": "Бо арынны хайгаараары",
-       "savearticle": "Арынны шыгжаары",
+       "savearticle": "Арын шыгжаар",
        "preview": "Чижеглей көөрү",
        "showpreview": "Чижеглей көөрү",
        "showdiff": "Өскерлиишкиннерни көргүзери",
-       "anoneditwarning": "'''Кичээңгейлиг!''' Силер сайтче авторжуттунмаан силер.\nБо арынның өскертилге төөгүзүнче Силерниң IP-адрезиңер бижитинип каар.",
+       "anoneditwarning": "<strong>Кичээңгейлиг!</strong> Силер сайтче кирип албаан силер. Чаартылгалар киирер болзуңарза, Силерниң IP-адрезиңер чүүлдүң төөгүзүнге көстүп кээр. Кажан сайтче <strong>[$1 шолаңар-биле кире бээриңерге]</strong> азы <strong>[$2 чаа шола чаяап алырыңарга]</strong>, эдилгеңерни шолаңар-биле холбаап каар база Силерге ажыктыг тускай херекселдер тыптып келир.",
        "missingcommenttext": "Тайылбырни адаанда чогаадыңар.",
        "summary-preview": "Түңнелдү чижеглей көөрү:",
        "subject-preview": "Кол сөс чижеглей көөрү:",
        "post-expand-template-inclusion-category": "Кожар майыктарга чөшпээрээн хемчээлин ашкан арыннар",
        "post-expand-template-argument-warning": "'''Кичээнгейлиг:''' бо арында тоң дора дээрге (по крайней мере) чаңгыс майыктыг, а ооң аргументизи эмин эрттир улуг калбаяр хемчээлдиг.\nЫндыг чергелиг аргументилерни эрттирип каан.",
        "post-expand-template-argument-category": "Аргументилери салдынмаан майыктарлыг '''арыннар'''",
+       "undo-success": "Ук эдилгени ойталап болур. Адаанда янзыларын (версияларын) хынавышаан, тааржыр өскертилгелерни көжүрүп алгаш, оларны арынга шыгжаарда, «Арынны бижидер» деп тананы базыптыңар.",
        "viewpagelogs": "Бо арынның журналын көргүзери",
        "nohistory": "Бо арынның өскерлиишкин төөгүзү чок.",
        "currentrev": "Амгы үе үндүрери",
        "email": "Э-чагаа",
        "prefs-help-email": "Э-шуудаң адрезин айтыры албан эвес, ынчалза-даа, уруңуңар (парольуңар) чиде бээрге, ол херек апаар.",
        "prefs-help-email-others": "Ол харылзаа медээлели база өске киржикчилерге хуу азы чугаалажылга арныңарга э-шуудаңыңар (e-mail) таварыштыр Силерниң-биле харылзажырынга ажыктыг. Ооң кадында Силерниң э-шуудаң адрезиңер кымга-даа көзүлбес.",
-       "prefs-info": "Кол медээлер",
+       "prefs-info": "Кол медээлел",
        "prefs-signature": "Хол үжүү",
        "prefs-diffs": "Ылгалдар",
        "editusergroup": "Ажыглакчының бөлгүмнерни өскертири",
        "newsectionsummary": "/* $1 */ чаа салбыр",
        "rc-enhanced-expand": "Тодаларны көргүзери (JavaScript херек)",
        "rc-enhanced-hide": "Тодаларны чажырары",
-       "recentchangeslinked": "Хамааржыр өскерлиишкиннер",
-       "recentchangeslinked-toolbox": "Хамааржыр өскерлиишкиннер",
+       "recentchangeslinked": "Хамаарышкан өскерилгелер",
+       "recentchangeslinked-toolbox": "Хамаарышкан өскерилгелер",
        "recentchangeslinked-title": "«$1» деп арынга хамаарыштырган өскерлиишкиннер",
        "recentchangeslinked-summary": "Айыткан арынның (азы айыткан аңгылалга хамаарышкан) шөлүлүглериниң чедер арыннарнының чаа өскерилгер даңзызы.\n[[Special:Watchlist|Силерниң хайгаарал даңзызынче]] кирип турар арыннарны '''ылгап каан'''.",
        "recentchangeslinked-page": "Арынның ады:",
        "tooltip-pt-login": "Маңаа системаже киир бүрүткенип болур, ынчалза-даа ол албан эвес.",
        "tooltip-pt-logout": "Үнери",
        "tooltip-ca-talk": "Бо арын дугайында чыгаалажыры",
-       "tooltip-ca-edit": "СилеÑ\80 Ð±Ð¾ Ð°Ñ\80Ñ\8bннÑ\8b Ñ\8dдип Ð±Ð¾Ð»Ñ\83Ñ\80. Ð¨Ñ\8bгжааÑ\80 Ð¼Ñ\83Ñ\80Ñ\83нда Ñ\87ижеглеп ÐºÓ©Ñ\80ем.",
+       "tooltip-ca-edit": "Ук Ð°Ñ\80Ñ\8bннÑ\8b Ñ\8dдип Ð±Ð¾Ð»Ñ\83Ñ\80 Ñ\81илеÑ\80. Ð­Ð´Ð¸Ð»Ð³ÐµÒ£ÐµÑ\80 Ð±Ð¸Ð¶Ð¸Ð´ÐµÑ\80ин Ð±ÐµÑ\80Ñ\82инде Ñ\87ижеглей ÐºÓ©Ó©Ñ\80үн Ñ\83Ñ\82паңаÑ\80.",
        "tooltip-ca-addsection": "Чаа салбыр чаяар",
        "tooltip-ca-viewsource": "Бо арын камгалаттырган.\nДөзү кодун көрүп болур силер.",
        "tooltip-ca-history": "Арынның мурнуку өскерлиишкиннери",
        "tooltip-t-upload": "Файлдарны киирери",
        "tooltip-t-specialpages": "Шупту тускай арыннар даңзызы",
        "tooltip-t-print": "Бо арынның парлаттынар хевири",
-       "tooltip-t-permalink": "Ð\90Ñ\80Ñ\8bннÑ\8bÒ£ Ð±Ð¾ Ñ\8fнзÑ\8b\85евиÑ\80иниң Ñ\82Ñ\83Ñ\80Ñ\83м Ñ\88өлүлгези",
+       "tooltip-t-permalink": "Ук Ð°Ñ\80Ñ\8bннÑ\8bÒ£ Ð°Ð¼Ð³Ñ\8b Ñ\8fнзÑ\8bзÑ\8bнÑ\8bÒ£ Ñ\82Ñ\83Ñ\80Ñ\83м Ð°Ð¹Ñ\82Ñ\8bÑ\8b",
        "tooltip-ca-nstab-main": "Допчы арынын көөрү",
        "tooltip-ca-nstab-user": "Ажыглакчының арынын көөрү",
        "tooltip-ca-nstab-media": "Медиа арынын көөрү",
        "tooltip-undo": "Киирген эдигни казааш, ойталалдың чылдагаанын айтыр аргалыг мурнай көргүзүүн көргүзер.",
        "tooltip-summary": "Кысказы-биле бижиңер",
        "anonymous": "{{grammar:genitive|{{SITENAME}}}} адыжок {{PLURAL:$1|киржикчизи}}",
-       "pageinfo-toolboxlink": "Арын дугайында медээлел",
+       "pageinfo-title": "«$1» дугайында",
+       "pageinfo-header-basic": "Кол медээлел",
+       "pageinfo-toolboxlink": "Арын дугайында",
        "filedelete-missing": "«$1» деп файл чок, ынчангаш ол ап калдынмас.",
        "previousdiff": "← Артык эрги үндүрери",
        "nextdiff": "Артык чаа үндүрери →",
index 2c73fb5..34bf7c4 100644 (file)
        "import-interwiki-history": "بۇ بەتنىڭ ھەممە تارىخى تۈزىتىلگەن نەشرىنى كۆچۈر.",
        "import-interwiki-templates": "ھەممە قېلىپىنى ئۆز ئىچىگە ئالىدۇ",
        "import-interwiki-submit": "ئەكىر",
-       "import-interwiki-namespace": "نىشان ئات بوشلۇقى:",
-       "import-interwiki-rootpage": "نىشان غول بەت (تاللاشچان):",
        "import-upload-filename": ":ھۆججەت ئاتى",
        "import-comment": "ئىزاھات:",
        "importtext": "[[Special:Export|چىقىرىش ئىقتىدارى]]نى ئىشلىتىپ ئەسلى ۋىكىدىن ھۆججەت چىقىرىڭ .\nكومپيۇتېرىڭىزدا ساقلاپ ئاندىن بۇ جايغا يۈكلەڭ.",
index e0f73c5..26e9bc8 100644 (file)
        "history-feed-description": "Історія редагувань цієї сторінки в вікі",
        "history-feed-item-nocomment": "$1 в $2",
        "history-feed-empty": "Такої сторінки не існує.\nЇї могли вилучити чи перейменувати.\nСпробуйте [[Special:Search|знайти]] подібні сторінки.",
-       "history-edit-tags": "Редагувати теги обраних ревізій",
+       "history-edit-tags": "Редагувати мітки обраних версій",
        "rev-deleted-comment": "(опис редагування вилучено)",
        "rev-deleted-user": "(ім'я автора стерто)",
        "rev-deleted-event": "(запис журналу вилучений)",
        "right-viewsuppressed": "Перегляд змін, приховаих від усіх користувачів",
        "right-suppressionlog": "перегляд приватних журналів",
        "right-block": "заборона редагувань для інших дописувачів",
-       "right-blockemail": "блокÑ\83ваннÑ\8f ÐºÐ¾Ñ\80иÑ\81Ñ\82Ñ\83ваÑ\87ам надсилання електронної пошти",
+       "right-blockemail": "Ð\91локÑ\83ваннÑ\8f ÐºÐ¾Ñ\80иÑ\81Ñ\82Ñ\83ваÑ\87а Ð²Ñ\96д надсилання електронної пошти",
        "right-hideuser": "блокування імені користувача і приховування його",
        "right-ipblock-exempt": "уникнення блокування за IP-адресою, автоблокування і блокування діапазонів",
        "right-proxyunbannable": "уникнення автоматичного блокування проксі-серверів",
        "right-sendemail": "надсилання електронної пошти іншим користувачам",
        "right-passwordreset": "Перегляд повідомлень електронної пошти для зміни паролю",
        "right-managechangetags": "створення та вилучення [[Special:Tags|міток]] з бази даних",
+       "right-applychangetags": "додавання [[Special:Tags|міток]] разом зі змінами",
+       "right-changetags": "додавання або вилучення будь-яких [[Special:Tags|міток]] для певних версій сторінок або записів журналів",
        "newuserlogpage": "Журнал нових користувачів",
        "newuserlogpagetext": "Список нещодавно зареєстрованих користувачів.",
        "rightslog": "Журнал прав користувача",
        "action-editmyprivateinfo": "редагування своєї приватної інформації",
        "action-editcontentmodel": "редагувати модель вмісту сторінки",
        "action-managechangetags": "створення та вилучення міток з бази даних",
+       "action-applychangetags": "додавання міток разом зі змінами",
+       "action-changetags": "додавання або вилучення будь-яких міток для певних версій сторінок або записів журналів",
        "nchanges": "$1 {{PLURAL:$1|зміна|зміни|змін}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|зміна з останнього візиту|зміни з останнього візиту|змін з останнього візиту}}",
        "enhancedrc-history": "історія",
        "logempty": "В журналі немає подібних записів.",
        "log-title-wildcard": "Знайти заголовки, що починаються з цих символів",
        "showhideselectedlogentries": "Показати/приховати виділені записи журналу",
+       "log-edit-tags": "Змінити мітки для вибраних записів журналів",
        "allpages": "Усі сторінки",
        "nextpage": "Наступна сторінка ($1)",
        "prevpage": "Попередня сторінка ($1)",
        "emailccsubject": "Копія вашого повідомлення до $1: $2",
        "emailsent": "Електронне повідомлення надіслано",
        "emailsenttext": "Ваше електронне повідомлення надіслано.",
-       "emailuserfooter": "Цей лист був надісланий користувачеві $2 від користувача $1 за допомогою функції «Надіслати листа» проекту {{SITENAME}}.",
+       "emailuserfooter": "Цей лист був надісланий користувачеві $2 від користувача $1 за допомогою функції «{{int:emailpage}}» проекту {{SITENAME}}.",
        "usermessage-summary": "Залишити системне повідомлення.",
        "usermessage-editor": "Системний вісник",
        "usermessage-template": "MediaWiki:UserMessage",
        "import-interwiki-history": "Копіювати всю історію змін цієї сторінки",
        "import-interwiki-templates": "Включити всі шаблони",
        "import-interwiki-submit": "Імпортувати",
-       "import-interwiki-namespace": "Цільовий простір назв:",
-       "import-interwiki-rootpage": "Коренева сторінка (необов'язково):",
+       "import-mapping-namespace": "Імпортувати до простору назв:",
        "import-upload-filename": "Назва файлу:",
        "import-comment": "Примітка:",
        "importtext": "Будь ласка, експортуйте сторінку з іншої вікі, використовуючи [[Special:Export|засіб експорту]], збережіть файл, а потім завантажте його сюди.",
        "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",
        "tags-deactivate-reason": "Причина:",
        "tags-deactivate-not-allowed": "Неможливо вимкнути мітку «$1».",
        "tags-deactivate-submit": "Вимкнути",
-       "tags-edit-title": "Редагувати теги",
-       "tags-edit-existing-tags": "Існуючі теги:",
-       "tags-edit-new-tags": "Нові теги:",
+       "tags-apply-not-allowed-one": "Мітку «$1» не можна додавати вручну.",
+       "tags-apply-not-allowed-multi": "{{PLURAL:$2|Таку мітку|Такі мітки}} не можна додавати вручну: $1",
+       "tags-update-add-not-allowed-multi": "{{PLURAL:$2|Таку мітку|Такі мітки}} не можна додавати вручну: $1",
+       "tags-update-remove-not-allowed-one": "Мітку «$1» не дозволено вилучати.",
+       "tags-edit-title": "Редагувати мітки",
+       "tags-edit-revision-legend": "Додати або вилучити мітки з {{PLURAL:$1|цієї версії|усіх $1 версій}}",
+       "tags-edit-existing-tags": "Існуючі мітки:",
+       "tags-edit-new-tags": "Нові мітки:",
+       "tags-edit-add": "Додати ці мітки:",
+       "tags-edit-remove": "Видалити ці мітки:",
+       "tags-edit-reason": "Причина:",
+       "tags-edit-success": "Зміни успішно застосовано",
+       "tags-edit-none-selected": "Будь ласка, оберіть принаймні одну мітку, щоб додати або вилучити.",
        "comparepages": "Порівняння сторінок",
        "compare-page1": "Сторінка 1",
        "compare-page2": "Сторінка 2",
index 87dd1a9..f391f1d 100644 (file)
@@ -22,7 +22,8 @@
                        "Calak",
                        "عرفان ارشد",
                        "Obaid Raza",
-                       "عثمان خان شاہ"
+                       "عثمان خان شاہ",
+                       "Syedalinaqinaqvi"
                ]
        },
        "tog-underline": "ربط کی خط کشیدگی:",
        "moredotdotdot": "اور...",
        "morenotlisted": "یہ فہرست مکمل نہیں ہے۔",
        "mypage": "میرا صفحہ",
-       "mytalk": "میری گفتگو",
+       "mytalk": "تبادلۂ خیال",
        "anontalk": "اس IP کیلیے بات چیت",
        "navigation": "رہنمائی",
        "and": "&#32;اور",
        "pool-errorunknown": "نامعلوم خطا",
        "poolcounter-usage-error": "استعمال میں خامی: $1",
        "aboutsite": "تعارف {{SITENAME}}",
-       "aboutpage": "منصوبہ:تعارف",
+       "aboutpage": "Project:تعارف",
        "copyright": "تمام مواد $1 کے تحت میسر ہے، جب تک کوئی دوسری وجہ نا ہو۔",
        "copyrightpage": "{{ns:project}}:حقوق تصانیف",
        "currentevents": "حالیہ واقعات",
        "disclaimers": "اعلانات",
        "disclaimerpage": "Project:عام اعلان",
        "edithelp": "معاونت براۓ ترمیم",
-       "mainpage": "صفحہ اول",
+       "helppage-top-gethelp": "مدد",
+       "mainpage": "صفحۂ اول",
        "mainpage-description": "صفحہ اول",
        "policy-url": "Project:حکمتِ عملی",
        "portal": "دیوان عام",
        "badarticleerror": "اس صفحہ پر یہ عمل انجام نہیں دیا جاسکتا۔",
        "cannotdelete": "صفحہ یا ملف $1 کو حذف نہیں کیا جاسکتا.\nہوسکتا ہے کہ اسے پہلے ہی کسی نے حذف کردیا ہو.",
        "cannotdelete-title": "صفحہ ھذف نہیں کیا جا سکتا \"$1\"",
+       "delete-hook-aborted": "حذف شدگی روک دی گئی\nوضاحت نہیں کی گئی",
        "badtitle": "خراب عنوان",
        "badtitletext": "درخواست شدہ صفحہ کا عنوان ناقص، خالی، یا کوئی غلط ربط شدہ بین لسانی یا بین ویکی عنوان ہے.\nشاید اِس میں ایک یا زیادہ ایسے حروف موجود ہوں جو عنوانات میں استعمال نہیں ہوسکتے.",
        "perfcached": "ذیلی ڈیٹا ابطن شدہ (cached) ہے اور اِس کے پُرانے ہونے کا امکان ہے. A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.",
        "gotaccountlink": "داخل ہوجائیے",
        "userlogin-resetlink": "داخلِ نوشتہ ہونے کی تفاصیل بھول گئے ہیں؟",
        "userlogin-resetpassword-link": "کلمہ شناخت بھول گئے؟",
+       "userlogin-helplink2": "داخل ہو کر ہماری مدد کریں",
        "createacct-emailrequired": "ای میل پتہ",
        "createacct-emailoptional": "ای میل ایڈریس (اختیاری)",
        "createacct-email-ph": "اپنا برقی پتہ لکھیں",
+       "createacct-another-email-ph": "برقی پتہ لکھیں",
        "createaccountmail": "بذریعۂ برقی ڈاک",
        "createacct-realname": "اصلی نام (اختیاری)",
        "createaccountreason": "وجہ:",
        "createacct-reason": "وجہ",
+       "createacct-reason-ph": "آپ دوسرا کھاتہ کیوں تخلیق کررہے ہیں",
        "createacct-captcha": "حفاظتی تدبیر",
        "createacct-imgcaptcha-ph": "آپ اوپر دیکھ متن داخل کریں",
        "createacct-submit": "آپ کا کھاتا بنائیں",
+       "createacct-another-submit": "دوسرا کھاتہ تخلیق کریں",
        "createacct-benefit-heading": "{{SITENAME}} آپ جیسے لوگوں کی طرف سے بنایا گیا ہے ۔",
-       "createacct-benefit-body1": "ترمیم",
+       "createacct-benefit-body1": "{{PLURAL:$1|ترمیم|ترامیم}}",
        "createacct-benefit-body2": "$1 {{PLURAL:$1|صفحہ|صفحات}}",
-       "createacct-benefit-body3": "شرکت Ú©Ø±Ù\86Û\92 Ù\88اÙ\84Û\92 Ø§Ø³ Ù\85اÛ\81 Ú©Û\92",
+       "createacct-benefit-body3": "حاÙ\84Û\8cÛ\81 {{PLURAL:$1|شرکت Ú©Ø±Ù\86Û\92 Ù\88اÙ\84ا|شرکت Ú©Ø±Ù\86Û\92 Ù\88اÙ\84Û\92}}",
        "badretype": "درج شدہ کلمۂ شناخت اصل سے مطابقت نہیں رکھتا۔",
        "userexists": "داخل کردہ اسم صارف پہلے سے مستعمل ہے۔\nبراہِ کرم! کوئی دوسرا اسم منتخب کیجئے۔",
        "loginerror": "داخلے میں غلطی",
        "wrongpasswordempty": "کلمۂ شناخت ندارد۔ دوبارہ کوشش کریں۔",
        "passwordtooshort": "آپکا منتخب کردہ پارلفظ مختصر ہے. پارلفظ کم از کم {{PLURAL:$1|1 محرف|$1 محارف}} ہونا چاہئے.",
        "password-name-match": "آپکا پارلفظ آپکے اسمِ صارف سے مختلف ہونا چاہئے.",
+       "password-login-forbidden": "اس صارف نام یا کلمۂ شناخت (پاسورڈ) کا استعمال ممنوع ہے",
        "mailmypassword": "نیا پارلفظ برقی ڈاک میں بھیجو",
        "passwordremindertitle": "نیا عارضی کلمۂ شناخت برائے {{SITENAME}}",
        "passwordremindertext": "(IP پتہ $1 سے) کسی (یا شاید آپ) نے {{SITENAME}} ($4)\nکیلئے نئی کلمۂ شناخت کیلئے التماس کیا. ایک عارضی کلمۂ شناخت \"$3\"\nبرائے صارف \"$2\" تخلیق کیا گیا ہے. اگر یہ آپ کا ارادہ تھا، تو آپ\nکو چاہئے کہ داخلِ نوشتہ ہونے کے بعد نئے کلمۂ شناخت کا انتخاب کریں.\nآپ کا کلمۂ شناخت {{PLURAL:$5|ایک دِن|$5 دِن}} کے بعد ناکارہ ہوجائے گا.\n\nاگر کسی اَور نے یہ التماس کیا ہے، یا آپ کو اپنا کلمۂ شناخت یاد آگیا ہے،\nاور آپ اسے تبدیل نہیں کرنا چاہتے، تو آپ یہ پیغام نظر انداز کرسکتے ہیں اور\nآپنا پُرانا کلمۂ شناخت کا استعمال جاری رکھ سکتے ہیں.",
        "noemailprefs": "اِن خصائص کو کام میں لانے کیلئے اپنے ترجیحات میں برقی ڈاک کا پتہ متعین کیجئے.",
        "emailconfirmlink": "اپنے برقی پتہ کی تصدیق کیجئے",
        "invalidemailaddress": "برقی پتہ قبول نہیں کیا جاسکتا کیونکہ یہ غلط شکل میں ہے.\nبراہِ کرم! ایک برقی پتہ صحیح شکل میں درج کیجئے یا جگہ کو خالی چھوڑ دیجئے.",
+       "emaildisabled": "اس سائٹ سے برقی خط نہیں بھیجے جاسکتے",
        "accountcreated": "تخلیقِ کھاتہ",
        "accountcreatedtext": "تخیلقِ کھاتۂ صارف براۓ $1۔",
        "createaccount-title": "کھاتہ سازی برائے {{SITENAME}}",
        "pt-createaccount": "کھاتا بنائیں",
        "pt-userlogout": "خارج ہوجائیں",
        "user-mail-no-addy": "برقی ڈاک بھیجنے کی کوشش بغیر برقی ڈاک پتہ",
+       "user-mail-no-body": "خالی یا بہت ہی مختصر برقی خط بھیجنے کی کوشش",
        "changepassword": "کلمۂ شناخت تبدیل کریں",
        "resetpass_announce": "آپ ایک برقی ارسال کردہ عارضی رمز کے ساتھ داخل ہوئے ہیں.\nداخلِ نوشتہ کے عمل کو مکمل کرنے کیلئے آپ کو یہاں نیا پارلفظ متعین کرنا ہوگا:",
        "resetpass_header": "کھاتہ کا پارلفظ تبدیل کریں",
        "resetpass-submit-loggedin": "پارلفظ کی تبدیلی",
        "resetpass-submit-cancel": "منسوخ",
        "resetpass-wrong-oldpass": "عارضی یا موجودہ پارلفظ ناقص ہے.\nآپ یا تو پہلے ہی سے آپنا پارلفظ کامیابی سے تبدیل کرچکے ہیں اور یا آپ نے نئے عارضی پارلفظ کی درخواست کی ہے.",
+       "resetpass-recycled": "براہ کرم اپنے موجودہ کلمۂ شناخت (پاسورڈ) سے مختلف کلمۂ شناخت سے بازترتیب (ری‌سیٹ) کریں",
+       "resetpass-temp-emailed": "آپ عارضی برقی خط سے بھیجے گئے کوڈ سے لاگ ان ہیں\nمکمل طور پر لاگ ان ہونے کے لیے آپ کو نیا پاسورڈ سیٹ کرنا پڑے گا",
        "resetpass-temp-password": "عارضی پارلفظ:",
        "passwordreset": "پارلفظ کی بازتعینی",
        "passwordreset-username": "اسمِ صارف:",
        "mergelog": "نوشتہ کا انضمام",
        "revertmerge": "غیر ضم",
        "history-title": "\"$1\" کا نظرثانی تاریخچہ",
+       "difference-title": "\"$1\" کے اعادوں کے درمیان فرق",
        "difference-multipage": "(فرق مابین صفحات)",
        "lineno": "لکیر $1:",
        "compareselectedversions": "منتخب متـن کا موازنہ",
        "editundo": "استرجع",
+       "diff-multi-sameuser": "({{PLURAL: $1 | ایک متوسط نظرثانی | $1 کئی متوسط نظرثانیاں}}ایک ہی صارف کی جانب سے نہیں دکھائی گئی)",
        "searchresults": "تلاش کا نتیجہ",
        "searchresults-title": "نتائجِ تلاش برائے \"$1\"",
        "notextmatches": "کوئی بھی مماثل متن موجود نہیں",
        "search-external": "بیرونی تلاش",
        "searchdisabled": "{{SITENAME}} تلاش غیرفعال.\nآپ فی الحال گوگل کے ذریعے تلاش کرسکتے ہیں.\nیاد رکھئے کہ اُن کے {{SITENAME}} اشاریے ممکناً پرانے ہوسکتے ہیں.",
        "preferences": "ترجیحات",
-       "mypreferences": "میری ترجیہات",
+       "mypreferences": "ترجیحات",
        "prefs-edits": "تدوینات کی تعداد:",
        "prefs-skin": "جِلد",
        "skin-preview": "پیش منظر",
        "recentchanges-label-bot": "یہ ایک روبالہ سے سرانجام شدہ ترمیم ہے",
        "recentchanges-label-unpatrolled": "اس ترمیم کی اب تک مراجعت نہیں کی گئی",
        "recentchanges-label-plusminus": "صفحہ کا حجم تبدیل شدہ بلحاظ بائٹ مقدار",
+       "recentchanges-legend-heading": "'''اختیارات'''",
        "rcnotefrom": "ذیل میں '''$2''' سے کی گئی تبدیلیاں ہیں ('''$1''' تبدیلیاں دکھائی جارہی ہیں)۔",
        "rclistfrom": "$3 $2 سےنئی تبدیلیاں دکھانا شروع کریں",
        "rcshowhideminor": "معمولی ترامیم $1",
        "newpageletter": "نیا ..",
        "boteditletter": " خودکار",
        "rc_categories_any": "کوئی بھی",
+       "rc-change-size-new": "$1 {{PLURAL:$1|بائٹ|بائٹس}} تبدیلی کے بعد",
        "rc-enhanced-expand": "تفصیلات دِکھائیں (JavaScript درکار)",
        "rc-enhanced-hide": "تفصیلات چھپائیے",
        "recentchangeslinked": "متعلقہ تبدیلیاں",
        "recentchangeslinked-feed": "متعلقہ تبدیلیاں",
        "recentchangeslinked-toolbox": "متعلقہ تبدیلیاں",
        "recentchangeslinked-title": "\"$1\" سے متعلقہ تبدیلیاں",
-       "recentchangeslinked-summary": "یہ ان تبدیلیوں کی فہرست ہے جو حال ہی میں کسی مخصوص صفحہ سے مربوط صفحات (یا مخصوص زمرہ کے اراکین) میں کی گئی ہیںـ \n\n[[Special:Watchlist | آپ کی زیر نظر فہرست]] میں یہ صفحات متجل (bold) نظر آئیں گےـ",
+       "recentchangeslinked-summary": "یہ ان تبدیلیوں کی فہرست ہے جو حال ہی میں کسی مخصوص صفحہ سے مربوط صفحات (یا مخصوص زمرہ کے اراکین) میں کی گئی ہیں\n\n[[Special:Watchlist|آپ کی زیر نظر فہرست]] میں یہ صفحات متجل (bold) نظر آئیں گےـ",
        "recentchangeslinked-page": "صفحۂ منصوبہ دیکھئے",
        "upload": "فائل اثقال",
        "uploadbtn": "زبراثقال ملف (اپ لوڈ فائل)",
        "filehist-current": "حالیہ",
        "filehist-datetime": "تاریخ/وقت",
        "filehist-thumb": "اظفورہ",
+       "filehist-thumbtext": "$1 کا تھمب نیل (thumbnail) ورژن",
        "filehist-user": "صارف",
        "filehist-dimensions": "ابعاد",
        "filehist-filesize": "تصویر کا حجم",
        "emailmessage": "پیغام:",
        "emailsend": "بھیجیں",
        "watchlist": "میری زیرنظرفہرست",
-       "mywatchlist": "میری زیرنظرفہرست",
+       "mywatchlist": "زیرنظرفہرست",
        "watchlistfor2": "براۓ $1 ($2)",
        "addedwatchtext": "یہ صفحہ \"<nowiki>$1</nowiki>\" آپکی [[Special:Watchlist|زیرنظر]] فہرست میں شامل کردیا گیا ہے۔ اب مستقل میں اس صفحے اور اس سے ملحقہ تبادلہ خیال کا صفحے میں کی جانے والی تبدیلوں کا اندراج کیا جاتا رہے گا، اور ان صفحات کی شناخت کو سہل بنانے کے لیۓ [[Special:حالیہ تبدیلیاں|حالیہ تبدیلیوں کی فہرست]] میں انکو '''مُتَجَل''' (bold) تحریر کیا جاۓ گا۔ <p> اگر آپ کسی وقت اس صفحہ کو زیرنظرفہرست سے خارج کرنا چاہیں تو اوپر دیۓ گۓ \"زیرنظرمنسوخ\" پر ٹک کیجیۓ۔",
        "removedwatchtext": "صفحہ \"[[:$1]]\" آپ کی زیر نظر فہرست سے خارج کر دیا گیا۔",
        "deletereasonotherlist": "دوسری وجہ",
        "rollback": "ترمیمات سابقہ حالت پرواپس",
        "rollbacklink": "واپس سابقہ حالت",
+       "rollbacklinkcount": "استرجع $1 {{PLURAL:$1|ترمیم|ترامیم}}",
        "rollbackfailed": "سابقہ حالت پر واپسی ناکام",
        "cantrollback": "تدوین ثانی کا اعادہ نہیں کیا جاسکتا؛ کیونکہ اس میں آخری بار حصہ لینے والا ہی اس صفحہ کا واحد کاتب ہے۔",
        "protectlogpage": "نوشتۂ محفوظ شدگی",
        "blanknamespace": "(مرکز)",
        "contributions": "{{جنس:$1|صارف}} شراکتیں",
        "contributions-title": "مساہماتِ صارف برائے $1",
-       "mycontris": "میرا حصہ",
+       "mycontris": "شراکت",
        "contribsub2": "براۓ $1 ($2)",
        "uctop": " (اوپر)",
        "month": "مہینہ (اور اُس سے قبل):",
        "version": "ورژن",
        "specialpages": "خصوصی صفحات",
        "tag-filter": "[[Special:Tags|لوحہ]] فلٹر:",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|ٹیگ|ٹیگز}}]]: $2)",
        "logentry-delete-delete": "$1 {{GENDER:$2|حذف کیا گیا}} صفحہ $3",
+       "logentry-move-move": "$1 نے صفحہ $3 کو بجانب $4 منتقل کیا",
        "logentry-newusers-create": "صارف کھاتہ $1 {{GENDER:$2|بنایا گیا}}",
        "rightsnone": "(کچھ نہیں)",
        "revdelete-summary": "خلاصۂ تدوین",
index 2df5ff4..0d4696b 100644 (file)
        "otherlanguages": "Altre lengue",
        "redirectedfrom": "(Rimando da <b>$1</b>)",
        "redirectpagesub": "Pagina de rimando",
+       "redirectto": "Rimanda a:",
        "lastmodifiedat": "Ultimo canbiamento de sta pagina: $2, $1.",
        "viewcount": "Sta pagina la xe stà leta {{PLURAL:$1|na olta|$1 olte}}.",
        "protectedpage": "Pagina proteta",
        "login-abort-generic": "El to login no xe riusido - Anułà.",
        "loginlanguagelabel": "Lengua: $1",
        "suspicious-userlogout": "Ła to richiesta de disconesion xè sta negà parché e a senbra invià da on browser non funsionante o on proxy de caching.",
+       "pt-login": "Va drento",
        "php-mail-error-unknown": "Erore sconosudo nte'l funsionamento deła posta ełetronega PHP",
        "user-mail-no-addy": "Te ghe provà spedire un mesajo de posta ełetronega sensa un indiriso.",
        "user-mail-no-body": "Tentà de inviar na e-mail có un testo vodo o masa curto.",
        "rcnotefrom": "Qui di seguito sono elencate le modifiche da '''$2''' (fino a '''$1''').",
        "rclistfrom": "Mostra i canbiamenti fati da ƚe $2 del $3",
        "rcshowhideminor": "$1 i canbiamenti picenini",
+       "rcshowhideminor-show": "Mostra",
+       "rcshowhideminor-hide": "Scondi",
        "rcshowhidebots": "$1 i bot",
+       "rcshowhidebots-show": "Mostra",
+       "rcshowhidebots-hide": "Scondi",
        "rcshowhideliu": "$1 i utenti registrài",
+       "rcshowhideliu-hide": "Scondi",
        "rcshowhideanons": "$1 i utenti anonimi",
+       "rcshowhideanons-hide": "Scondi",
        "rcshowhidepatr": "$1 łe modifeghe controłae",
        "rcshowhidemine": "$1 i me canbiamenti",
+       "rcshowhidemine-show": "Mostra",
+       "rcshowhidemine-hide": "Scondi",
        "rclinks": "Fà védar i ultimi $1 canbiamenti fati in tei ultimi $2 zorni<br />$3",
        "diff": "dif",
        "hist": "stor",
        "querypage-disabled": "Sta pàjina speciałe ła xe dixativà par motivi de prestasion.",
        "booksources": "Fonti librarie",
        "booksources-search-legend": "Riserca de fonti librarie",
+       "booksources-search": "Serca",
        "booksources-text": "De seguito vien presentà un elenco de colegamenti verso siti foresti che vende libri novi e usài, atraverso i quali se pol otegner piassè informazioni sul testo sercà.",
        "booksources-invalid-isbn": "El nùmaro ISBN inserìo no'l xe mia valido: controla de novo se te lo ghè copià justo da la fonte originale.",
        "specialloguserlabel": "Asion efetuà da:",
        "import-interwiki-history": "Copia l'intiera cronołogia de sta pàxena",
        "import-interwiki-templates": "Tira dentro tuti i modèi",
        "import-interwiki-submit": "Inporta",
-       "import-interwiki-namespace": "Namespace de destinassion:",
-       "import-interwiki-rootpage": "Pàjina prinsipałe de destinasion (opsionałe):",
        "import-upload-filename": "Nome del file:",
        "import-comment": "Comento:",
        "importtext": "Se połe esportare el file da ła fonte wiki doparando ła [[Special:Export|funsion de esportasion]].\nSalveło so'l to conpiuter e carghelo cuà.",
index 36f1788..bc4dbc5 100644 (file)
        "import-interwiki-history": "Kopiruida kaik necen lehtpolen toižetamižen istorii",
        "import-interwiki-templates": "Mülütada kaik šablonad",
        "import-interwiki-submit": "Import",
-       "import-interwiki-namespace": "Metnimiavaruz:",
        "import-upload-filename": "Failan nimi:",
        "import-comment": "Kommentarii:",
        "importstart": "Lehtpoliden import...",
        "import-token-mismatch": "Andmused oma kadonuded. Olgat hüväd, toštkat tegend völ kerdan.",
        "import-invalid-interwiki": "Ei voi importiruida neciš wikišpäi.",
        "importlogpage": "Importan aigkirj",
-       "import-logentry-upload": "importiruidihe [[$1]] failan jügetoitandan abul",
        "import-logentry-upload-detail": "{{PLURAL:$1|üks' versii|$1 versijad}}",
-       "import-logentry-interwiki": "toi toižes wikišpäi lehtpolen $1",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|üks' versii|versijad}} $2-wikišpäi",
        "javascripttest": "JavaScriptan kodvmine",
        "tooltip-pt-userpage": "Teiden kävutajan lehtpol'",
        "expand_templates_xml_output": "XML-lähtmižvend",
        "expand_templates_ok": "OK",
        "expand_templates_remove_comments": "Čuta kommentarijad",
-       "expand_templates_preview": "Ezikacund"
+       "expand_templates_preview": "Ezikacund",
+       "special-characters-group-latin": "Latinalaine",
+       "special-characters-group-latinextended": "Levitadud latinalaine",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Simvolad",
+       "special-characters-group-greek": "Grekalaine",
+       "special-characters-group-cyrillic": "Kirilline",
+       "special-characters-group-arabic": "Arabine",
+       "special-characters-group-arabicextended": "Araban levitadud",
+       "special-characters-group-persian": "Persižed",
+       "special-characters-group-hebrew": "Evrejine",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-gujarati": "Gudžarati",
+       "special-characters-group-thai": "Tai",
+       "special-characters-group-lao": "Lao",
+       "special-characters-group-khmer": "Khmeran"
 }
index 21f39b2..30cb04f 100644 (file)
        "wrongpassword": "Mật khẩu sai. Xin vui lòng nhập lại.",
        "wrongpasswordempty": "Bạn chưa gõ vào mật khẩu. Xin thử lần nữa.",
        "passwordtooshort": "Mật khẩu phải có ít nhất {{PLURAL:$1|1 ký tự|$1 ký tự}}.",
+       "passwordtoolong": "Mật khẩu không thể dài hơn {{PLURAL:$1|1 ký tự|$1 ký tự}}.",
        "password-name-match": "Mật khẩu của bạn phải khác với tên người dùng của bạn.",
        "password-login-forbidden": "Tên đăng nhập và mật khẩu này đã bị cấm không được sử dụng.",
        "mailmypassword": "Tái tạo mật khẩu",
        "missingcommentheader": "'''Nhắc nhở:''' Bạn chưa ghi chủ đề/tiêu đề cho bàn luận này.\nNếu bạn nhấn nút \"{{int:savearticle}}\" lần nữa, sửa đổi của bạn sẽ được lưu mà không có đề mục.",
        "summary-preview": "Xem trước dòng tóm lược:",
        "subject-preview": "Xem trước đề mục:",
+       "previewerrortext": "Có lỗi xảy ra khi xem trước những thay đổi của bạn.",
        "blockedtitle": "Thành viên bị cấm",
        "blockedtext": "'''Tên người dùng hoặc địa chỉ IP của bạn đã bị cấm.'''\n\nNgười thực hiện cấm là $1.\nLý do được cung cấp là ''$2''.\n\n* Bắt đầu cấm: $8\n* Kết thúc cấm: $6\n* Mục tiêu cấm: $7\n\nBạn có thể liên hệ với $1 hoặc một [[{{MediaWiki:Grouppage-sysop}}|bảo quản viên]] khác để thảo luận về việc cấm.\nBạn không thể sử dụng tính năng “gửi thư cho người này” trừ khi bạn đã ghi một địa chỉ thư điện tử hợp lệ trong [[Special:Preferences|tùy chọn tài khoản]] và bạn không bị khóa chức năng đó.\nĐịa chỉ IP hiện tại của bạn là $3, và mã số cấm là #$5.\nXin hãy ghi kèm tất cả các thông tin trên vào thư yêu cầu của bạn.",
        "autoblockedtext": "Địa chỉ IP của bạn đã bị tự động cấm vì một người nào đó đã sử dụng nó, $1 là thành viên đã thực hiện cấm.\nLý do được cung cấp là:\n\n:''$2''\n\n* Bắt đầu cấm: $8\n* Kết thúc cấm: $6\n* Mục tiêu cấm: $7\n\nBạn có thể liên hệ với $1 hoặc một trong số các\n[[{{MediaWiki:Grouppage-sysop}}|bảo quản viên]] khác để thảo luận về việc cấm.\n\nChú ý rằng bạn sẽ không dùng được chức năng “gửi thư cho người này” trừ khi bạn đã ghi một địa chỉ thư điện tử hợp lệ trong [[Special:Preferences|tùy chọn]] và bạn không bị cấm dùng chức năng đó.\n\nĐịa chỉ IP hiện tại của bạn là $3, mã số cấm là $5.\nXin hãy ghi kèm tất cả các chi tiết trên vào thư yêu cầu của bạn.",
        "notextmatches": "Không tìm thấy nội dung trang",
        "prevn": "{{PLURAL:$1|$1}} mục trước",
        "nextn": "{{PLURAL:$1|$1}} mục sau",
+       "prev-page": "Trang trước",
+       "next-page": "Trang sau",
        "prevn-title": "$1 {{PLURAL:$1|kết quả|kết quả}} trước",
        "nextn-title": "$1 {{PLURAL:$1|kết quả|kết quả}} sau",
        "shown-title": "Hiển thị $1 {{PLURAL:$1|kết quả|kết quả}} mỗi trang",
        "import-interwiki-history": "Sao chép tất cả các phiên bản cũ của trang này",
        "import-interwiki-templates": "Gồm tất cả các bản mẫu",
        "import-interwiki-submit": "Nhập",
-       "import-interwiki-namespace": "Không gian tên đích:",
-       "import-interwiki-rootpage": "Trang gốc đích (tùy chọn):",
+       "import-mapping-default": "Nhập vào vị trí mặc định",
+       "import-mapping-namespace": "Nhập vào một không gian tên:",
        "import-upload-filename": "Tên tập tin:",
        "import-comment": "Lý do:",
        "importtext": "Xin hãy xuất tập tin từ wiki nguồn dùng [[Special:Export|công cụ xuất]].\nLưu nó vào máy tính của bạn rồi tải nó lên đây.",
        "import-rootpage-nosubpage": "Không gian tên “$1” của trang gốc không cho phép các trang con.",
        "importlogpage": "Nhật trình nhập trang",
        "importlogpagetext": "Đây là danh sách các trang được quản lý nhập vào đây. Các trang này có lịch sử sửa đổi từ hồi ở wiki khác.",
-       "import-logentry-upload": "nhập vào [[$1]] bằng cách tải tập tin",
        "import-logentry-upload-detail": "Đã nhập $1 phiên bản",
-       "import-logentry-interwiki": "đã nhập vào $1 từ wiki khác",
        "import-logentry-interwiki-detail": "Đã nhập $1 phiên bản từ $2",
        "javascripttest": "Kiểm thử JavaScript",
        "javascripttest-pagetext-noframework": "Trang này dành cho việc chạy các ca kiểm thử JavaScript.",
        "pageinfo-protect-cascading-yes": "Có",
        "pageinfo-protect-cascading-from": "Khóa theo tầng từ",
        "pageinfo-category-info": "Thông tin về thể loại",
+       "pageinfo-category-total": "Tổng số thành viên",
        "pageinfo-category-pages": "Số trang",
        "pageinfo-category-subcats": "Số thể loại con",
        "pageinfo-category-files": "Số tập tin",
        "tags-deactivate-reason": "Lý do:",
        "tags-deactivate-not-allowed": "Không thể vô hiệu hóa thẻ \"$1\".",
        "tags-deactivate-submit": "Vô hiệu",
+       "tags-apply-no-permission": "Bạn không có quyền áp dụng các thẻ thay đổi cùng các thay đổi của bạn.",
+       "tags-apply-not-allowed-one": "Thẻ \"$1\" không được phép được áp dụng thủ công.",
+       "tags-edit-title": "Chỉnh sửa thẻ",
+       "tags-edit-manage-link": "Quản lý thẻ",
+       "tags-edit-revision-selected": "{{PLURAL:$1|Phiên bản|Các phiên bản}} [[:$2]] được chọn:",
+       "tags-edit-existing-tags": "Thẻ đã có:",
+       "tags-edit-new-tags": "Thẻ mới:",
+       "tags-edit-chosen-placeholder": "Chọn vài thẻ",
+       "tags-edit-chosen-no-results": "Không thẻ nào được tìm thấy trùng khớp",
+       "tags-edit-reason": "Lý do:",
+       "tags-edit-success": "Các thay đổi được áp dụng thành công.",
+       "tags-edit-failure": "Những thay đổi này có thể không được áp dụng: $1",
+       "tags-edit-nooldid-title": "Kiểm tra các mục tiêu không hợp lệ",
        "comparepages": "So sánh trang",
        "compare-page1": "Trang 1",
        "compare-page2": "Trang 2",
        "json-error-recursion": "Giá trị để mã hóa có tham chiếu đệ quy",
        "json-error-inf-or-nan": "Giá trị để mã hóa có giá trị NAN (không phải số) hoặc INF (vô tận)",
        "json-error-unsupported-type": "Đã đưa vào giá trị có kiểu không thể mã hóa",
-       "headline-anchor-title": "Liên kết đến phần này"
+       "headline-anchor-title": "Liên kết đến phần này",
+       "special-characters-group-latin": "La tinh",
+       "special-characters-group-latinextended": "La tinh mở rộng",
+       "special-characters-group-ipa": "Phiên âm quốc tế",
+       "special-characters-group-symbols": "Ký hiệu",
+       "special-characters-group-greek": "Hy Lạp",
+       "special-characters-group-cyrillic": "Kirin",
+       "special-characters-group-arabic": "Ả Rập",
+       "special-characters-group-arabicextended": "Ả Rập mở rộng",
+       "special-characters-group-persian": "Ba Tư",
+       "special-characters-group-hebrew": "Hê-brơ",
+       "special-characters-group-bangla": "Bangla",
+       "special-characters-group-tamil": "Tamil",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Sinhala",
+       "special-characters-group-gujarati": "Gujarat",
+       "special-characters-group-devanagari": "Devanagari",
+       "special-characters-group-thai": "Thái",
+       "special-characters-group-lao": "Lào",
+       "special-characters-group-khmer": "Khơ-me",
+       "special-characters-title-endash": "dấu gạch en",
+       "special-characters-title-emdash": "dấu gạch em",
+       "special-characters-title-minus": "dấu trừ"
 }
index d51a5fc..68ddb77 100644 (file)
@@ -36,7 +36,7 @@
        "tog-shownumberswatching": "Jonön numi gebanas galädöl",
        "tog-oldsig": "Dispenäd dabinöl:",
        "tog-fancysig": "Dispenäd balugik (nen yüms lü gebanapad)",
-       "tog-uselivepreview": "Gebön büologedi itjäfidik (sperimäntik)",
+       "tog-uselivepreview": "Gebön büologedi itjäfidik",
        "tog-forceeditsummary": "Sagön obe, ven redakaplän brefik vagon",
        "tog-watchlisthideown": "Klänedön redakamis obik se galädalised",
        "tog-watchlisthidebots": "Klänedön redakamis mäikamenas se galädalised",
        "otherlanguages": "In püks votik",
        "redirectedfrom": "(Pelüodükon de pad: $1)",
        "redirectpagesub": "Lüodükömapad",
+       "redirectto": "Lüodükön lü:",
        "lastmodifiedat": "Pad at pävotükon lätiküno tü düp $2, ün $1.",
        "viewcount": "Pad at pelogon {{PLURAL:$1|balna|$1na}}.",
        "protectedpage": "Pad pejelöl",
        "toc": "Ninäd",
        "showtoc": "jonön",
        "hidetoc": "klänedön",
+       "confirmable-confirm": "Fümol-li?",
        "confirmable-yes": "Si!",
        "confirmable-no": "Nö!",
        "thisisdeleted": "Jonön u sädunön moükami $1?",
        "virus-badscanner": "Parametem badik: program tavirudik nesevädik: ''$1''",
        "virus-scanfailed": "skrutam no eplöpon (kot $1)",
        "virus-unknownscanner": "program tavirudik nesëvadik:",
-       "logouttext": "'''Esenunädol oli.'''\n\nKanol laigebön {{SITENAME}} nennemiko, u kanol <span class='plainlinks'>[$1 nunädön oli dönu]</span> me gebananem ot u gebenanem votik.\nKüpälolös, das pads anik ba nog pojenons äsva no esenunädol oli, jüs uklinükol memi no laidüpik bevüresodanaföma olik.",
+       "logouttext": "<strong>Esenunädol oli.<strong>\n\nKüpälolös, das pads anik ba nog pojenons äsva no esenunädol oli, jüs uklinükol memi no laidüpik bevüresodanaföma olik.",
        "welcomeuser": "Benokömö, o $1!",
        "yourname": "Gebananem:",
        "userlogin-yourname": "Gebananem",
        "createaccountmail": "me pot leäktronik",
        "createaccountreason": "Kod:",
        "createacct-reason": "Kod",
+       "createacct-imgcaptcha-ph": "Penolöd vödemi, keli logol löpo",
        "createacct-submit": "Jafön kali olik",
        "createacct-benefit-body1": "{{PLURAL:$1|redakam|redakams}}",
        "createacct-benefit-body2": "{{PLURAL:$1|pad|pads}}",
        "revdelete-show-file-submit": "Si",
        "logdelete-selected": "{{PLURAL:$1|Lisedajenot|Lisedajenots}} pevälöl:",
        "revdelete-legend": "Levälön miedükamis logova:",
-       "revdelete-hide-text": "Klänedön vödemi revida",
+       "revdelete-hide-text": "Vödem revida",
        "revdelete-hide-image": "Klänedön ragivaninädi",
        "revdelete-hide-name": "Klänedön duni e zeili",
        "revdelete-hide-comment": "Redakön küpeti",
        "revdelete-hide-user": "Klänedön gebananemi u ladeti-IP redakana",
        "revdelete-hide-restricted": "Gebön miedükamis at i demü guvans e lökofärmükön fometi at",
        "revdelete-radio-same": "(no votükolös)",
-       "revdelete-radio-set": "Si",
-       "revdelete-radio-unset": "",
+       "revdelete-radio-set": "Paklänedöl",
+       "revdelete-radio-unset": "Logädik",
        "revdelete-suppress": "Klänedön moükamakodis i de guvans (äsi de votikans)",
        "revdelete-unsuppress": "Moükön miedükamis fomamas pegegetöl",
        "revdelete-log": "Kod:",
        "notextmatches": "Leigon ko nos in padavödem",
        "prevn": "büik {{PLURAL:$1|$1}}",
        "nextn": "sököl {{PLURAL:$1|$1}}",
+       "prev-page": "pad büik",
+       "next-page": "pad sököl",
        "prevn-title": "{{PLURAL:$1|Sukasek|Sukaseks}} büik $1",
        "nextn-title": "{{PLURAL:$1|Sukasek|Sukaseks}} fovik $1",
        "shown-title": "Jonön {{PLURAL:$1|sukaseki|sukasekis}} $1 a pad",
        "viewprevnext": "Logön padis ($1 {{int:pipe-separator}} $2) ($3).",
        "searchmenu-exists": "'''Dabinon pad labü nem: \"[[:$1]]\" su vük at'''",
-       "searchmenu-new": "'''Jafolös padi: \"[[:$1]]\" su vük at!'''",
+       "searchmenu-new": "<strong>Jafolös padi: \"[[:$1]]\" su vük at!</strong> {{PLURAL:$2|0=|Logolös i padi me suk olik petuvöli.|Logolös i sukasekis petuvöl.}}",
        "searchprofile-articles": "Ninädapads",
        "searchprofile-images": "Mödamedäd",
        "searchprofile-everything": "Valikos",
        "prefs-info": "Nüns stabik",
        "prefs-signature": "Dispenäd",
        "prefs-dateformat": "Dätafomam",
+       "prefs-preview": "Büologed",
        "prefs-diffs": "Difs",
        "userrights": "Guvam gebanagitätas",
        "userrights-lookup-user": "Guvön gebanagrupis",
        "right-move": "Topätükön padis",
        "right-move-subpages": "Topätükön padis kobü donapads onsik",
        "right-move-rootuserpages": "Topätükön gebanapadis cifik",
+       "right-move-categorypages": "Topätükön kladapadis",
        "right-movefile": "Topätükön ragivis",
        "right-suppressredirect": "No jafön lüodükömi de nem büik posä pad petopätükon",
        "right-upload": "Löpükön ragivis",
        "action-suppressionlog": "logön jenotalisedi privatik at",
        "action-block": "blokön redakami gebana at",
        "action-protect": "votükön jelanivodis pada at",
-       "action-import": "nüveigön padi at se vük votik",
-       "action-importupload": "nüveigön padi at se ragivilöpükam",
+       "action-import": "nüveigön padis se vük votik",
+       "action-importupload": "nüveigön padis se ragivilöpükam",
        "action-patrol": "Zepön redakami votikanas",
        "action-autopatrol": "zepön redakami olik",
        "action-unwatchedpages": "Logön lisedi padas no pagalädölas",
        "action-userrights": "redakön gebanagitätis valik",
        "action-userrights-interwiki": "redakön gebanagitätis gebanas vükas votik",
        "action-siteadmin": "lökofärmükön u maifükön nünodemi",
+       "action-sendemail": "sedön penedis leäktronik",
+       "action-editmywatchlist": "redakön galädalisedi ola",
+       "action-viewmywatchlist": "logön galädalised ola",
        "nchanges": "{{PLURAL:$1|votükam|votükams}} $1",
        "enhancedrc-history": "jenotem",
        "recentchanges": "Votükams nulik",
        "license-nopreview": "(Büologed no gebidon)",
        "upload_source_url": " (el URL lonöföl ä fa valans gebovik)",
        "upload_source_file": " (ragiv pö nünöm olik)",
+       "listfiles-delete": "moükön",
        "listfiles-summary": "Su pad patik at ragivs pelöpüköl valik pelisedons.\nNomiko ragivs pelöpüköl lätikün palisedons primü lised.\nKlikolös tiädi padüla ad votükön sökaleodi at.",
        "listfiles_search_for": "Sukön ragivanemi:",
        "imgfile": "ragiv",
        "listfiles_size": "Gretot",
        "listfiles_description": "Bepenam",
        "listfiles_count": "Fomams",
+       "listfiles-latestversion-yes": "Si!",
+       "listfiles-latestversion-no": "Nö!",
        "file-anchor-link": "Ragiv",
        "filehist": "Jenotem ragiva",
        "filehist-help": "Välolös däti/timi ad logön ragivi soäsä äbinon ün tim at.",
        "filedelete-reason-dropdown": "*Kods kösömik moükama\n** Nedem kopiedagitäta\n** Ragiv petelöl",
        "filedelete-edit-reasonlist": "Redakön kodis moükama",
        "mimesearch": "Sukön (MIME)",
-       "mimesearch-summary": "Pad at mögükon ragivisulami ma MIME-sot.\nPrimanünods: ninädasot/donasot, a.s. <code>image/jpeg</code>.",
+       "mimesearch-summary": "Pad at mögükon ragivisulami ma MIME-sot.\nPrimanünods: contenttype/subtype u contenttype/*, a.s. <code>image/jpeg</code>.",
        "mimetype": "Klad ela MIME:",
        "download": "donükön",
        "unwatchedpages": "Pads no pagalädöls",
        "unusedtemplateswlh": "yüms votik",
        "randompage": "Pad fädik",
        "randompage-nopages": "Pads nonik dabinons in {{PLURAL:$2|nemaspad sököl|nemaspads sököls}}: $1.",
+       "randomincategory": "Pad fädik in klad",
+       "randomincategory-category": "Klad:",
        "randomredirect": "Lüodüköm fädik",
        "randomredirect-nopages": "Lüodüköms nonik dabinons in nemaspad: \"$1\".",
        "statistics": "Statits",
        "delete-warning-toobig": "Pad at labon jenotemi lunik: {{PLURAL:$1|revid|revids}} plu $1.\nPrudö! Moükam onik ba osäkädükon jäfidi nünodema: {{SITENAME}}.",
        "rollback": "Sädunön redakamis",
        "rollbacklink": "sädunön vali",
+       "rollbacklinkcount": "sädunön {{PLURAL:$1|redakami|redakamis}} $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}}]]).",
        "import-interwiki-history": "Kopiedön fomamis valik jenotema pada at",
        "import-interwiki-templates": "Keninükön samafomotis valik",
        "import-interwiki-submit": "Nüveigön",
-       "import-interwiki-namespace": "Ini nemaspad:",
        "import-upload-filename": "Ragivanem:",
        "import-comment": "Küpet:",
        "importtext": "Seveigolös ragivi se fonätavük me [[Special:Export|stum seveiga]].\nDakipolös oni su nünöm olik e löpükolös oni isio.",
        "expand_templates_ok": "Baiced",
        "expand_templates_remove_comments": "Moükön küpetis",
        "expand_templates_generate_xml": "Jonön bimi: XML",
-       "expand_templates_preview": "Büologed"
+       "expand_templates_preview": "Büologed",
+       "special-characters-group-ipa": "LFB",
+       "special-characters-group-greek": "Grikänapük"
 }
index a65ac57..042ebb1 100644 (file)
        "import-interwiki-text": "Valiq viki ja lehe nimi. Kujjõ kuupääväq ja toimõndajidõ nimeq hoiõtasõq alalõ. Kõik tõisist vikidest tuumisõq pandasõq kirjä [[Special:Log/import|tuumiisi nimekirjä]].",
        "import-interwiki-history": "Kopiq lehe terveq aolugu",
        "import-interwiki-submit": "Tuuq",
-       "import-interwiki-namespace": "Panõq leheq nimeruumi:",
        "import-comment": "Põhjus:",
        "importtext": "Viiq lättevikist lehti [[Special:Export|viimis]]-tüüriistaga. Pästäq teedüs nii uman puutrin ku siin.",
        "importstart": "Tuvvas lehti...",
        "importuploaderrortemp": "Teedüstü üleslaatminõ lää-s kõrda. Olõ-i aotlist kausta.",
        "importlogpage": "Tuumiisi nimekiri",
        "importlogpagetext": "Tõisist vikidest tuuduisi lehti nimekiri.",
-       "import-logentry-upload": "tõi lehe [[$1]] saatõn teedüstü",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|kujo|kujjo}}",
-       "import-logentry-interwiki": "tõi tõõsõst vikist lehe ”$1”",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|kujo|kujjo}} lehest $2",
        "tooltip-pt-userpage": "Suq pruukjaleht",
        "tooltip-pt-anonuserpage": "Su puutri võrgoaadrõsi pruukjaleht",
index d2df113..c8155da 100644 (file)
        "import": "Naangbit hit mga pakli",
        "import-interwiki-templates": "Lakip an ngatanan nga mga batakan",
        "import-interwiki-submit": "Naangbit",
-       "import-interwiki-namespace": "Kakadtoan nga ngaran-lat'ang:",
        "import-upload-filename": "Ngaran han paypay:",
        "import-comment": "Komento:",
        "importstart": "Nag-aangbit hin mga pakli...",
        "import-rootpage-invalid": "An ginhatag nga gamot-pakli in uska diri balido nga titulo.",
        "import-rootpage-nosubpage": "Ngaran-lat'ang nga \"$1\" han gamot-pakli in diri natugot hin mga bahin-pakli.",
        "importlogpage": "Talaan hin pan-aangbit",
-       "import-logentry-upload": "ginangbit [[$1]] pinaagi hin pagkarga-pasaka han paypay",
-       "import-logentry-interwiki": "natranswiki $1",
        "javascripttest-pagetext-skins": "Pagpili hin panit para ha pag-paandar han:",
        "tooltip-pt-userpage": "An imo pakli hin gumaramit",
        "tooltip-pt-mytalk": "An imo pakli hin hiruhimangraw",
index e1d187f..3c93d85 100644 (file)
        "revdelete-log": "理由:",
        "revdelete-submit": "应用于拣中个{{PLURAL:$1|修订}}",
        "revdelete-success": "'''修订个可见性已经成功更新。'''",
-       "revdelete-failure": "<strong>版本个可见性无法更新:</strong>$1",
+       "revdelete-failure": "版本个可见性无法更新:$1",
        "logdelete-success": "'''事件个可见性已经成功设置。'''",
        "logdelete-failure": "'''事件个可见性无法设置:'''\n$1",
        "revdel-restore": "改变可见性",
        "deleteotherreason": "其它/附加理由:",
        "deletereasonotherlist": "别个理由",
        "rollback": "恢复编辑",
-       "rollback_short": "恢复",
        "rollbacklink": "回退",
        "rollbackfailed": "恢复失败",
        "revertpage": "恢复[[Special:Contributions/$2|$2]] ([[User talk:$2|讲张]])个改动;恢复到[[User:$1|$1]]个上一版本",
index 6b95e78..1a3764c 100644 (file)
@@ -12,7 +12,8 @@
                        "Malafaya",
                        "Reedy",
                        "გიორგიმელა",
-                       "아라"
+                       "아라",
+                       "Silovan"
                ]
        },
        "tog-underline": "რცხუეფიშ ათოღაზუა:",
@@ -25,6 +26,8 @@
        "tog-showtoolbar": "რედაქტირაფაშ ხეჭკუდეფიშ ძირაფა (ითხინს JavaScript-ის)",
        "tog-editondblclick": "ხასჷლეფიშ რედაქტირაფა ჟირმანგი გეწკანტაფათ (ითხინს JavaScript-ის)",
        "tog-editsectiononrightclick": "ჩართი სექციაშ რედაქტირაფა სექციაშ ჯოხოშა მარძგვან გეწკანტაფათ (ითხინს JavaScript-ის)\"",
+       "tog-watchcreations": "ქიგუძინი ჩქიმ კონტროლიშ ერკბულს ჩქიმ დუნარცხუა ხასჷლეფი დო ეხარგელი ფაილეფი",
+       "tog-shownumberswatching": "მაკონტროლაფარი მახვარებუეფიშ მუდანობაშ ძირაფა",
        "tog-showhiddencats": "ქაძირი ფულირი კატეგორიეფი",
        "underline-always": "ირო",
        "underline-never": "შურო",
@@ -34,7 +37,7 @@
        "monday": "თუთაშხა",
        "tuesday": "თახაშხა",
        "wednesday": "ჯუმაშხა",
-       "thursday": "ცაშხა",
+       "thursday": "á\83ªá\83\90á\83\90á\83¨á\83®á\83\90",
        "friday": "ობიშხა",
        "saturday": "შურიშხა",
        "sun": "ჟაშ.",
@@ -56,7 +59,7 @@
        "october": "გჷმათუთა",
        "november": "გერგობათუთა",
        "december": "ქირსეთუთა",
-       "january-gen": "ღურთუთა",
+       "january-gen": "ღურთუთა",
        "february-gen": "ფურთუთაშ",
        "march-gen": "მელახიშ",
        "april-gen": "პირელიშ",
        "actions": "მოქმედალეფი",
        "namespaces": "ჯოხოეფიშ ოფირჩა",
        "variants": "ვარიანტეფი",
+       "navigation-heading": "ნავიგაციაშ მენიუ",
        "errorpagetitle": "ჩილათა",
        "returnto": "დირთი $1-შა",
        "tagline": "{{SITENAME}} ხასჷლაშე",
        "searchbutton": "გორუა",
        "go": "სტატია",
        "searcharticle": "გინულა",
-       "history": "á\83®á\83\90á\83¡á\83\98ლაშ ისტორია",
+       "history": "á\83®á\83\90á\83¡á\83·ლაშ ისტორია",
        "history_short": "ისტორია",
        "printableversion": "ობეშტალი ვერსია",
        "permalink": "პერმანენტული რცხუ",
        "print": "დობეშტი",
+       "view": "ძირაფა",
+       "view-foreign": "ქოძირით $1-ის",
        "edit": "რედაქტირაფა",
        "create": "დორსხუაფა",
+       "create-local": "ლოკალურ ეჭარუაშ გეძინა",
        "editthispage": "ხასჷლაშ რედაქტირაფა",
        "delete": "ლასუა",
        "deletethispage": "დოლასი თე ხასჷლა",
        "personaltools": "პერსონალური ხეჭკუდეფი",
        "talk": "სხუნუა",
        "views": "ძირაფეფი",
-       "toolbox": "á\83\98á\83\9cá\83¡á\83¢á\83 á\83£á\83\9bá\83\94á\83\9cá\83¢ეფი",
+       "toolbox": "á\83®á\83\94á\83­á\83\99á\83£á\83\93ეფი",
        "otherlanguages": "შხვა ნინეფს",
        "redirectedfrom": "(გინოწურაფილი რე $1-შე)",
        "redirectpagesub": "ხასჷლაშა გინოწურაფა",
-       "lastmodifiedat": "თე ხასილაქ ეკონიას გეახალუ $2-ს, $1-ის.",
+       "redirectto": "გინოღალა:",
+       "lastmodifiedat": "თე ხასჷლაქ ეკონიას გეახალუ $2-ს, $1-ის.",
        "jumpto": "გეგნორთი:",
        "jumptonavigation": "ნავიგაცია",
        "jumptosearch": "გორუა",
        "aboutpage": "Project:შენი",
        "copyright": "დინორე მიწორინაფილი რე $1–იშ ჯოხოთ.",
        "copyrightpage": "{{ns:project}}:ოავტორე ალობეფი",
-       "currentevents": "მიმალ მოლინეფი",
-       "currentevents-url": "Project:მიმალ მოლინეფი",
+       "currentevents": "მიმალ მოლინეფი",
+       "currentevents-url": "Project:მიმალ მოლინეფი",
        "disclaimers": "გამამინჯალაშ ვარება",
        "disclaimerpage": "Project:გამამინჯალაშ ვარება",
        "edithelp": "მოხვარა რედაქტირაფას",
        "nosuchspecialpage": "თეჯგუა გჷშაკერძაფილი ხასჷლეფი ვარსებენს",
        "missing-article": "სისტემას ვაძირუ მოგორაფილი ხასჷლაშ ტექსტიქ მუნაჩმეფიშ ბაზას, ჯოხოთ «$1» $2. \n\nთენა, მუჭოთ წესინი, მოხვადუ თი ბორჯის, მუჟამს მახვარებუ გიაჸუნუუ თი ხასჷლაშ ისტორიაშ რცხუს, ნამუთ ლასირი რე. \nთენა თაშ ვა რე-და, შილებე თქვა ძირით ჩილათა სისტემაშ კოდის. \nქორთხიინთ, ქატყვინუათ თენა [[Special:ListUsers/sysop|administrator]]–ს, URL–შ მეწურაფათ.",
        "missingarticle-rev": "(რედაქტირაფა#: $1)",
-       "badtitle": "á\83ªá\83\90á\83\92á\83\90á\83\9cá\83\90 á\83¡á\83\90á\83\97á\83\90á\83£á\83 á\83\98",
+       "badtitle": "á\83ªá\83\90á\83\92á\83\90á\83\9cá\83\90 á\83\93á\83£á\83\93á\83¯á\83\9dá\83®á\83\9d",
        "badtitletext": "მოთხილ ხასილაშ ჯოხო ჩილათირ რდუ, ვარა ჩოლიერ, ვარა ხოლო გოხოლუდეს ჩილათირო გინორცხუაფილ ინტერ–ნინა ვარა ინტერ–წიკი ჯოხო. \nთენა შილებე იკათუანდას ართ ვარა უმოს თიშნერ ნიშანს ნამუშ გუმორინაფა ჯოხოს ვა შილებე.",
        "viewsource": "ქოძირი წყუ",
        "viewsourcetext": "თქვა შეილებუნა ქოძირათ თე ხასჷლაშ დაჭყაფური ფაილი დო ქუდარსხუათ თიშ მანგი:",
        "yourname": "მახვარებუშ ჯოხო:",
+       "userlogin-yourname": "მახვარებუშ ჯოხო",
+       "userlogin-yourname-ph": "გენშიონით თქვანი მოხვარებუშ ჯოხო",
        "yourpassword": "პაროლი",
+       "userlogin-yourpassword": "პაროლი",
+       "userlogin-yourpassword-ph": "გენშიონით თქვანი პაროლი",
+       "createacct-yourpassword-ph": "გენშიონით პაროლი",
        "yourpasswordagain": "კჷნე გეკორობით პაროლი:",
+       "createacct-yourpasswordagain": "დადასურით პაროლი",
+       "createacct-yourpasswordagain-ph": "ხოლო ართშა გენშიონით პაროლი",
        "remembermypassword": "ქჷგიშინი ჩქიმი მიშულა თე ბრაუზერს (მაქსიმუმ $1 დღას)",
+       "userlogin-remembermypassword": "ქუდომტე მიშულირო",
        "yourdomainname": "თქვან დომენ",
        "login": "მიშულა",
        "nav-login-createaccount": "მიშულა/ანგარიშიშ გონწყუმა",
        "userlogin": "მიშულა/ანგარიშიშ გონწყუმა",
        "logout": "გიშულა",
        "userlogout": "გიშულა",
+       "userlogin-noaccount": "ვაიღჷნანო ანგარიში?",
+       "userlogin-joinproject": "ქაკათით {{SITENAME}}",
        "nologin": "დიორდე ვარეთო რეგისტრირებული? $1.",
        "nologinlink": "გონწყით ანგარიში",
        "createaccount": "ანგარიშიშ გონწყუმა",
        "gotaccount": "უკვე რეგისტრირებული რეთო? '''$1'''",
        "gotaccountlink": "მინულა",
        "userlogin-resetlink": "გუგოჭყორდესო მიშაულარო საჭირო ინფორმაციაქ?",
+       "userlogin-resetpassword-link": "დუგოჭყორდესო პაროლქ?",
+       "userlogin-helplink2": "მოხვარა:მიშულა",
+       "createacct-emailoptional": "ელ. ფოსტაშ ოწურაფუ (ვა რე უციო)",
+       "createacct-email-ph": "გენშიონით თქვანი ელ. ფოსტაშ ოწურაფუ",
+       "createacct-captcha": "თხილუაშ კონტროლი",
+       "createacct-imgcaptcha-ph": "გენშიონით ჟი მოჩამილი ტექსტი",
+       "createacct-submit": "გონწყით თქვენ ანგარიში",
+       "createacct-benefit-heading": "{{SITENAME}} გოჭყაფილი რე თქვანნერი ადამიერეფიშით.",
+       "createacct-benefit-body1": "{{PLURAL:$1|რედაქტირაფა|რედაქტირაფა}}",
+       "createacct-benefit-body2": "{{PLURAL:$1|ხასჷლა|ხასჷლა}}",
+       "createacct-benefit-body3": "ბოლო {{PLURAL:$1|მახვარებუ|მახვარებუ}}",
        "loginsuccess": "'''ასე მიშულირ რეთ {{SITENAME}}-ს მუჭოთ \"$1\".'''",
        "nouserspecified": "საჭირო რე მახვარებუშ ჯოხოშ მიშაჭარუა.",
        "mailmypassword": "ახალ პაროლიშ მოჯღონა",
        "noemail": "\"$1\" მახვარებუშ ელ-ფოშტა წურაფილი ვარე.",
        "loginlanguagelabel": "ნინა: $1",
+       "pt-login": "მიშულა",
+       "pt-login-button": "მიშულა",
+       "pt-createaccount": "ანგარიშიშ გონწყუმა",
+       "pt-userlogout": "გიშულა",
        "bold_sample": "რუმე ტექსტი",
        "bold_tip": "რუმე ტექსტ",
        "italic_sample": "ელართელი ტექსტი",
        "subject": "თემა/დუდლანდარი:",
        "minoredit": "თენა რე ჭიჭე რედაქტირაფა",
        "watchthis": "თე ხასჷლაშ კონტროლი",
-       "savearticle": "á\83\93á\83\9dá\83©á\83\95á\83\98 á\83®á\83\90á\83¡á\83\98ლა",
+       "savearticle": "á\83\93á\83\9dá\83©á\83\95á\83\98 á\83®á\83\90á\83¡á\83·ლა",
        "preview": "გიწოთოლორაფა",
        "showpreview": "ქაძირე გიწოთოლორაფა",
        "showdiff": "თირაფეფიშ ძირაფა",
-       "anoneditwarning": "'''á\83\92á\83£á\83 á\83\98 á\83\92á\83£á\83©á\83\98á\83\97:''' á\83\97á\83¥á\83\95á\83\90 á\83\95á\83\90á\83 á\83\94á\83\97 á\83 á\83\94á\83\92á\83\98á\83¡á\83¢á\83 á\83\98á\83 á\83\94á\83\91á\83£ლი. თქვან IP ოწურაფუ ინოჭარილი იჸი თე ხასჷლაშ რედაქტირაფაშ ისტორიას.",
+       "anoneditwarning": "'''á\83\92á\83£á\83 á\83\98 á\83\92á\83£á\83©á\83\98á\83\97:''' á\83\97á\83¥á\83\95á\83\90 á\83\95á\83\90á\83 á\83\94á\83\97 á\83 á\83\94á\83\92á\83\98á\83¡á\83¢á\83 á\83\98á\83 á\83\90á\83¤á\83\98ლი. თქვან IP ოწურაფუ ინოჭარილი იჸი თე ხასჷლაშ რედაქტირაფაშ ისტორიას.",
        "summary-preview": "რეზიუმეშ გიწოთოლორაფა",
        "blockedtext": "'''თქვან მახვარებუშ ჯოხო ვარა IP მიოწურაფუქ ბლოკირქ იჸუ. '''\n\nბლოკირაფა ღოლუ $-ქ.\nსამანჯელო წუმორინაფილქ იჸუ გეჸვენჯიქ: ''$2''.\n\n* ბლოკუაშ დაჭყაფური: $8\n* ბლოკიშ ვადაშ გულა ბორჯი: $6\n* ბლოკირქ იჸუ: $7\n\nშეილებუნა დეკავშირათ $1-ს ვარა ნამთინე შხვა [[{{MediaWiki:Grouppage-sysop}}|ადმინისტრატორს]] ბლოკუაშ კილასხუნალო.\nგეთოლწონით, ნამდა თქვა ვაგუმგარინენა ფუნქცია: ''მახვარებუშა ელ-ფოშტაშ ჯღონუა'', ვაგაფუნა მეღანკილი მოქმენდი ელ-ფოშტაშ მიოწურაფუ თქვანი [[Special:Preferences|ანგარიშიშ კონფიგურაციას]], ვარა დობლოკუაშ გეშა თე ფუნქციაშ გუმორინაფაშ ნება მიდაღალირ გაფუნა და.\nთქვან ასეიან IP მიოწურაფუ რე $3, დო ბლოკიშ იდენტიფიკატორი #$5.\nრთხიინთ ქიმიოღანკათ თე მუნაჩემეფშე ნამდგაიჸინი (ვარა ჟირხოლო) თქვან კორესპონდენციას.",
+       "loginreqlink": "მიშულა",
        "newarticle": "(ახალ)",
-       "newarticletext": "á\83\97á\83¥á\83\95á\83\90 á\83\92á\83\94á\83§â\80\99á\83£á\83\9cá\83\94á\83\9a á\83 á\83\94á\83\97 á\83®á\83\90á\83¡á\83\98á\83\9aá\83\90á\83¨ á\83 á\83ªá\83®á\83\98á\83¡, á\83\9cá\83\90á\83\9bá\83£á\83\97 á\83\93á\83\98á\83\9d á\83\95á\83\90 á\83 á\83\94 á\83\93á\83\9dá\83 á\83ªá\83®á\83£á\83\90á\83¤á\83\98á\83\9a.\ná\83®á\83\90á\83¡á\83\98á\83\9aá\83\90á\83¨ á\83\93á\83\90á\83 á\83ªá\83®á\83£á\83\90á\83¤á\83\90á\83\9aá\83\9d á\83\92á\83\94á\83\9bá\83\98á\83¨á\83\94á\83§â\80\99á\83\9dá\83\9cá\83\98á\83\97 á\83¢á\83\94á\83¥á\83¡á\83¢ á\83\97á\83£á\83\93á\83\9dá\83\9c á\83\9dá\83­á\83\99á\83\9dá\83 á\83\98á\83\94á\83¨á\83\90. (á\83¥á\83\9dá\83«á\83\98á\83 á\83\98á\83\97[$1 á\83\9bá\83\9dá\83®á\83\95á\83\90á\83 á\83\90á\83¨ á\83®á\83\90á\83¡á\83\98á\83\9aá\83\90] á\83£á\83\9bá\83\9dá\83¡ á\83\98á\83\9cá\83¤á\83\9dá\83 á\83\9bá\83\90á\83ªá\83\98á\83\90á\83¨á\83\9d).\ná\83\97á\83\94 á\83®á\83\90á\83¡á\83\98ლას ჩილათირო მოხვადით–და, ქიგუნჭირით თქვან ბრაუზერიშ კონჭის '''უკახალე'''.\"",
+       "newarticletext": "á\83\97á\83¥á\83\95á\83\90 á\83\92á\83\94á\83¸á\83£á\83\9cá\83\94á\83\9aá\83· á\83 á\83\94á\83\97 á\83®á\83\90á\83¡á\83·á\83\9aá\83\90á\83¨ á\83 á\83ªá\83®á\83\98á\83¡, á\83\9cá\83\90á\83\9bá\83£á\83\97 á\83\93á\83\98á\83\9d á\83\95á\83\90 á\83 á\83\94 á\83\93á\83\9dá\83 á\83ªá\83®á\83£á\83\90á\83¤á\83\98á\83\9aá\83\98.\ná\83®á\83\90á\83¡á\83·á\83\9aá\83\90á\83¨ á\83\93á\83\90á\83 á\83ªá\83®á\83£á\83\90á\83¤á\83\90á\83\9aá\83\9d á\83\92á\83\94á\83\9bá\83¨á\83\94á\83¸á\83\9dá\83\9cá\83\98á\83\97 á\83¢á\83\94á\83¥á\83¡á\83¢á\83\98 á\83\97á\83£á\83\93á\83\9dá\83\9c á\83\9dá\83­á\83\99á\83\9dá\83 á\83\98á\83\94á\83¨á\83\90. (á\83¥á\83\9dá\83«á\83\98á\83 á\83\98á\83\97[$1 á\83\9bá\83\9dá\83®á\83\95á\83\90á\83 á\83\90á\83¨ á\83®á\83\90á\83¡á\83·á\83\9aá\83\90] á\83£á\83\9bá\83\9dá\83¡ á\83\98á\83\9cá\83¤á\83\9dá\83 á\83\9bá\83\90á\83ªá\83\98á\83\90á\83¨á\83\9d).\ná\83\97á\83\94 á\83®á\83\90á\83¡á\83·ლას ჩილათირო მოხვადით–და, ქიგუნჭირით თქვან ბრაუზერიშ კონჭის '''უკახალე'''.\"",
        "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>.",
        "previewnote": "'''რშუდანი თენა რე ხვალე გიწოთოლორაფა'''\nთქვანი თირაფეფი დიო ვარე ჩუალირი!",
        "editing": "რედაქტირაფა $1",
+       "creating": "აკმიქიმინუაფჷ: „$1“",
        "editingsection": "$1–იშ (სექციაშ) რედაქტირაფა",
        "yourtext": "თქვან ტექსტი",
        "copyrightwarning": "გეთოლწონით, ნამდა {{SITENAME}} ხასილაშა თქვან ხეშე მიშაღალირ არძონერ თია იფორუ $2-ით (დეტალეფშო ქოძირით $1). \nვა გოკონა თქვან ნახანდაქ დუდშულო   რედაქტირებულქ დო გიონოჯღონელქ იყ’უას–და, ვა მიშეყ’ონათ თინა თაქ.<br />\nთქვა ხოლო პიჯალას დუთმოდვანთ, ნამდა თე ტექსტი თქვან ნაჭარა რე, ვარა გინოღალირ რე ოირკოჩე დომენშე დო ვარა თიშ მანგურ დუდიშულ წყუშე. \n'''ვა მიშეღათ ოავტორე ნებეფით თხილერ ნახანდი ავტორიშ ქოყ’იაშ უმშო!'''\"",
-       "templatesused": "თე ხასჷლას გიმორინაფილი {{PLURAL:$1|თანგი|თანგეფი}}:",
+       "templatesused": "თე ხასჷლას გიმორინაფილი რე {{PLURAL:$1|თანგი|თანგი}}:",
        "templatesusedpreview": "{{PLURAL:$1|თანგი|თანგეფი}} ნამუთ თე გჷწოთოლორაფას რე გიმორინაფილი",
        "template-protected": "(თხილერი)",
        "template-semiprotected": "(გვერდო თხილერი)",
-       "hiddencategories": "á\83\97á\83\94 á\83®á\83\90á\83¡á\83\98ლა ოკათუ {{PLURAL:$1|1 ტყობინაფილ კატეგორიას|$1 ტყობინაფილ კატეგორიეფს}}:",
+       "hiddencategories": "á\83\97á\83\94 á\83®á\83\90á\83¡á\83·ლა ოკათუ {{PLURAL:$1|1 ტყობინაფილ კატეგორიას|$1 ტყობინაფილ კატეგორიეფს}}:",
        "nocreatetext": "თე ხასილას ვა შილებე ახალ ხასილაშ გექიმინუა დორცხუაფილ ვარიაშ გეშა. თქვა შეგილებუნა კინორთა დო გექიმინელ ხასილაშ რედაქტირაფა, ვარა [[სპეციალურ:Userlogin|მიშულა დო ანგარიშიშ დორცხუაფა]]",
-       "permissionserrorstext-withaction": "á\83\97á\83¥á\83\95á\83\90 á\83\95á\83\90 á\83\92á\83\98á\83¦á\83£á\83\9cá\83\90 $2â\80\93á\83\98á\83¨ á\83¦á\83\9dá\83\9aá\83\90á\83\9bá\83\90á\83¨ á\83\90á\83\9aá\83\9dá\83\91á\83\90 á\83\97á\83\94 á\83\92á\83\94á\83¸á\83\95á\83\94á\83\9cá\83¯á\83\98 {{PLURAL:$1|á\83¡á\83\90á\83\9bá\83\90á\83\9cá\83¯á\83\94á\83\9aá\83\98á\83\97\83¡á\83\90á\83\9bá\83\90á\83\9cá\83¯á\83\94á\83\9aá\83\94á\83¤á\83\98á\83\97}}:",
+       "permissionserrorstext-withaction": "თქვა ვა გიღუნა $2–იშ ღოლამაშ ალობა თე გეჸვენჯი {{PLURAL:$1|სამანჯელით|სამანჯელით}}:",
        "recreate-moveddeleted-warn": "'''გართხილება: თქვა კინე ახალშო ორსხუანთ ხასჷლას, ნამუქჷთ ლასირქ იჸუ ოწოხოლე'''\n\nრთხიინთ, დეფირქათ, ქორე თუ ვარ მისაღეფ თე ხასჷლაშ რედაქტირაფაშ გაგინძორება.\nთქვან ოხუჯურო, ათე ხასილაშ ლასუაშ დო გინოღალაშ ჟურნალი მოჩამილ რე თუდო:",
        "moveddeleted-notice": "თე ხასჷლაქ ლასირქ იჸუ. ლასუაშ დო გინოღალაშ ჟურნალი მოჩამილ რე თუდო გიმაწურაფალო",
        "post-expand-template-inclusion-warning": "\"გური ქუჩით:\" ინოხუნაფილ თანგეფიშ ზომა ნაბტანი დიდი რე. კანკალე თანგეფი ვენიკათინე.",
        "post-expand-template-inclusion-category": "ხასჷლეფი ნამუსუთ ინოხუნაფილი თანგეფიშ ზომა გინომეტებული რე.",
        "post-expand-template-argument-warning": "\"'''გური ქუჩით:''' თე ხასჷლას ოკათ არძოშ უკლაშ ართ თიცალ თანგიშ არგუმენტი, ნამუსუთ უღუ გოძინელოფაშ ნაბტან დიდ ზომა.\nთე არგუმენტეფქ გჷშატებულქ იჸუ.\"",
        "post-expand-template-argument-category": "უარგუმენტო თანგამი ხასჷლეფი",
-       "viewpagelogs": "á\83\97á\83\94 á\83®á\83\90á\83¡á\83\98ლაშო ორეგისტრაციე ჟურნალეფიშ ძირაფა",
+       "viewpagelogs": "á\83\97á\83\94 á\83®á\83\90á\83¡á\83·ლაშო ორეგისტრაციე ჟურნალეფიშ ძირაფა",
        "currentrev": "მიმალ გიშანწყუალა",
        "currentrev-asof": "$1–შო მიმალ რედაქცია",
        "revisionasof": "$1 თარიღიშო დო საათიშო რსებულ ვერსია",
-       "revision-info": "$1-á\83\98á\83¨ á\83\95á\83\94á\83 á\83¡á\83\98á\83\90, $2-á\83\98á\83¨ á\83\9bá\83\98á\83¨á\83\90á\83¦á\83\90á\83\9aá\83\98á\83 ",
+       "revision-info": "$1-á\83\98á\83¨ á\83\95á\83\94á\83 á\83¡á\83\98á\83\90, $2-á\83\98á\83¨ á\83\9bá\83\98á\83¨á\83\9cá\83\90á\83¦á\83\94á\83\9a",
        "previousrevision": "←უმოს ჯვეშ ვერსია",
        "nextrevision": "უახალაშ ვერსია→",
        "currentrevisionlink": "მიმალ ვერსია",
        "revdel-restore": "ორწყენჯობაშ თირუა",
        "revertmerge": "ეკორტყუალაშ მოლასუა",
        "history-title": "\"$1\"–იშ თირაფეფიშ ისტორია",
+       "difference-title": "$1: შხვანერობა გჷნოჯინეფს შქას",
        "lineno": "ღოზი $1:",
        "compareselectedversions": "გიშაგორილ ვერსიეფიშ მეზიმაფა",
        "editundo": "გოუქვაფა",
-       "searchresults": "გორუაშ მოღალირობეფ",
-       "searchresults-title": "\"$1\"–იშ გორუაშ მოღალირობეფ",
+       "searchresults": "გორუაშ მოღალირობეფ",
+       "searchresults-title": "\"$1\"–იშ გორუაშ მოღალირობეფ",
        "notextmatches": "ნამთინ ხასილაშ ტექსტი ვა უხუჯანს",
        "prevn": "წოხლენ $1",
        "nextn": "უკულიან {{PLURAL:$1|$1}}",
        "searchprofile-advanced": "გაუჯგუშებული",
        "searchprofile-articles-tooltip": "დოგორი $1-ს",
        "searchprofile-images-tooltip": "დოგორი ფაილეფი",
-       "searchprofile-everything-tooltip": "á\83\92á\83\9dá\83 á\83£á\83\90 á\83\90á\83 á\83«á\83\9d á\83®á\83\90á\83¡á\83\98á\83\9aá\83\90á\83¡ (á\83\9dá\83©á\83\98á\83\94á\83\91á\83\94á\83\9aá\83\98 á\83®á\83\90á\83¡á\83·á\83\9aá\83\94á\83¤á\83\98á\83¨ á\83\9bá\83\94á\83\99á\83\9dá\83 á\83\9dá\83ªá\83®á\83\98á\83\9aო)",
+       "searchprofile-everything-tooltip": "á\83\90á\83 á\83«á\83\9d á\83®á\83\90á\83¡á\83·á\83\9aá\83\90á\83¡ á\83\92á\83\9dá\83 á\83£á\83\90 (á\83\9dá\83¡á\83®á\83£á\83\9cá\83£á\83\94 á\83®á\83\90á\83¡á\83·á\83\9aá\83\94á\83¤á\83\98á\83¨á\83\90á\83\9bო)",
        "searchprofile-advanced-tooltip": "გორუა მახვარებუშ გენჭყილ ჯოხოეფიშ ოფირჩას",
-       "search-result-size": "$1 ({{PLURAL:$2|1 á\83\96á\83\98á\83¢á\83§á\83\95á\83\90|$2 á\83\96á\83\98á\83¢á\83§á\83\95á\83\94á\83¤}})",
+       "search-result-size": "$1 ({{PLURAL:$2|1 á\83\96á\83\98á\83¢á\83§á\83\95á\83\90|$2 á\83\96á\83\98á\83¢á\83§á\83\95á\83\90}})",
        "search-result-category-size": "{{PLURAL:$1|1 მაკათური|$1 მაკათური}} ({{PLURAL:$2|1 გიმენკატეგორია|$2 გიმენკატეგორია}}, {{PLURAL:$3|1 ფაილი|$3 ფაილეფი}})",
        "search-redirect": "(გინოწურაფა $1)",
        "search-section": "(სექცია $1)",
        "search-interwiki-more": "(უმოს)",
        "searchrelated": "მათანგეფ",
        "searchall": "არძო",
+       "search-showingresults": "{{PLURAL:$4|მოღალირობა <strong>$1</strong> შე <strong>$3</strong>|მოღალირობა <strong>$1 - $2</strong> შე <strong>$3</strong>}}",
        "search-nonefound": "თქვანი მოგორაფილიშ მუთუნნერ მანგი მოღალუქ ვეძირჷ.",
        "powersearch-legend": "გოძინელ გორუა",
        "powersearch-ns": "დოგორ ჯოხოეფიშ ოფირჩას:",
        "rightslog": "მახვარებუშ ნებეფიშ ჟურნალ",
        "action-edit": "თე ხასილაშ რედაქტირაფა",
        "nchanges": "$1 {{PLURAL:$1|თირაფა|თირაფეფ}}",
+       "enhancedrc-history": "ისტორია",
        "recentchanges": "ასეიანი თირაფეფი",
        "recentchanges-legend": "ასერდენ თირაფეფიშ ოფციეფ",
        "recentchanges-summary": "თე ხასჷლას ქაძირი ვიკიშა მიშაღალირ არძოშ უახალაშ თირაფეფი.",
        "recentchanges-label-minor": "თენა რე ციქა რედაქტირაფა",
        "recentchanges-label-bot": "თე რედაქტირაფა ბოტიშ ნაღოლემი რე",
        "recentchanges-label-unpatrolled": "თე რედაქტირაფა დიო ხოლო ვა რე პატრულირაფირი",
+       "recentchanges-label-plusminus": "თირაფეფიშ ზჷმა ბაიტეფს",
+       "recentchanges-legend-heading": "'''ლეგენდა:'''",
        "rcnotefrom": "თუდო მოჸუნაფილიე თირაფეფ, ”’$2””-შე (ძირაფილიე ”’$1”’)",
        "rclistfrom": "ახალ თირაფეფიშ ძირაფა დოჭყაფილ $3 $2-შე",
-       "rcshowhideminor": "$1 ჭიჭე რედაქტირაფეფ",
+       "rcshowhideminor": "$1 ჭიჭე რედაქტირაფეფი",
+       "rcshowhideminor-show": "ძირაფა",
+       "rcshowhideminor-hide": "ტყობინაფა",
        "rcshowhidebots": "ბოტეფიშ  $1",
+       "rcshowhidebots-show": "ძირაფა",
+       "rcshowhidebots-hide": "ტყობინაფა",
        "rcshowhideliu": "$1 მიშულირ მახვარებუეფ",
-       "rcshowhideanons": "$1 ანონიმურ მახვარებუეფ",
+       "rcshowhideliu-hide": "ტყობინაფა",
+       "rcshowhideanons": "$1 ანონიმურ მახვარებუეფი",
+       "rcshowhideanons-show": "ძირაფა",
+       "rcshowhideanons-hide": "ტყობინაფა",
        "rcshowhidepatr": "გოკონტროლაფირ თირაფეფიშ $1",
        "rcshowhidemine": "ჩქიმ რედაქტირაფეფიშ $1",
+       "rcshowhidemine-show": "ძირაფა",
+       "rcshowhidemine-hide": "ტყობინაფა",
        "rclinks": "ეკონია $2 დღას ღოლამირ ეკონია $1 თირაფეფიშ ძირაფა <br />$3",
        "diff": "შხვანერობა",
        "hist": "ისტ.",
        "minoreditletter": "ჭ.რ.",
        "newpageletter": "ახ.",
        "boteditletter": "ბ",
+       "rc-change-size-new": "ზჷმა თირუაშ უკული რე: {{PLURAL:$1|ბაიტი|ბაიტი}}",
        "rc-enhanced-expand": "დეტალეფიშ ძირაფა (ითხინს ჯავასქრიფთის)",
        "rc-enhanced-hide": "დეტალეფიშ ტყობინაფა",
        "recentchangeslinked": "აკოხვალამირ თირაფეფ",
        "recentchangeslinked-feed": "აკოხვალამირ თირაფეფ",
-       "recentchangeslinked-toolbox": "აკოხვალამირ თირაფეფ",
+       "recentchangeslinked-toolbox": "აკოხვალამირ თირაფეფ",
        "recentchangeslinked-title": "\"$1\"-შა მებუნაფილ თირაფეფი",
-       "recentchangeslinked-summary": "á\83\97á\83\94á\83\9cá\83\90 á\83 á\83\94 á\83\9bá\83\94á\83¬á\83£á\83 á\83\90á\83¤á\83\98á\83\9aá\83\98 á\83®á\83\90á\83¡á\83\98á\83\9aá\83\90á\83¬á\83\99á\83£á\83\9bá\83\90 (á\83\95á\83\90á\83 á\83\90 á\83\9bá\83\94á\83¬á\83£á\83 á\83\90á\83¤á\83\98á\83\9aá\83\98 á\83\99á\83\90á\83¢á\83\94á\83\92á\83\9dá\83 á\83\98á\83\90á\83¨ á\83\9bá\83\90á\83\99á\83\90á\83\97á\83£á\83 á\83\94á\83¤á\83¬á\83\99á\83£á\83\9bá\83\90) á\83\92á\83\98á\83\9cá\83\9dá\83 á\83ªá\83®á\83£á\83\90á\83¤á\83\98á\83\9aá\83\98 á\83®á\83\90á\83¡á\83\98á\83\9aá\83\94á\83¤á\83¡ á\83\94á\83\99á\83\9dá\83\9cá\83\98á\83\90 á\83\91á\83\9dá\83 á\83¯á\83\98á\83¡ á\83¦á\83\9dá\83\9aá\83\90á\83\9bá\83\98á\83 á\83\98 á\83\97á\83\98á\83 á\83\90á\83¤á\83\94á\83¤á\83\98á\83¨ á\83\94á\83 á\83\99á\83\94á\83\91á\83£á\83\9a. á\83®á\83\90á\83¡á\83\98á\83\9aá\83\94á\83¤á\83\98 [[Special:Watchlist|your watchlist]] á\83\92á\83\98მორთილი რე '''ფსქელას'''.\"",
+       "recentchangeslinked-summary": "á\83\97á\83\94á\83\9cá\83\90 á\83 á\83\94 á\83\9bá\83\94á\83¬á\83£á\83 á\83\90á\83¤á\83\98á\83\9aá\83\98 á\83®á\83\90á\83¡á\83·á\83\9aá\83\90á\83¬á\83\99á\83·á\83\9bá\83\90 (á\83\95á\83\90á\83 á\83\90 á\83\9bá\83\94á\83¬á\83£á\83 á\83\90á\83¤á\83\98á\83\9aá\83\98 á\83\99á\83\90á\83¢á\83\94á\83\92á\83\9dá\83 á\83\98á\83\90á\83¨ á\83\9bá\83\90á\83\99á\83\90á\83\97á\83£á\83 á\83\94á\83¤á\83¬á\83\99á\83·á\83\9bá\83\90) á\83\9bá\83\94á\83 á\83¡á\83®á\83£á\83\90á\83¤á\83\98á\83\9aá\83\98 á\83®á\83\90á\83¡á\83·á\83\9aá\83\94á\83¤á\83¡ á\83\94á\83\99á\83\9dá\83\9cá\83\98á\83\90 á\83\91á\83\9dá\83 á\83¯á\83\98á\83¡ á\83¦á\83\9dá\83\9aá\83\90á\83\9bá\83\98á\83 á\83\98 á\83\97á\83\98á\83 á\83\90á\83¤á\83\94á\83¤á\83\98á\83¨ á\83\94á\83 á\83\99á\83\94á\83\91á\83£á\83\9aá\83\98. á\83®á\83\90á\83¡á\83·á\83\9aá\83\94á\83¤á\83\98 [[Special:Watchlist|á\83\97á\83¥á\83\95á\83\90á\83\9cá\83\98 á\83\99á\83\9dá\83\9cá\83¢á\83 á\83\9dá\83\9aá\83\98á\83¨ á\83\94á\83 á\83\99á\83\94á\83\91á\83£á\83\9aá\83¡]] á\83\92á\83·მორთილი რე '''ფსქელას'''.\"",
        "recentchangeslinked-page": "ხასილაშ ჯოხო:",
        "recentchangeslinked-to": "მანგიერო ქაძირე ათე ხასილაშა მერცხილ ხასილეფშა მიშაღალირ თირაფეფ",
        "upload": "ფაილიშ ეხარგუა",
        "filedesc": "რეზიუმე",
        "license": "ლიცენზირაფა:",
        "license-header": "ლიცენზირაფა",
+       "imgfile": "ფაილი",
        "listfiles": "სურათეფიშ ერკებულ",
        "listfiles_name": "სახელ",
        "file-anchor-link": "ფაილი",
        "filehist": "ფაილიშ ისტორია",
        "filehist-help": "ქიგუნჭირით რიცხვის/ბორჯის თიშო, ნამდა ქოძირათ ფაილი თი რედაქციათ, მუ რედაქციას თი რიცხვის/ბორჯის რდუნ.",
        "filehist-revert": "დართინე",
-       "filehist-current": "მიმალ",
-       "filehist-datetime": "á\83 á\83\98á\83ªá\83®á\83\95á\83\98/ბორჯი",
+       "filehist-current": "მიმალ",
+       "filehist-datetime": "á\83 á\83\98á\83ªá\83®á\83£/ბორჯი",
        "filehist-thumb": "ჭკუდი",
        "filehist-thumbtext": "ჭკუდი $1-შო რსებულ ვერსიაშო",
        "filehist-user": "მახვარებუ",
-       "filehist-dimensions": "განზომილებეფ",
+       "filehist-dimensions": "განზომილებეფ",
        "filehist-filesize": "ფაილიშ ზომა",
-       "filehist-comment": "კომენტარ",
+       "filehist-comment": "კომენტარ",
        "imagelinks": "ფაილი გჷმორინაფილი რე",
        "linkstoimage": "გეყ’ვენჯი {{PLURAL:$1|ხასილა|ხასილეფ}} მერცხილ რე თე ფაილშა",
-       "nolinkstoimage": "á\83\95á\83\90 á\83 á\83\94 á\83\97á\83\94 á\83¤á\83\90á\83\98á\83\9aá\83¬á\83\99á\83£á\83\9bá\83\90 á\83\9bá\83\94á\83 á\83¡á\83®á\83\98á\83\9a á\83®á\83\90á\83¡á\83\98á\83\9aá\83\94á\83¤.",
+       "nolinkstoimage": "á\83\95á\83\90 á\83 á\83\94 á\83\97á\83\94 á\83¤á\83\90á\83\98á\83\9aá\83¬á\83\99á\83·á\83\9bá\83\90 á\83\9bá\83\94á\83 á\83¡á\83®á\83\98á\83\9aá\83\98 á\83®á\83\90á\83¡á\83·á\83\9aá\83\94á\83¤á\83\98.",
        "sharedupload": "თე ფაილ რე $1-შე დო შილებე თენა შხვა პროექტეფც ხოლო გიმირინაუფუდასინ",
        "sharedupload-desc-here": "თე ფაილი რე $1-შე დო შილებე გჷმორნაფილქ იჸუას შხვა პროექტეფს. თეშ ეჭარუა [$2 ფაილიშ ეჭარუაშ ხასჷლა] თუდოლე რე მოჩამილი.",
        "uploadnewversion-linktext": "გეშახარგე ათე ფაილიშ ახალ ვერსია",
+       "upload-disallowed-here": "თქვა ვა შეილებუნა თე ფაილიშ გჷნოჭაუა.",
        "mimesearch": "MIME გორუა",
-       "randompage": "á\83\9cá\83\90á\83\9bá\83\93á\83\92á\83\90á\83 á\83\94á\83\9c á\83®á\83\90á\83¡á\83\98ლა",
+       "randompage": "á\83\9cá\83\90á\83\9bá\83\93á\83\92á\83\90á\83 á\83\94á\83\9c á\83®á\83\90á\83¡á\83·ლა",
        "statistics": "სტატისტიკა",
        "withoutinterwiki": "ხასილეფ ნინაშ რსხილეფიშ გარეშე",
        "nbytes": "$1 ბაიტი",
        "nlinks": "$1 რსხილ",
-       "nmembers": "$1 {{PLURAL:$1|მაკათურ|მაკათურეფ}}",
+       "nmembers": "$1 {{PLURAL:$1|მაკათური|მაკათური}}",
        "uncategorizedpages": "უკატეგორიე ხასილეფ",
        "uncategorizedcategories": "კატეგორიეფ კატეგორიეფიშ გარეშე",
        "uncategorizedimages": "სურათეფ კატეგორიაშ უმიშო",
        "shortpages": "ჭიჭე ხასილეფ",
        "longpages": "გინძე ხასილეფ",
        "usercreated": "{{GENDER:$3|დირსხუ}} $2-ის $1-ს",
-       "newpages": "á\83\90á\83®á\83\90á\83\9a á\83®á\83\90á\83¡á\83\98á\83\9aá\83\94á\83¤",
+       "newpages": "á\83\90á\83®á\83\90á\83\9a á\83®á\83\90á\83¡á\83·á\83\9aá\83\94á\83¤á\83\98",
        "ancientpages": "ჯვეშ ხასილეფ",
        "move": "გინოღალა",
        "movethispage": "თე გვერდიშ გინოღალა",
        "pager-newer-n": "{{PLURAL:$1|უახალაშ 1|უახალაშ $1}}",
        "pager-older-n": "{{PLURAL:$1|უმოს ჯვეში 1|უმოს ჯვეში $1}}",
-       "booksources": "წინგიშ წყუეფ",
+       "booksources": "წინგიშ წყუეფ",
        "booksources-search-legend": "წიგნიშ წყუშ გორუა",
+       "booksources-search": "გორუა",
        "specialloguserlabel": "მახვარებუ:",
        "speciallogtitlelabel": "სათაურ:",
-       "log": "ჟურნალეფ",
+       "log": "ჟურნალეფ",
        "all-logs-page": "ირ ჟურნალ",
        "allpages": "არძა ხასილა",
        "nextpage": "უკულ ხასილა ($1)",
        "deleteotherreason": "შხვა/გეძინელ სამანჯელ:",
        "deletereasonotherlist": "შხვა სამანჯელ",
        "rollbacklink": "დორთა",
+       "rollbacklinkcount": "$1 {{PLURAL:$1|თირაფაშ|თირაფაშ}} გოუქვაფა",
        "protectlogpage": "თხილუაშ ისტორია",
        "protectedarticle": "თხილერი რე \"[[$1]]\"",
        "modifiedarticleprotection": "დოთირეთ თხილუაშ დონე \\\"[[$1]]\\-შო",
        "undeleteviewlink": "ძირაფა",
        "undelete-search-submit": "გორუა",
        "namespace": "ჯოხოეფიშ ოფირჩა:",
-       "invert": "á\83\90á\83 á\83«á\83\90, á\83\9bá\83\94á\83¦á\83\90á\83\9cá\83\99á\83\98á\83\9aá\83\98á\83¨ á\83\92á\83£á\83\9bá\83\9dá\83 á\83\99á\83\94á\83\91á\83£á\83\9aá\83\9d",
+       "invert": "á\83\90á\83 á\83«á\83\9d, á\83\9bá\83\94á\83 á\83©á\83¥á\83\98á\83\9cá\83\94á\83\9aá\83\98á\83¨ á\83\9bá\83\9dá\83®",
        "blanknamespace": "(დუდ)",
        "contributions": "მახვარებუშ მიშაღალირ თია",
        "contributions-title": "$1-შა მახვარებუშ მიშაღალირ თია",
        "sp-contributions-username": "IP მიოწურაფუ ვარა მახვარებუშ ჯოხო:",
        "sp-contributions-toponly": "ქაძირი ხვალე ეკონია რევიზიეფი რენ ფერი რედაქტირაფეფი",
        "sp-contributions-submit": "გორუა",
-       "whatlinkshere": "á\83¡á\83\9dá\83\95á\83 á\83\94á\83¨á\83\94 á\83 á\83\94 á\83\97á\83\94 á\83®á\83\90á\83¡á\83\98á\83\9aá\83\90 á\83¬á\83£á\83 á\83\90á\83¤á\83\98á\83\9a",
-       "whatlinkshere-title": "á\83®á\83\90á\83¡á\83\98á\83\9aá\83\94á\83¤, ნამუთ გინორცხილ რე $1-შა",
+       "whatlinkshere": "á\83¡á\83\9dá\83\95á\83 á\83\94á\83¨á\83\94 á\83 á\83\94 á\83\97á\83\94 á\83®á\83\90á\83¡á\83·á\83\9aá\83\90 á\83¬á\83£á\83 á\83\90á\83¤á\83\98á\83\9aá\83\98",
+       "whatlinkshere-title": "á\83®á\83\90á\83¡á\83·á\83\9aá\83\94á\83¤á\83\98, ნამუთ გინორცხილ რე $1-შა",
        "whatlinkshere-page": "ხასჷლა:",
        "linkshere": "გეყ’ვენჯ ხასილეფ გინარცხუაფუ '''[[:$1]]'''-ეფს",
        "nolinkshere": "ნამთინ ხასილა ვა რე გინორცხილ '''[[:$1]]'''-შა.",
-       "isredirect": "á\83\92á\83\98á\83\9cá\83\9dá\83¬á\83£á\83 á\83\90á\83¤á\83\90á\83¨ á\83®á\83\90á\83¡á\83\98ლა",
+       "isredirect": "á\83\92á\83\98á\83\9cá\83\9dá\83¬á\83£á\83 á\83\90á\83¤á\83\90á\83¨ á\83®á\83\90á\83¡á\83·ლა",
        "istemplate": "ტრანსკლუზია",
        "isimage": "ფაილიშ რცხი",
        "whatlinkshere-prev": "{{PLURAL:$1|წოხოლენ|წოხოლენ $1}}",
        "blocklink": "ბლოკირაფა",
        "unblocklink": "ბლოკიშ მონწყუმა",
        "change-blocklink": "ბლოკიშ თირუა",
-       "contribslink": "ნახანდ",
+       "contribslink": "ნახანდ",
        "blocklogpage": "ბლოკირეფიშ ერკებულ",
        "blocklogentry": "ბლოკირ რე [[$1]] ბლოკირაფაშ ვადაშ ათე გულა ბორჯით: $2 $3.",
        "unblocklogentry": "$1-შა ბლოკიშ მონწყუმა",
        "movelogpage": "ორეგისტრაციე ჟურნალიშ გინოღალა",
        "movereason": "სამანჯელი:",
        "revertmove": "გოუქვაფა",
-       "export": "á\83®á\83\90á\83¡á\83\98á\83\9aá\83\94á\83¤á\83\98á\83¨ á\83\94á\83¥á\83¡á\83\9eá\83\9dá\83 á\83¢",
+       "export": "á\83®á\83\90á\83¡á\83·á\83\9aá\83\94á\83¤á\83\98á\83¨ á\83\94á\83¥á\83¡á\83\9eá\83\9dá\83 á\83¢á\83\98",
        "allmessages": "ირ სისტემურ შეტყვინაფა",
        "allmessagesname": "ჯოხო",
        "allmessagesdefault": "შატყვინაფაშ სტანდარტულ ტექსტი",
        "thumbnail-more": "მორდი",
        "thumbnail_error": "ესკიზიშ ქიმინუაშ ჩილათა: $1",
        "importlogpage": "იმპორტიშ ჟურნალ",
-       "tooltip-pt-userpage": "á\83\97á\83¥á\83\95á\83\90á\83\9cá\83\98 á\83\9bá\83\90á\83®á\83\95á\83\90á\83 á\83\94á\83\91á\83£á\83¨ á\83®á\83\90á\83¡á\83\98ლა",
+       "tooltip-pt-userpage": "á\83\97á\83¥á\83\95á\83\90á\83\9cá\83\98 á\83\9bá\83\90á\83®á\83\95á\83\90á\83 á\83\94á\83\91á\83£á\83¨ á\83®á\83\90á\83¡á\83·ლა",
        "tooltip-pt-mytalk": "თქვანი სხუნუაშ ხასილა",
        "tooltip-pt-preferences": "ჩქიმ კონფიგურაციეფ",
        "tooltip-pt-watchlist": "ხასილეფიშ ერკებულ, ნამუთუშ მონიტორინგის ორთუთ თირაფაშ მიზანით",
        "tooltip-pt-mycontris": "თქვანი მიშნაღელ თიეფიშ ერკებულ",
-       "tooltip-pt-login": "á\83¯á\83\92á\83\98á\83  á\83\98á\83¸á\83\98 á\83\92á\83\94á\83\9bá\83¨á\83£á\83 á\83\97á\83£â\80\93á\83\93á\83\90, á\83\9bá\83\90á\83 á\83\90 á\83\97á\83\94á\83\9cá\83\90 á\83\95á\83\90 á\83 á\83\94 á\83¡á\83\90á\83\95á\83\90á\83\9aá\83\93á\83\94á\83\91á\83£á\83\9aო",
+       "tooltip-pt-login": "á\83¯á\83\92á\83\98á\83  á\83\98á\83¸á\83\98 á\83\92á\83\94á\83\9bá\83¨á\83£á\83 á\83\97á\83£â\80\93á\83\93á\83\90, á\83\9bá\83\90á\83 á\83\90 á\83\97á\83\94á\83\9cá\83\90 á\83\95á\83\90 á\83 á\83\94 á\83£á\83ªá\83\98ო",
        "tooltip-pt-logout": "გიშულა",
-       "tooltip-ca-talk": "დინორეშ ხასილაშ სხუნუა",
-       "tooltip-ca-edit": "თქვა შეილებნა თე ხასილაშ რედაქტირაფა. რთხინთ, გეუნჭირით გიწოთოლორაფაშ კონჭის სოიშახ ხასილას ჩუანდათინ",
+       "tooltip-pt-createaccount": "ჩქი გიზალუთ, გონწყათ ანგარიში დაო გენშართათ სისტემაშა; მარა თენა ვა რე უციო",
+       "tooltip-ca-talk": "დინორეშ ხასჷლაშ სხუნუა",
+       "tooltip-ca-edit": "თქვა შეილებნა თე ხასჷლაშ რედაქტირაფა. რთხინთ, გეუნჭირით გიწოთოლორაფაშ კონჭის სოიშახ ხასჷლას ჩუანდათინ",
        "tooltip-ca-addsection": "ქიდიჭყით ახალ სექცია",
-       "tooltip-ca-viewsource": "á\83®á\83\90á\83¡á\83\98á\83\9aá\83\90 á\83\97á\83®á\83\98á\83\9aá\83\94á\83  რე. \nშეგილებუნა ძირათ თეშ წყუ.",
-       "tooltip-ca-history": "á\83\97á\83\94 á\83®á\83\90á\83¡á\83\98á\83\9aá\83\90á\83¨á\83\90 á\83\9bá\83\98á\83¨á\83\90á\83¦á\83\90á\83\9aá\83\98á\83  á\83\97á\83\98á\83 á\83\90á\83¤á\83\94á\83¤",
+       "tooltip-ca-viewsource": "á\83\97á\83\94 á\83®á\83\90á\83¡á\83·á\83\9aá\83\90 á\83\97á\83®á\83\98á\83\9aá\83\94á\83 á\83\98 რე. \nშეგილებუნა ძირათ თეშ წყუ.",
+       "tooltip-ca-history": "á\83\97á\83\94 á\83®á\83\90á\83¡á\83·á\83\9aá\83\90á\83¨á\83\90 á\83\9bá\83\98á\83¨á\83\90á\83¦á\83\90á\83\9aá\83\98á\83 á\83\98 á\83\97á\83\98á\83 á\83\90á\83¤á\83\94á\83¤á\83\98",
        "tooltip-ca-protect": "ხასილაშ თხილუა",
        "tooltip-ca-delete": "თე ხასილაშ ლასუა",
-       "tooltip-ca-move": "á\83\92á\83\94á\83\92á\83\9cá\83\98á\83¦á\83\98 á\83\97á\83\94 á\83®á\83\90á\83¡á\83\98ლა",
-       "tooltip-ca-watch": "á\83\97á\83\94 á\83®á\83\90á\83¡á\83\98á\83\9aá\83\90á\83¨ á\83\92á\83\94á\83«á\83\98á\83\9cá\83\90 á\83\97á\83¥á\83\95á\83\90á\83\9c á\83\99á\83\9dá\83\9cá\83¢á\83 á\83\9dá\83\9aá\83\98á\83 á\83\94á\83\91á\83£á\83\9a á\83®á\83\90á\83¡á\83\98ლეფიშ ერკებულშა",
+       "tooltip-ca-move": "á\83\92á\83\94á\83\92á\83\9cá\83\98á\83¦á\83\98 á\83\97á\83\94 á\83®á\83\90á\83¡á\83·ლა",
+       "tooltip-ca-watch": "á\83\97á\83\94 á\83®á\83\90á\83¡á\83·á\83\9aá\83\90á\83¨ á\83\92á\83\94á\83«á\83\98á\83\9cá\83\90 á\83\97á\83¥á\83\95á\83\90á\83\9c á\83\99á\83\9dá\83\9cá\83¢á\83 á\83\9dá\83\9aá\83\98á\83 á\83\94á\83\91á\83£á\83\9aá\83\98 á\83®á\83\90á\83¡á\83·ლეფიშ ერკებულშა",
        "tooltip-ca-unwatch": "მონწყით თე ხასილა თქვან კონტროლებულ ხასილეფიშ ერკებულშე",
        "tooltip-search": "გორუა {{SITENAME}}",
        "tooltip-search-go": "გეგნორთი წორას ათე ჯოხოშ ხასილაშა შურო ქო რენ-და",
        "tooltip-search-fulltext": "დოგორი ხასილეფი, ნამუთ თე ტექსტის იკათუანან",
        "tooltip-p-logo": "დუდხასჷლაშ ძირაფა",
-       "tooltip-n-mainpage": "დუდ ხასილაშ ძირაფა",
+       "tooltip-n-mainpage": "დუდხასჷლაშ ძირაფა",
        "tooltip-n-mainpage-description": "დუდ ხასილაშა გინოზოჯუა",
        "tooltip-n-portal": "პროექტიშენი, მუშ ქიმინუა შეილებუნა, სოდე შილებე გორათინ",
-       "tooltip-n-currentevents": "á\83\93á\83\9dá\83\92á\83\9dá\83 á\83\98á\83\97 á\83 á\83¡á\83£á\83\9aá\83\98 á\83\98á\83\9cá\83¤á\83\9dá\83 á\83\9bá\83\90á\83ªá\83\98á\83\90 á\83\90á\83¡á\83\94á\83\98á\83\90á\83\9c á\83\9bá\83\9dá\83\9aá\83\98á\83\9cá\83\94á\83¤á\83\98á\83¨á\83\94á\83\9c",
-       "tooltip-n-recentchanges": "ვიკიშა ეკონია ბორჯის მიშაღალირ თირაფეფიშ ერკებულ",
+       "tooltip-n-currentevents": "á\83\93á\83\9dá\83\92á\83\9dá\83 á\83\98á\83\97 á\83 á\83¡á\83£á\83\9aá\83\98 á\83\98á\83\9cá\83¤á\83\9dá\83 á\83\9bá\83\90á\83ªá\83\98á\83\90 á\83\90á\83¡á\83\94á\83\98á\83\90á\83\9c á\83\9bá\83\9dá\83\9aá\83\98á\83\9cá\83\94á\83¤á\83¨á\83\94á\83\9cá\83\98",
+       "tooltip-n-recentchanges": "ვიკიშა ეკონია ბორჯის მიშაღალირი თირაფეფიშ ერკებული",
        "tooltip-n-randompage": "ქუმოძირ ნამუდგარდასინ ხასილა",
        "tooltip-n-help": "\"ხასილა, სოდეთ გარკვიენთინ",
        "tooltip-t-whatlinkshere": "არძო ვიკი ხასილაშ ერკებულ, ნამუდგა თაქ იწურუანსინ",
-       "tooltip-t-recentchangeslinked": "á\83\97á\83\94 á\83®á\83\90á\83¡á\83\98á\83\9aá\83\90á\83¬á\83\99á\83£á\83\9bá\83\90 á\83\92á\83\98á\83\9cá\83\9dá\83 á\83ªá\83®á\83\98á\83\9aá\83\98 á\83®á\83\90á\83¡á\83\98á\83\9aá\83\94á\83¤á\83¨á\83\90 á\83\90á\83¡á\83\94á\83 á\83\93á\83\94 á\83\9bá\83\98á\83¨á\83\90á\83¦á\83\90á\83\9aá\83\98á\83  თირაფეფი",
+       "tooltip-t-recentchangeslinked": "á\83\97á\83\94 á\83®á\83\90á\83¡á\83·á\83\9aá\83\90á\83¬á\83\99á\83·á\83\9bá\83\90 á\83\9bá\83\94á\83 á\83¡á\83®á\83\98á\83\9a á\83®á\83\90á\83¡á\83·á\83\9aá\83\94á\83¤á\83¨á\83\90 á\83\90á\83¡á\83\94á\83 á\83\93á\83\94 á\83\9bá\83\98á\83¨á\83\90á\83¦á\83\90á\83\9aá\83\98á\83 á\83\98 თირაფეფი",
        "tooltip-feed-rss": "მოჩამილი ხასილაშ RSS არხიშ ტრანსლაცია",
        "tooltip-feed-atom": "ათე ხასილაშ ატომ არხიშ ტრანსლაცია",
        "tooltip-t-contributions": "თე მახვარებუშ მიშაღალირ თიაშ ერკებულიშ ძირაფა",
        "tooltip-t-emailuser": "მიდუჯღონით ელ.ფოშტა ათე მახვარებუს",
        "tooltip-t-upload": "გეხარგე ფაილი",
-       "tooltip-t-specialpages": "á\83\90á\83 á\83«á\83\9d á\83¡á\83\9eá\83\94á\83ªá\83\98á\83\90á\83\9aá\83£á\83  á\83®á\83\90á\83¡á\83\98á\83\9aá\83\90á\83¨ á\83\94á\83 á\83\99á\83\94á\83\91á\83£á\83\9a",
-       "tooltip-t-print": "á\83\97á\83\94 á\83®á\83\90á\83¡á\83\98ლაშ ობეშტალი ვერსია",
+       "tooltip-t-specialpages": "á\83\90á\83 á\83«á\83\9d á\83¡á\83\9eá\83\94á\83ªá\83\98á\83\90á\83\9aá\83£á\83  á\83®á\83\90á\83¡á\83·á\83\9aá\83\90á\83¨ á\83\94á\83 á\83\99á\83\94á\83\91á\83£á\83\9aá\83\98",
+       "tooltip-t-print": "á\83\97á\83\94 á\83®á\83\90á\83¡á\83·ლაშ ობეშტალი ვერსია",
        "tooltip-t-permalink": "პერმანენტულ რცხი ხასილაშ თე ვერსიაშა",
-       "tooltip-ca-nstab-main": "á\83\93á\83\98á\83\9cá\83\9dá\83 á\83\94á\83¨ á\83®á\83\90á\83¡á\83\98ლაშ ძირაფა",
-       "tooltip-ca-nstab-user": "á\83\9bá\83\90á\83®á\83\95á\83\90á\83 á\83\94á\83\91á\83£á\83¨ á\83®á\83\90á\83¡á\83\98ლაშ ძირაფა",
-       "tooltip-ca-nstab-special": "á\83\97á\83¥á\83\95á\83\90 á\83\90á\83¡á\83\94 á\83 á\83\94á\83\97 á\83¡á\83\9eá\83\94á\83ªá\83\98á\83\90á\83\9aá\83£á\83  á\83®á\83\90á\83¡á\83\98á\83\9aá\83\90á\83¡, á\83\97á\83¥á\83\95á\83\90 á\83\95á\83\90 á\83¨á\83\94á\83\98á\83\9aá\83\94á\83\91á\83£á\83\9cá\83\90 á\83\90á\83\97á\83\94 á\83®á\83\90á\83¡á\83\98ლაშ რედაქტირაფა",
-       "tooltip-ca-nstab-project": "á\83\9eá\83 á\83\9dá\83\94á\83¥á\83¢á\83\98á\83¨ á\83®á\83\90á\83¡á\83\98ლაშ ძირაფა",
-       "tooltip-ca-nstab-image": "á\83¤á\83\90á\83\98á\83\9aá\83\98á\83¨ á\83®á\83\90á\83¡á\83\98ლაშ ძირაფა",
+       "tooltip-ca-nstab-main": "á\83\93á\83\98á\83\9cá\83\9dá\83 á\83\94á\83¨ á\83®á\83\90á\83¡á\83·ლაშ ძირაფა",
+       "tooltip-ca-nstab-user": "á\83\9bá\83\90á\83®á\83\95á\83\90á\83 á\83\94á\83\91á\83£á\83¨ á\83®á\83\90á\83¡á\83·ლაშ ძირაფა",
+       "tooltip-ca-nstab-special": "á\83\97á\83¥á\83\95á\83\90 á\83\90á\83¡á\83\94 á\83 á\83\94á\83\97 á\83¡á\83\9eá\83\94á\83ªá\83\98á\83\90á\83\9aá\83£á\83  á\83®á\83\90á\83¡á\83·á\83\9aá\83\90á\83¡, á\83\97á\83¥á\83\95á\83\90 á\83\95á\83\90 á\83¨á\83\94á\83\98á\83\9aá\83\94á\83\91á\83£á\83\9cá\83\90 á\83\90á\83\97á\83\94 á\83®á\83\90á\83¡á\83·ლაშ რედაქტირაფა",
+       "tooltip-ca-nstab-project": "á\83\9eá\83 á\83\9dá\83\94á\83¥á\83¢á\83\98á\83¨ á\83®á\83\90á\83¡á\83·ლაშ ძირაფა",
+       "tooltip-ca-nstab-image": "á\83¤á\83\90á\83\98á\83\9aá\83\98á\83¨ á\83®á\83\90á\83¡á\83·ლაშ ძირაფა",
        "tooltip-ca-nstab-template": "თანგიშ ძირაფა",
        "tooltip-ca-nstab-help": "ქოძირეთ დახვარებაშ გვერდ",
        "tooltip-ca-nstab-category": "ხასილაშ კატეგორიაშ ძირაფა",
        "tooltip-rollback": "\"დორთინა\" ათე ხასილაშა ეკონია გინმახანდეშ ნაღოლემ თირაფას(ეფს) გოუქვენს ართ გენჭირათ",
        "tooltip-undo": "\"გოუქვაფა\" მიშაღალირ თირაფეფს გოუქვენს დო გუთმონწყუნს რედაქტირაფაშ ფორმას გიწოთოლორაფაშ რეჟიმს. თენა შესაძლებლობას ირძენს რეზიუმეს სამანჯელქ იყ’უას დაკონკრეტებულქინ.",
        "tooltip-summary": "კუნტა რეზიუმეშ მიშაჸონაფა",
-       "previousdiff": "← წოხოლენი თირაფეფ",
+       "simpleantispam-label": "სპამიშ სააწმარენჯო შემოწმაფა.\nთენა '''ვა''' შეამსათ!",
+       "pageinfo-toolboxlink": "ხასჷლაშ ინფორმაცია",
+       "previousdiff": "← წოხოლენ თირაფეფი",
        "nextdiff": "უახალაშ თირაფა →",
        "file-info-size": "$1 × $2 პიქსელ, ფაილიშ ზომა: $3, MIME ტიპ: $4",
        "file-nohires": " უმოს მაღალ გიშაგორანჯალა ვა რე შელებუან.",
        "svg-long-desc": "SVG ფაილ, ნომინალურო $1 × $2 პიქსელ, ფაილიშ ზიმა: $3",
        "show-big-image": "რსული გიშაგორანჯალა",
+       "show-big-image-preview": "ზჷმა გიწოთოლორაფაშ ბორჯის: $1.",
+       "show-big-image-size": "$1 × $2 პიქსელი",
        "newimages": "ახალ სურათეფ",
        "ilsubmit": "გორუა",
        "bad_image_list": "ფორმატ რე უკულიანიშნერო:\\n\\n ხვალე ერკებულშე გიშნაგორეფ (ლაწკარეფ, ნამუთ იჭყაფუ *-ით) ისხუნუ.\nლაწკარიშ პირველ რცხი ოკო რდას რცხი გლახა ფაილშა.\nკინ თი ლაწკარს რინელ ნამდგაინ უკულიან რცხი კილესხუნუ მუჭოთ გიმნარკეში, ნამუთ ნიშნენს  ხასილეფს, სოდგა ფაილეფ შილებე რდას ღოზეფს შკას დინოხუნაფილ.",
-       "metadata": "á\83\9bá\83\94á\83¢á\83\90á\83\9bá\83\9dá\83©á\83\90á\83\9bá\83\98á\83\9aá\83\9dá\83¤á\83\94á\83¤",
+       "metadata": "á\83\9bá\83\94á\83¢á\83\90á\83\9bá\83£á\83\9cá\83\90á\83©á\83\94á\83\9bá\83\94á\83¤á\83\98",
        "metadata-help": "თე ფაილს ოხოლუ გეძინელ ინფორმაცია, ნამუთ ოეგებიეთ თი ციფრულ კამერაშე ვარა სკანერშე რე გეძინელ, ნამუთ რდუ გუმორინაფილ თე ფაილიშ ოქიმინჯალო ვარა დაციფრებელო. ფაილიშ ორიგინალ თირელ ქორენ-და, შილებე კანკალე დეტალ ვა გიშაძირუანდას ფაილშა მიშაღალირ თირაფეფს.",
        "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-imagelength": "სიმაღალე",
+       "exif-datetime": "ფაილიშ თირუაშ რიცხუ დო ბორჯი",
+       "exif-software": "გჷმორინაფილი პროგრამა",
+       "exif-exifversion": "ვერსია Exif",
+       "exif-colorspace": "ფერეფიშ პალიტრა",
+       "exif-orientation-1": "ნორმალური",
        "namespacesall": "არძა",
        "monthsall": "არძა",
        "watchlisttools-view": "მერცხილ თირაფეფიშ ძირაფა",
        "watchlisttools-edit": "ოკონტროლებელ ხასილეფიშ ძირაფა დო რედაქტირაფა",
        "watchlisttools-raw": "კონტროლიშ ერკებულიშ რედაქტირაფა ტექსტიშ ფორმატის",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|სხუნუა]])",
        "duplicate-defaultsort": "''გური ქუჩით:''' სტანდარტული დანწყუალაშ კილა \"$2\"-შო გინარჯგინანს ორდონი დონწყუალაშ კილა \"$1\"-ს.",
        "version": "ვერსია",
        "specialpages": "გჷშაკერძაფილი ხასჷლეფი",
        "external_image_whitelist": "\"#ქჷდიტე თე ღოზი კოკობო მუჭო რენ თეში<pre>\n#ქინახუნე რეგულარული გამოსახულებაშ ფრაგმენტეფი (თი ნაწილი ნამუთ თეშ // შქას ინოდოხოდ) თუდოლე\n#თენეფი მეზჷმაფილ იჸე გალენ (hotlinked) სურათეფიშ URL-ეფშა.\n#ნამუთ მიორენ თინა სურათეფო გაგშარჩქინდჷ, ვარ-და ხვალე სურათიშ რცხუ ირწყებედასიი.\n#ღოზეფი #-თ დოჭყაფილი კომენტარო რე მერჩქინელი.\n#თენა გჷნაფულენს ასოეფიშ რეგისტრის.\n\n#ქინახუნე არძო regex ფრაგმენტეფი თე ღოზიშ ჟი. ქჷდიტე თე ღოზი კოკობო მუჭო რენ თეში</pre>\"",
        "tag-filter": "[[Special:Tags|ხინტკეფიშ]] ტკიბირი:",
-       "searchsuggest-search": "გორუა"
+       "logentry-delete-delete": "მოხვარებუქ $1 {{GENDER:$2|დოლასუ}} ხასჷლა: „$3“",
+       "logentry-move-move": "მახვარებუქ $1 ხასჷლა „$3“ {{GENDER:$2|გეგნიღჷ}} ხასჷლაშა „$4“",
+       "logentry-upload-upload": "მახვარებუქ $1 {{GENDER:$2|ეხარგუ}} $3",
+       "searchsuggest-search": "გორუა",
+       "special-characters-group-ipa": "IPA"
 }
index 629b9f5..09ab08c 100644 (file)
        "wrongpassword": "אומריכטיגע פאסווארט אריינגעלייגט.\nביטע פרובירט נאכאמאל.",
        "wrongpasswordempty": "פאסווארט אריינגעלייגט איז געווען ליידיג.\nביטע פרובירט נאכאמאל.",
        "passwordtooshort": "פאַסווערטער מוזן זײַן כאטש {{PLURAL:$1|איין כאַראַקטער|$1 כאַראַקטערס}}.",
+       "passwordtoolong": "פאַסווערטער טארן נישט זיין לענגער וויי {{PLURAL:$1|איין כאַראַקטער|$1 כאַראַקטערס}}.",
        "password-name-match": "אײַער פאַסווארט מוז זײַן אנדערש פון אײַער באַניצער נאָמען.",
        "password-login-forbidden": "באַניצן דעם נאָמען און שפּריכוואָרט איז פאַרבאָטן.",
        "mailmypassword": "צוריקשטעלן פאַסווארט",
        "missingcommentheader": "'''דערמאַנונג:''' איר האט נישט אַרײַנגעשטעלט א טעמע/קעפל פאר דער אנמערקונג. אויב וועט איר דרוקן נאכאמאל אויפן \"{{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\nגיט אכט אז איר קענט נישט ניצן די \"שיקט דעם באניצער א ע-פאסט\" אייגנקייט אויב האט איר נישט איינגעשטעלט אין אייערע [[Special:Preferences|קונטע פרעפערענצן]] א גילטיקן בליצפאסט אדרעסדאס אדער איר זענט בלאקירט פון שיקן בליצפאסט.\n\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אױב האָט איר ניט אַרײַנגעקלאַפּט אײַער בליצפּאָסט־אַדרעס אין אײַערע [[Special:Preferences|פּרעפֿערענצן]] אדער איר זענט בלאקירט פון שיקן בליצפאסט, קענט איר זיך ''נישט'' ניצן די אפציע \"שיקט דעם באניצער אן ע-פאסט\".\n\nאייער יעצטיגער IP אדרעס איז $3, און דער בלאָקירונג־נומער איז #$5.\nביטע צײכנט עס אָן בשעת איר װענדט זיך צו די סיסאָפּן.",
        "import-interwiki-history": "קאפירן אלע היסטאריע ווערסיעס פאר דעם בלאט",
        "import-interwiki-templates": "איינשילסן אלע מוסטערן",
        "import-interwiki-submit": "אימפארט",
-       "import-interwiki-namespace": "ציל נאמענטייל:",
-       "import-interwiki-rootpage": "ציל שטאמבלאט (אפציאנאל):",
        "import-upload-filename": "טעקע נאמען:",
        "import-comment": "הערה:",
        "importtext": "ביטע עקספארטירט די טעקע פון דער מקור וויקי ניצנדיג דאס [[Special:Export|עקספארט הילפמיטל]], שפייכלט אײַן אויף אײַער קאמפיוטער און לאדט אַרויף דא.",
index 4106e1b..b849ca4 100644 (file)
        "preview": "Àyẹ̀wò",
        "showpreview": "Àkọ́yẹ̀wò",
        "showdiff": "Ìfihàn àwọn àtúnṣe",
-       "anoneditwarning": "'''Ìkìlọ̀:''' Ẹ kò tíì wọlé.\nÀdírẹ́ẹ̀sì IP yín yíò jẹ́ kíkọpamọ́ sínú ìwé ìtàn àtúnṣe ojúewé yìí.",
+       "anoneditwarning": "<strong>Ìkìlọ̀:</strong> Ẹ kò tíì wọlé.\nÀdírẹ́ẹ̀sì IP yín yíò hàn jáde tí ẹ bá ṣe àtùnṣe. Tí ẹ bá <strong>[$1 wọlé]</strong> tàbí <strong>[$2 dá àkópamọ́]</strong>, àwọn àtúnṣe yín yíò hàn pẹ̀lú orúkọ-oníṣe yín, pẹ̀lú àwọn ànfàní míràn.",
        "anonpreviewwarning": "''Ẹ kò tíì wọlé. Àdírẹ́ẹ̀sì IP yín yíò jẹ́ kíkọsílẹ̀ sínú ìwé ìtàn àtúnṣe ojúewé yìí tí ẹ bá ṣàmúpamọ́ rẹ̀.''",
        "missingsummary": "'''Ìránlétí:''' Ẹ kò pèsè àkótán fún àtúnṣe yìí\nTí ẹ bá tẹ Ìmúpamọ́ lẹ́ẹ̀kansi, àtúnṣe yín yíò jẹ̀ mímúpamọ́ láìní kankan.",
        "missingcommenttext": "Ẹjọ̀wọ́ ẹ ṣe áríwí ní ìsàlẹ̀",
        "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",
        "rcshowhideminor": "$1 àwọn àtúnṣe kékéèké",
+       "rcshowhideminor-hide": "Ìbòmọ́lẹ̀",
        "rcshowhidebots": "$1 àwọn bot",
+       "rcshowhidebots-show": "Ìfihàn",
        "rcshowhideliu": "$1 àwọn oníṣe aforúkọsílẹ̀",
+       "rcshowhideliu-hide": "Ìbòmọ́lẹ̀",
        "rcshowhideanons": "$1 àwọn oníṣe aláìlórúkọ",
+       "rcshowhideanons-hide": "Ìbòmọ́lẹ̀",
        "rcshowhidepatr": "$1 àwọn àtúnṣe ọlùṣọ́",
        "rcshowhidemine": "$1 àwọn àtúnṣe mi",
+       "rcshowhidemine-hide": "Ìbòmọ́lẹ̀",
        "rclinks": "Ṣ'àfihàn àtúnṣe $1 tó kẹ̀yìn ní ọjọ́ $2 sẹ́yìn<br />$3",
        "diff": "ìyàtọ̀",
        "hist": "ìtàn",
        "import-interwiki-history": "Ṣe àwòkọ gbogbo àwọn àtúnyẹ̀wò ìtàn fún ojúewé yìí",
        "import-interwiki-templates": "Ìmúpọ̀ gbogbo àwọn àdàkọ",
        "import-interwiki-submit": "Ìkówọlé",
-       "import-interwiki-namespace": "Orúkọàyè ìdópin:",
-       "import-interwiki-rootpage": "Ojúewé ìpasẹ̀ ìbọ́sí (àṣàyàn):",
        "import-upload-filename": "Orúkọ faili:",
        "import-comment": "Àríwí:",
        "importtext": "Ẹ jọ̀wọ́ ṣe ìkójáde fáìlì láti wiki orísun pẹ̀lú [[Special:Export|aṣe ìkójáde]].\nẸ fipamọ́ sínú kọ̀mpútà yín, kí ẹ sì ṣe ìrùsókè rẹ̀ síbí.",
        "tooltip-pt-mycontris": "Àkójọ àwọn àfikún yín",
        "tooltip-pt-login": "A gbà yín níyànjú kí ẹwọlé, bótilẹ̀jẹ́pẹ́ kò pọndandan.",
        "tooltip-pt-logout": "Ìjáde",
+       "tooltip-pt-createaccount": "Ó dára kí ẹ dá àkópamọ́ kí ẹ sì ṣe ìtẹ̀jáwọlé, ṣùgbọ́n kò pọn dandan",
        "tooltip-ca-talk": "Ìfọ̀rọ̀wérọ̀ nípa ohun inú ojúewé yìí",
        "tooltip-ca-edit": "Ẹ le ṣe àtúnṣe sí ojúewé yìí.\nẸ jọ̀wọ́ ẹ lo bọtini àyẹ̀wò kí ẹ tó fipamọ́.",
        "tooltip-ca-addsection": "Ẹ bẹ̀rẹ̀ abẹlẹ tuntun",
        "spam_reverting": "Ìdápadà sí àtúnyẹ̀wò tó gbẹ̀yìn tí kò ní àjápọ̀ sí $1",
        "spam_blanking": "Gbogbo àtúnyẹ̀wò ní àjápọ̀ sí $1, ìmúkúrò",
        "spam_deleting": "Gbogbo àtúnyẹ̀wò ní àjápọ̀ sí $1, ìparẹ́",
+       "simpleantispam-label": "Ẹ <strong>KÒ GBỌDỌ̀</strong> fi ohun kankan sínú ibí!",
        "pageinfo-title": "Àròyé fún \"$1\"",
        "pageinfo-not-current": "Ìforíjì, kò ṣe é ṣe láti pèsè ẹ̀kúnrẹ̀rẹ̀-ọ̀rọ̀ fún àwọn àtúnyẹ̀wò tó ti pẹ́.",
        "pageinfo-header-basic": "Ọ̀rọ̀ẹ̀kúnrẹ́rẹ́ oníkókó",
        "tags": "Àwọn àlẹ̀mọ́ tuntun gidi",
        "tag-filter": "Ajọ̀ [[Special:Tags|àlẹ́mọ́]]:",
        "tag-filter-submit": "Ajọ̀",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Àlẹ̀mọ́|Àwọn àlẹ̀mọ́}}]]: $2)",
        "tags-title": "Àwọn àlẹ̀mọ́",
        "tags-intro": "Ojúewé yìí ṣe àtòjọ àwọn àlẹ̀mọ́ tí atọ́nà kọ̀mpútà le ṣe àmì àtúnṣe pẹ̀lú, àti ìtumọ̀ wọn.",
        "tags-tag": "Orúkọ àlẹ́mọ́",
        "logentry-patrol-patrol": "$1 ṣe àmí àtúnyẹ̀wò $4 ojúewé $3 bíi sísọ́",
        "logentry-patrol-patrol-auto": "$1 fúnraẹni ṣàmì àtúnyẹ̀wò $4 ti ojúewé $3 bíi síṣọ́",
        "logentry-newusers-newusers": "Àpamọ́ oníṣe $1 jẹ́ dídá",
-       "logentry-newusers-create": "Àpamọ́ oníṣe $1 jẹ́ dídá",
+       "logentry-newusers-create": "Àkọ́pamọ́ oníṣe $1 ti jẹ́ {{GENDER:$2|dídá}}",
        "logentry-newusers-create2": "Àpamọ́ oníṣe $3 jẹ́ dídá látọwọ́ $1",
        "logentry-newusers-autocreate": "Àkópamọ́ $1 jẹ́ dídá fúnrarẹ̀",
        "logentry-rights-rights": "$1 yí ìjọ́mọ ẹgbẹ́ padà fún $3 láti $4 sí $5",
index cb627d7..e90cb51 100644 (file)
        "import-interwiki-history": "複製呢一頁所有嘅歷史修訂",
        "import-interwiki-templates": "包含全部嘅模",
        "import-interwiki-submit": "倒入",
-       "import-interwiki-namespace": "目的空間名:",
-       "import-interwiki-rootpage": "目標根頁(可以填):",
        "import-upload-filename": "檔名:",
        "import-comment": "註解:",
        "importtext": "請由原 wiki 嘅[[Special:Export|匯出工具]]匯出成檔案。\n儲存喺你部電腦度,然後再上載到呢度。",
index 409edb1..456f87d 100644 (file)
@@ -84,7 +84,8 @@
                        "Davidzdh",
                        "LNDDYL",
                        "Jiang123aa",
-                       "Cdz"
+                       "Cdz",
+                       "凡人丶"
                ]
        },
        "tog-underline": "链接下划线:",
        "no-null-revision": "无法创建对\"$1\"页面新的空白版本",
        "badtitle": "错误标题",
        "badtitletext": "您请求了个无效、不存在或者跨语言或跨wiki链接标题错误的页面。它可能包含一个或多个不能用于标题的字符。",
+       "title-invalid-empty": "请求的页面标题为空,或只包含名字空间名称。",
+       "title-invalid-utf8": "请求的页面标题包含一个无效的UTF-8序列。",
+       "title-invalid-interwiki": "标题包含跨wiki链接",
+       "title-invalid-talk-namespace": "请求的页面标题引用了一个不能存在的讨论页。",
+       "title-invalid-characters": "请求的页面标题包含无效字符:“$1”。",
+       "title-invalid-relative": "标题有相对路径。相关的页面标题(./, ../)无效,因为用户浏览器经常无法到达这些页面。",
+       "title-invalid-magic-tilde": "请求的页面标题包含无效的连续波浪(<nowiki>~~~</nowiki>)。",
+       "title-invalid-too-long": "请求的页面标题太长。作为UTF-8编码,它不能超过$1个字节。",
+       "title-invalid-leading-colon": "请求的页面标题开头包含一个无效的冒号。",
        "perfcached": "以下是缓存的数据,可能不是最新的数据。缓存中最多有{{PLURAL:$1|$1条结果}}。",
        "perfcachedts": "以下是缓存的数据,最后更新于$1。缓存中最多有{{PLURAL:$4|$4条结果}}。",
        "querypage-no-updates": "该页面的更新目前停用。这里的数据不会马上刷新。",
        "cannotchangeemail": "本wiki不允许对账户的电子邮件地址进行更改。",
        "emaildisabled": "该网站无法发送电子邮件。",
        "accountcreated": "已建立账户",
-       "accountcreatedtext": "[[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|talk]])的账户已创建。",
+       "accountcreatedtext": "[[{{ns:User}}:$1|$1]]([[{{ns:User talk}}:$1|对话]])的账户已创建。",
        "createaccount-title": "在{{SITENAME}}创建新账户",
        "createaccount-text": "有人在{{SITENAME}}中利用您的邮箱创建了一个名为 \"$2\" 的新帐户($4),密码是 \"$3\" 。您应该立即登录并更改密码。\n\n如果该账户创建错误的话,您可以忽略此信息。",
        "login-throttled": "你最近尝试登录的次数过多。请等待$1后再试。",
        "revdelete-unsuppress": "在已恢复的版本中移除限制",
        "revdelete-log": "原因:",
        "revdelete-submit": "应用于选中的{{PLURAL:$1|版本}}",
-       "revdelete-success": "<strong>版本可见性更新成功。</strong>",
-       "revdelete-failure": "<strong>版本可见性无法更新:</strong>$1",
+       "revdelete-success": "版本可见性更新成功。",
+       "revdelete-failure": "版本可见性无法更新:\n$1",
        "logdelete-success": "'''事件的可见性已经成功设置。'''",
        "logdelete-failure": "'''事件的可见性无法设置:'''\n$1",
        "revdel-restore": "更改可见性",
        "import-interwiki-history": "复制此页的所有历史版本",
        "import-interwiki-templates": "包含所有模板",
        "import-interwiki-submit": "导入",
-       "import-interwiki-namespace": "目标名字空间:",
-       "import-interwiki-rootpage": "目标根页面(可选):",
+       "import-mapping-default": "导入至默认位置",
+       "import-mapping-namespace": "导入至一个名字空间:",
+       "import-mapping-subpage": "作为以下页面的子页面导入:",
        "import-upload-filename": "文件名:",
        "import-comment": "注释:",
        "importtext": "请使用[[Special:Export|导出功能]]从源 wiki 导出文件,\n保存到您的电脑并上传到这里。",
        "tags-edit-reason": "原因:",
        "tags-edit-revision-submit": "将更改应用至{{PLURAL:$1|此|$1个}}修订版本",
        "tags-edit-logentry-submit": "将更改应用至{{PLURAL:$1|此日志记录|$1个日志记录}}",
-       "tags-edit-success": "<strong>更改已成功应用。</strong>",
-       "tags-edit-failure": "<strong>更改无法被应用:</strong>\n$1",
+       "tags-edit-success": "更改已成功应用。",
+       "tags-edit-failure": "更改无法被应用:\n$1",
        "tags-edit-nooldid-title": "无效目标版本",
        "tags-edit-nooldid-text": "您尚未指定任何要执行此功能的目标版本,或者所指定的版本不存在。",
        "tags-edit-none-selected": "请选择至少一个要添加或移除的标签。",
index 99d8723..c26f132 100644 (file)
        "history-feed-description": "本 Wiki 上此頁面的修訂歷史",
        "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-showdeleted": "顯示",
        "revisiondelete": "刪除/取消刪除修訂",
        "revdelete-nooldid-title": "無效的目標修訂",
-       "revdelete-nooldid-text": "您尚未指定目標修訂執行此動作、指定的修訂不存在,或您嘗試隱藏目前的修訂。",
+       "revdelete-nooldid-text": "您沒有指定任何要執行此功能的目標修訂、或指定的修訂並不存在、或您嘗試隱藏目前的修訂。",
        "revdelete-no-file": "指定的檔案不存在。",
        "revdelete-show-file-confirm": "您是否要檢視檔案 \"<nowiki>$1</nowiki>\" 已刪除的修訂於 $2 $3?",
        "revdelete-show-file-submit": "是",
        "revdelete-unsuppress": "移除已還原修訂上的顯示限制",
        "revdelete-log": "原因:",
        "revdelete-submit": "套用至已選取的{{PLURAL:$1|一筆|多筆}}修訂",
-       "revdelete-success": "<strong>已成功更新修訂的顯示設定。</strong>",
-       "revdelete-failure": "<strong>無法更新修訂的顯示設定:</strong>\n$1",
-       "logdelete-success": "<strong>已成功更新日誌的顯示設定。</strong>",
-       "logdelete-failure": "<strong>無法更新日誌的顯示設定:</strong>\n$1",
+       "revdelete-success": "已成功更新修訂的顯示設定。",
+       "revdelete-failure": "無法更新修訂的顯示設定:\n$1",
+       "logdelete-success": "已成功更新日誌的顯示設定。",
+       "logdelete-failure": "無法更新日誌的顯示設定:\n$1",
        "revdel-restore": "更改顯示設定",
        "pagehist": "頁面歷史",
        "deletedhist": "已刪除歷史",
        "right-sendemail": "傳送電子郵件聯絡其他使用者",
        "right-passwordreset": "檢視重設密碼電子郵件",
        "right-managechangetags": "建立並自資料庫移除[[Special:Tags|標籤]]",
+       "right-applychangetags": "連同某個人的變更一起套用[[Special:Tags|標籤]]",
+       "right-changetags": "加入與移除任何於各別修訂與日誌項目的[[Special:Tags|標籤]]",
        "newuserlogpage": "建立使用者日誌",
        "newuserlogpagetext": "此為建立使用者的日誌。",
        "rightslog": "使用者權限日誌",
        "action-editmyprivateinfo": "編輯您的個人資訊",
        "action-editcontentmodel": "編輯頁面的內容模型",
        "action-managechangetags": "建立並自資料庫移除標籤",
+       "action-applychangetags": "連同您的變更一起套用標籤",
+       "action-changetags": "加入與移除任何於各別修訂與日誌項目的標籤",
        "nchanges": "$1 次變更",
        "enhancedrc-since-last-visit": "{{PLURAL:$1|自上次拜訪}}已有 $1",
        "enhancedrc-history": "歷史",
        "listfiles-delete": "刪除",
        "listfiles-summary": "此特殊頁面顯示所有已上傳的檔案。",
        "listfiles_search_for": "搜尋媒體名稱:",
+       "listfiles-userdoesnotexist": "使用者帳號 \"$1\" 尚未被註冊。",
        "imgfile": "檔案",
        "listfiles": "檔案清單",
        "listfiles_thumb": "縮圖",
        "logempty": "無符合條件的日誌。",
        "log-title-wildcard": "搜尋以此欄位文字為字首的標題",
        "showhideselectedlogentries": "顯示/隱藏已選擇的日誌項目",
+       "log-edit-tags": "編輯已選擇日誌項目的標籤",
        "allpages": "所有頁面",
        "nextpage": "下一頁 ($1)",
        "prevpage": "上一頁 ($1)",
        "emailuser": "Email 聯絡此使用者",
        "emailuser-title-target": "E-mail 聯絡此{{GENDER:$1|使用者}}",
        "emailuser-title-notarget": "E-mail 聯絡使用者",
-       "emailpage": "E-mail 使用者",
+       "emailpage": "E-mail 聯絡使用者",
        "emailpagetext": "您可以使用以下表格傳送電子郵件給這位 {{Gender:$1|使用者}}。\n您在 [[Special:Preferences|偏好設定]] 中所輸入的電子郵件位址將會作為郵件的 \"寄件人\",因此該使用者可直接回覆您。",
        "defemailsubject": "{{SITENAME}} 使用者 \"$1\" 寄來的電子郵件",
        "usermaildisabled": "使用者電子郵件已停用",
        "emailccsubject": "您寄給 $1 的訊息副本:$2",
        "emailsent": "已寄出電子郵件",
        "emailsenttext": "已寄出您的電子郵件訊息。",
-       "emailuserfooter": "這封電子郵件是由 $1 透過 {{SITENAME}} 的 \"Email 聯絡此使用者\" 功能寄給 $2。",
+       "emailuserfooter": "這封電子郵件是由 $1 透過 {{SITENAME}} 的 \"{{int:emailpage}}\" 功能寄給 $2。",
        "usermessage-summary": "留訊息至系統。",
        "usermessage-editor": "系統訊息",
        "watchlist": "監視清單",
        "import-interwiki-history": "複製此頁的所有歷史修訂",
        "import-interwiki-templates": "包含所有模板",
        "import-interwiki-submit": "匯入",
-       "import-interwiki-namespace": "目標命名空間:",
-       "import-interwiki-rootpage": "目標根頁面 (選填):",
+       "import-mapping-default": "匯入至預設位置",
+       "import-mapping-namespace": "匯入至命名空間:",
+       "import-mapping-subpage": "匯入做為以下頁面的子頁面:",
        "import-upload-filename": "檔案名稱:",
        "import-comment": "評論:",
        "importtext": "請使用 [[Special:Export|匯出工具]] 從來源 Wiki 匯出檔案,\n儲存至您的電腦後再上傳到這裡。",
        "pageinfo-protect-cascading-yes": "是",
        "pageinfo-protect-cascading-from": "連鎖保護來自",
        "pageinfo-category-info": "分類資訊",
+       "pageinfo-category-total": "成員總數",
        "pageinfo-category-pages": "頁面數量",
        "pageinfo-category-subcats": "子分類數量",
        "pageinfo-category-files": "檔案數量",
        "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",
        "tags-deactivate-reason": "原因:",
        "tags-deactivate-not-allowed": "無法停用標籤 \"$1\"。",
        "tags-deactivate-submit": "停用",
+       "tags-apply-no-permission": "您沒有權限連同您的變更一起套用標籤。",
+       "tags-apply-not-allowed-one": "不允許手動套用標籤 \"$1\"。",
+       "tags-apply-not-allowed-multi": "不允許手動套用以下{{PLURAL:$2|標籤|標籤}}:$1",
+       "tags-update-no-permission": "您沒有權限加入與移除任何於各別修訂與日誌項目的標籤",
+       "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": "已選擇 [[:$2]] 中{{PLURAL:$1|的修訂|的多筆修訂}}:",
+       "tags-edit-logentry-selected": "{{PLURAL:$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-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|此修訂|$1 筆修訂}}",
+       "tags-edit-logentry-submit": "套用變更至{{PLURAL:$1|此日誌項目|$1 筆日誌項目}}",
+       "tags-edit-success": "已成功套用變更。",
+       "tags-edit-failure": "變更被無法套用:\n$1",
+       "tags-edit-nooldid-title": "無效的目標修訂",
+       "tags-edit-nooldid-text": "您沒有指定任何要執行此功能的目標修訂或指定的修訂並不存在。",
+       "tags-edit-none-selected": "請至少選擇一個要加入或移除的標籤。",
        "comparepages": "比較頁面",
        "compare-page1": "第 1 頁",
        "compare-page2": "第 2 頁",
        "logentry-managetags-delete": "$1 {{GENDER:$2|已刪除}}標籤 \"$4\" (已自 $5 個{{PLURAL:$5|修訂或日誌|修訂或日誌}}中移除)",
        "logentry-managetags-activate": "$1 {{GENDER:$2|已啟用}}標籤 \"$4\" 供使用者與機器人使用",
        "logentry-managetags-deactivate": "$1 {{GENDER:$2|已停用}}標籤 \"$4\" 供使用者與機器人使用",
+       "log-name-tag": "標籤日誌",
+       "log-description-tag": "當使用者自各別修訂或日誌項目加入或移除[[Special:Tags|標籤]]時會顯示於此頁面。 此日誌並不會列出當時對標籤所做的編輯、刪除或類似的動作。",
+       "logentry-tag-update-add-revision": "$1 {{GENDER:$2|已加入}}{{PLURAL:$7|標籤|標籤}} $6 至頁面 $3 的修訂 $4。",
+       "logentry-tag-update-add-logentry": "$1 {{GENDER:$2|已加入}}{{PLURAL:$7|標籤|標籤}} $6 至頁面 $3 的日誌項目 $5。",
+       "logentry-tag-update-remove-revision": "$1 {{GENDER:$2|已移除}}{{PLURAL:$9|標籤|標籤}} $8 自頁面 $3 的修訂 $4。",
+       "logentry-tag-update-remove-logentry": "$1 {{GENDER:$2|已移除}}{{PLURAL:$9|標籤|標籤}} $8 自日誌項目 $3 的修訂 $5。",
+       "logentry-tag-update-revision": "$1 {{GENDER:$2|已更新}}標籤於頁面 $3 的修訂 $4 ({{PLURAL:$7|加入}} $6; {{PLURAL:$9|移除}} $8)。",
+       "logentry-tag-update-logentry": "$1 {{GENDER:$2|已更新}}標籤於頁面 $3 的日誌項目 $5 ({{PLURAL:$7|加入}} $6; {{PLURAL:$9|移除}} $8)。",
        "rightsnone": "(無)",
        "revdelete-summary": "編輯摘要",
        "feedback-adding": "正在新增意見回饋至頁面...",
        "feedback-error1": "錯誤:無法識別 API 回傳的結果",
        "feedback-error2": "錯誤:編輯失敗",
        "feedback-error3": "錯誤:API 沒有回應",
+       "feedback-error4": "錯誤:無法發佈至指定的意見回饋標題",
        "feedback-message": "訊息:",
        "feedback-subject": "主旨:",
        "feedback-submit": "送出",
        "log-name-pagelang": "更改語言日誌",
        "log-description-pagelang": "此頁為頁面語言的變更日誌。",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|已更改}}頁面 $3 的語言從 $4 到 $5。",
-       "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:* 透過 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 操作手冊:外觀自動搜尋])。您可以將下{{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": "哎呀!您於 <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:* 透過 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 操作手冊:外觀自動搜尋])。您可以將下列{{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:* 透過 git 複製 <code>mediawiki/skins/*</code> 儲存庫中其中一個外觀到您安裝的 MediaWiki <code dir=\"ltr\">skins/</code> 目錄中。\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 ('''已停用''')",
index 797bfda..9f86bd6 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Tunisian Spoken Arabic (   زَوُن)
+/** Tunisian Spoken Arabic (تونسي/Tûnsi)
  *
  * To improve a translation please visit https://translatewiki.net
  *
@@ -8,7 +8,4 @@
  *
  */
 
-$fallback = 'ar';
-
-$rtl = true;
-
+$fallback = 'aeb-arab';
\ No newline at end of file
diff --git a/languages/messages/MessagesAeb_arab.php b/languages/messages/MessagesAeb_arab.php
new file mode 100644 (file)
index 0000000..1043496
--- /dev/null
@@ -0,0 +1,13 @@
+<?php
+/** Tunisian Spoken Arabic (Arabic script) (تونسي)
+ *
+ * To improve a translation please visit https://translatewiki.net
+ *
+ * @ingroup Language
+ * @file
+ *
+ */
+
+$fallback = 'ar';
+
+$rtl = true;
\ No newline at end of file
index 74d3bb9..9961227 100644 (file)
@@ -6,6 +6,9 @@
  * @ingroup Language
  * @file
  *
+ * @author Arjanizary
+ * @author E THP
+ * @author Mjbmr
  */
 
 $fallback = 'fa';
@@ -17,7 +20,7 @@ $namespaceNames = array(
        NS_TALK             => 'دانیشیق',
        NS_USER             => 'ایستیفاده‌چی',
        NS_USER_TALK        => 'ایستیفاده‌چی_دانیشیغی',
-       NS_PROJECT_TALK     => '$1_دانیشیق',
+       NS_PROJECT_TALK     => '$1_دانیشیغی',
        NS_FILE             => 'فایل',
        NS_FILE_TALK        => 'فایل_دانیشیغی',
        NS_MEDIAWIKI        => 'مئدیا‌ویکی',
index 924f6c2..cb52c1a 100644 (file)
@@ -22,8 +22,8 @@ $namespaceNames = array(
        NS_PROJECT_TALK     => '$1_ئی_گپ',
        NS_FILE             => 'ورق',
        NS_FILE_TALK        => 'ورق_ئی_گپ',
-       NS_MEDIAWIKI        => 'Ù\88Û\8cÚ©Û\8c_رساÙ\86Ú¯',
-       NS_MEDIAWIKI_TALK   => 'Ù\88Û\8cÚ©Û\8c_رساÙ\86Ú¯_ئی_گپ',
+       NS_MEDIAWIKI        => 'Ù\85Û\8cÚ\88Û\8cاÙ\88Û\8cÚ©Û\8c',
+       NS_MEDIAWIKI_TALK   => 'Ù\85Û\8cÚ\88Û\8cاÙ\88Û\8cÚ©Û\8c_ئی_گپ',
        NS_TEMPLATE         => 'تراشوان',
        NS_TEMPLATE_TALK    => 'تراشوان_ئی_گپ',
        NS_HELP             => 'کومک',
@@ -32,6 +32,12 @@ $namespaceNames = array(
        NS_CATEGORY_TALK    => 'تهر_ئی_گپ',
 );
 
+$namespaceAliases = array(
+       'میڈیا' => NS_MEDIA,
+       'اکس' => NS_FILE,
+       'اکس_ئی_گپ' => NS_FILE_TALK,
+);
+
 $specialPageAliases = array(
        'Activeusers'               => array( 'پئالین_کارمرزوکان' ),
        'Allmessages'               => array( 'موچین_پیامان' ),
@@ -146,4 +152,4 @@ $specialPageAliases = array(
        'Withoutinterwiki'          => array( 'بئ_شه_مانیجین_ویکی_ئا' ),
 );
 
-$linkTrail = "/^([اآأبپتثجچحخدڈذرڑزژسشصضطظعغفقکگلمنوۆؤھهئیێ‌]+)(.*)$/sDu";
\ No newline at end of file
+$linkTrail = "/^([اآأبپتثجچحخدڈذرڑزژسشصضطظعغفقکگلمنوۆؤھهئیێ‌]+)(.*)$/sDu";
diff --git a/languages/messages/MessagesBh.php b/languages/messages/MessagesBh.php
deleted file mode 100644 (file)
index 4453bd1..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<?php
-/** Bihari (भोजपुरी)
- *
- * To improve a translation please visit https://translatewiki.net
- *
- * @ingroup Language
- * @file
- *
- */
-
-$fallback = 'bho';
-
index 27bbe78..a369d1d 100644 (file)
@@ -215,7 +215,6 @@ $magicWords = array(
        'displaytitle'              => array( '1', 'MOSTRATITOLO', 'DISPLAYTITLE' ),
        'language'                  => array( '0', '#LINGUA', '#LANGUAGE:' ),
        'numberofadmins'            => array( '1', 'NUMEROADMIN', 'NUMBEROFADMINS' ),
-       'special'                   => array( '0', 'speciale', 'special' ),
        'tag'                       => array( '0', 'etichetta', 'tag' ),
        'pagesincategory'           => array( '1', 'PAGINEINCAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
        'pagesize'                  => array( '1', 'DIMENSIONEPAGINA', 'PESOPAGINA', 'PAGESIZE' ),
index 987464a..71180c3 100644 (file)
@@ -195,7 +195,6 @@ $magicWords = array(
        'fullurl'                   => array( '0', 'URLEPLOTË', 'FULLURL:' ),
        'language'                  => array( '0', '#GJUHA:', '#LANGUAGE:' ),
        'numberofadmins'            => array( '1', 'NUMRIIADMINISTRUESVE', 'NUMBEROFADMINS' ),
-       'special'                   => array( '0', 'speciale', 'special' ),
        'hiddencat'                 => array( '1', '__KATEGORIEFSHEHUR__', '__HIDDENCAT__' ),
        'pagesize'                  => array( '1', 'MADHËSIAEFAQES', 'PAGESIZE' ),
 );
index fb3c764..af16169 100644 (file)
--- a/load.php5
+++ b/load.php5
@@ -21,4 +21,6 @@
  * @file
  */
 
+define( 'MW_ENTRY_PHP5', true );
+
 require './load.php';
index f97f6dc..c97c6a3 100644 (file)
@@ -603,13 +603,19 @@ abstract class Maintenance {
         * Activate the profiler (assuming $wgProfiler is set)
         */
        protected function activateProfiler() {
-               global $wgProfiler;
+               global $wgProfiler, $wgProfileLimit, $wgTrxProfilerLimits;
 
                $output = $this->getOption( 'profiler' );
-               if ( $output && is_array( $wgProfiler ) && isset( $wgProfiler['class'] ) ) {
+               if ( !$output ) {
+                       return;
+               }
+
+               if ( is_array( $wgProfiler ) && isset( $wgProfiler['class'] ) ) {
                        $class = $wgProfiler['class'];
                        $profiler = new $class(
-                               array( 'sampling' => 1, 'output' => $output ) + $wgProfiler
+                               array( 'sampling' => 1, 'output' => array( $output ) )
+                                       + $wgProfiler
+                                       + array( 'threshold' => $wgProfileLimit )
                        );
                        $profiler->setTemplated( true );
                        Profiler::replaceStubInstance( $profiler );
@@ -617,8 +623,7 @@ abstract class Maintenance {
 
                $trxProfiler = Profiler::instance()->getTransactionProfiler();
                $trxProfiler->setLogger( LoggerFactory::getInstance( 'DBPerformance' ) );
-               # Catch huge single updates that lead to slave lag
-               $trxProfiler->setExpectation( 'maxAffected', 1000, __METHOD__ );
+               $trxProfiler->setExpectations( $wgTrxProfilerLimits['Maintenance'], __METHOD__ );
        }
 
        /**
index fb25b9d..1446871 100644 (file)
@@ -66,7 +66,7 @@ class BenchmarkHooks extends Benchmarker {
        private function benchHooks( $trials = 10 ) {
                $start = microtime( true );
                for ( $i = 0; $i < $trials; $i++ ) {
-                       wfRunHooks( 'Test' );
+                       Hooks::run( 'Test' );
                }
                $delta = microtime( true ) - $start;
                $pertrial = $delta / $trials;
index 777c833..a64bc49 100644 (file)
@@ -56,7 +56,7 @@ class CheckUsernames extends Maintenance {
 
                        foreach ( $res as $row ) {
                                if ( !User::isValidUserName( $row->user_name ) ) {
-                                       $this->error( sprintf( "%s: %6d: '%s'\n", wfWikiID(), $row->user_id, $row->user_name ) );
+                                       $this->output( sprintf( "Found: %6d: '%s'\n", $row->user_id, $row->user_name ) );
                                        wfDebugLog( 'checkUsernames', $row->user_name );
                                }
                        }
index e1d0ed6..a4e66ca 100644 (file)
@@ -36,13 +36,6 @@ class CleanupRemovedModules extends Maintenance {
                parent::__construct();
                $this->mDescription = 'Remove cache entries for removed ResourceLoader modules from the database';
                $this->addOption( 'batchsize', 'Delete rows in batches of this size. Default: 500', false, true );
-               $this->addOption(
-                       'max-slave-lag',
-                       'If the slave lag exceeds this many seconds, wait until it drops below this value. '
-                               . 'Default: 5',
-                       false,
-                       true
-               );
        }
 
        public function execute() {
@@ -51,7 +44,6 @@ class CleanupRemovedModules extends Maintenance {
                $moduleNames = $rl->getModuleNames();
                $moduleList = implode( ', ', array_map( array( $dbw, 'addQuotes' ), $moduleNames ) );
                $limit = max( 1, intval( $this->getOption( 'batchsize', 500 ) ) );
-               $maxlag = intval( $this->getOption( 'max-slave-lag', 5 ) );
 
                $this->output( "Cleaning up module_deps table...\n" );
                $i = 1;
@@ -63,7 +55,7 @@ class CleanupRemovedModules extends Maintenance {
                        $numRows = $dbw->affectedRows();
                        $this->output( "Batch $i: $numRows rows\n" );
                        $i++;
-                       wfWaitForSlaves( $maxlag );
+                       wfWaitForSlaves();
                } while ( $numRows > 0 );
                $this->output( "done\n" );
 
@@ -77,7 +69,7 @@ class CleanupRemovedModules extends Maintenance {
                        $numRows = $dbw->affectedRows();
                        $this->output( "Batch $i: $numRows rows\n" );
                        $i++;
-                       wfWaitForSlaves( $maxlag );
+                       wfWaitForSlaves();
                } while ( $numRows > 0 );
                $this->output( "done\n" );
 
@@ -90,7 +82,7 @@ class CleanupRemovedModules extends Maintenance {
                        $numRows = $dbw->affectedRows();
                        $this->output( "Batch $i: $numRows rows\n" );
                        $i++;
-                       wfWaitForSlaves( $maxlag );
+                       wfWaitForSlaves();
                } while ( $numRows > 0 );
                $this->output( "done\n" );
        }
index cbd1be6..f6259e9 100644 (file)
@@ -37,7 +37,6 @@ class TableCleanup extends Maintenance {
        );
 
        protected $dryrun = false;
-       protected $maxLag = 10; # if slaves are lagged more than 10 secs, wait
        public $batchSize = 100;
        public $reportInterval = 100;
 
index 2fb3697..06370e9 100644 (file)
@@ -6,13 +6,14 @@ class ConvertExtensionToRegistration extends Maintenance {
 
        protected $custom = array(
                'MessagesDirs' => 'handleMessagesDirs',
-               'ExtensionMessagesFiles' => 'removeAbsolutePath',
+               'ExtensionMessagesFiles' => 'handleExtensionMessagesFiles',
                'AutoloadClasses' => 'removeAbsolutePath',
                'ExtensionCredits' => 'handleCredits',
                'ResourceModules' => 'handleResourceModules',
                'ResourceModuleSkinStyles' => 'handleResourceModules',
                'Hooks' => 'handleHooks',
                'ExtensionFunctions' => 'handleExtensionFunctions',
+               'ParserTestFiles' => 'removeAbsolutePath',
        );
 
        /**
@@ -79,7 +80,7 @@ class ConvertExtensionToRegistration extends Maintenance {
                        }
                        $realName = substr( $name, 2 ); // Strip 'wg'
                        if ( isset( $this->custom[$realName] ) ) {
-                               call_user_func_array( array( $this, $this->custom[$realName] ), array( $realName, $value ) );
+                               call_user_func_array( array( $this, $this->custom[$realName] ), array( $realName, $value, $vars ) );
                        } elseif ( in_array( $realName, $globalSettings ) ) {
                                $this->json[$realName] = $value;
                        } elseif ( strpos( $name, 'wg' ) === 0 ) {
@@ -123,6 +124,21 @@ class ConvertExtensionToRegistration extends Maintenance {
                }
        }
 
+       protected function handleExtensionMessagesFiles( $realName, $value, $vars ) {
+               foreach ( $value as $key => $file ) {
+                       $strippedFile = $this->stripPath( $file, $this->dir );
+                       if ( isset( $vars['wgMessagesDirs'][$key] ) ) {
+                               $this->output(
+                                       "Note: Ignoring PHP shim $strippedFile. " .
+                                       "If your extension no longer supports versions of MediaWiki " .
+                                       "older than 1.23.0, you can safely delete it.\n"
+                               );
+                       } else {
+                               $this->json[$realName][$key] = $strippedFile;
+                       }
+               }
+       }
+
        private function stripPath( $val, $dir ) {
                if ( $val === $dir ) {
                        $val = '';
index 94ca604..8fdcef3 100644 (file)
@@ -73,7 +73,6 @@ class EraseArchivedFile extends Maintenance {
 
                $this->output( "Purging all thumbnails for file '$filename'..." );
                $file->purgeCache();
-               $file->purgeHistory();
                $this->output( "done.\n" );
 
                if ( $afile instanceof ArchivedFile ) {
index 22d9940..b9c07fb 100644 (file)
@@ -39,11 +39,8 @@ class GenerateJsonI18n extends Maintenance {
 
                $this->addArg( 'phpfile', 'PHP file defining a $messages array', false );
                $this->addArg( 'jsondir', 'Directory to write JSON files to', false );
-               $this->addOption( 'langcode', 'Language code; only needed for converting core i18n files',
-                       false, true );
                $this->addOption( 'extension', 'Perform default conversion on an extension',
                        false, true );
-               $this->addOption( 'shim-only', 'Only create or update the backward-compatibility shim' );
                $this->addOption( 'supplementary', 'Find supplementary i18n files in subdirs and convert those',
                        false, false );
        }
@@ -58,13 +55,13 @@ class GenerateJsonI18n extends Maintenance {
 
                if ( $extension ) {
                        if ( $phpfile ) {
-                               $this->error( "The phpfile is already specified, conflicts with --extension.\n", 1 );
+                               $this->error( "The phpfile is already specified, conflicts with --extension.", 1 );
                        }
                        $phpfile = "$IP/extensions/$extension/$extension.i18n.php";
                }
 
                if ( !$phpfile ) {
-                       $this->error( "I'm here for an argument!\n" );
+                       $this->error( "I'm here for an argument!" );
                        $this->maybeHelp( true );
                        // dies.
                }
@@ -104,47 +101,32 @@ class GenerateJsonI18n extends Maintenance {
                        $this->output( "Creating directory $jsondir.\n" );
                        $success = mkdir( $jsondir );
                        if ( !$success ) {
-                               $this->error( "Could not create directory $jsondir\n", 1 );
+                               $this->error( "Could not create directory $jsondir", 1 );
                        }
                }
 
-               if ( $this->hasOption( 'shim-only' ) ) {
-                       $this->shimOnly( $phpfile, $jsondir );
-
-                       return;
-               }
-
-               if ( $jsondir === null ) {
-                       $this->error( 'Argument [jsondir] is required unless --shim-only is specified.' );
-                       $this->maybeHelp( true );
-               }
-
                if ( !is_readable( $phpfile ) ) {
-                       $this->error( "Error reading $phpfile\n", 1 );
+                       $this->error( "Error reading $phpfile", 1 );
                }
                include $phpfile;
                $phpfileContents = file_get_contents( $phpfile );
 
                if ( !isset( $messages ) ) {
-                       $this->error( "PHP file $phpfile does not define \$messages array\n", 1 );
+                       $this->error( "PHP file $phpfile does not define \$messages array", 1 );
+               }
+
+               if ( !$messages ) {
+                       $this->error( "PHP file $phpfile contains an empty \$messages array. " .
+                               "Maybe it was already converted?", 1 );
                }
 
-               $extensionStyle = true;
                if ( !isset( $messages['en'] ) || !is_array( $messages['en'] ) ) {
-                       if ( !$this->hasOption( 'langcode' ) ) {
-                               $this->error( "PHP file $phpfile does not set language codes, --langcode " .
-                                       "is required.\n", 1 );
-                       }
-                       $extensionStyle = false;
-                       $langcode = $this->getOption( 'langcode' );
-                       $messages = array( $langcode => $messages );
-               } elseif ( $this->hasOption( 'langcode' ) ) {
-                       $this->output( "Warning: --langcode option set but will not be used.\n" );
+                       $this->error( "PHP file $phpfile does not set language codes", 1 );
                }
 
                foreach ( $messages as $langcode => $langmsgs ) {
                        $authors = $this->getAuthorsFromComment( $this->findCommentBefore(
-                               $extensionStyle ? "\$messages['$langcode'] =" : '$messages =',
+                               "\$messages['$langcode'] =",
                                $phpfileContents
                        ) );
                        // Make sure the @metadata key is the first key in the output
@@ -164,89 +146,15 @@ class GenerateJsonI18n extends Maintenance {
                        $this->output( "$jsonfile\n" );
                }
 
-               if ( !$this->hasOption( 'langcode' ) ) {
-                       $shim = $this->doShim( $jsondir );
-                       file_put_contents( $phpfile, $shim );
-               }
-
-               $this->output( "All done.\n" );
-               $this->output( "Also add \$wgMessagesDirs['YourExtension'] = __DIR__ . '/i18n';\n" );
-       }
-
-       protected function shimOnly( $phpfile, $jsondir ) {
-               if ( file_exists( $phpfile ) ) {
-                       if ( !is_readable( $phpfile ) ) {
-                               $this->error( "Error reading $phpfile\n", 1 );
-                       }
-
-                       $phpfileContents = file_get_contents( $phpfile );
-                       $m = array();
-                       if ( !preg_match( '!"/([^"$]+)/\$csCode.json";!', $phpfileContents, $m ) ) {
-                               $this->error( "Cannot recognize $phpfile as a shim.\n", 1 );
-                       }
-
-                       if ( $jsondir === null ) {
-                               $jsondir = $m[1];
-                       }
-
-                       $this->output( "Updating existing shim $phpfile\n" );
-               } elseif ( $jsondir === null ) {
-                       $this->error( "$phpfile does not exist.\n" .
-                               "Argument [jsondir] is required in order to create a new shim.\n", 1 );
-               } else {
-                       $this->output( "Creating new shim $phpfile\n" );
-               }
-
-               $shim = $this->doShim( $jsondir );
-               file_put_contents( $phpfile, $shim );
-               $this->output( "All done.\n" );
-       }
-
-       protected function doShim( $jsondir ) {
-               $shim = <<<'PHP'
-<?php
-/**
- * This is a backwards-compatibility shim, generated by:
- * https://git.wikimedia.org/blob/mediawiki%2Fcore.git/HEAD/maintenance%2FgenerateJsonI18n.php
- *
- * Beginning with MediaWiki 1.23, translation strings are stored in json files,
- * and the EXTENSION.i18n.php file only exists to provide compatibility with
- * older releases of MediaWiki. For more information about this migration, see:
- * https://www.mediawiki.org/wiki/Requests_for_comment/Localisation_format
- *
- * This shim maintains compatibility back to MediaWiki 1.17.
- */
-$messages = array();
-if ( !function_exists( '{{FUNC}}' ) ) {
-       function {{FUNC}}( $cache, $code, &$cachedData ) {
-               $codeSequence = array_merge( array( $code ), $cachedData['fallbackSequence'] );
-               foreach ( $codeSequence as $csCode ) {
-                       $fileName = dirname( __FILE__ ) . "/{{OUT}}/$csCode.json";
-                       if ( is_readable( $fileName ) ) {
-                               $data = FormatJson::decode( file_get_contents( $fileName ), true );
-                               foreach ( array_keys( $data ) as $key ) {
-                                       if ( $key === '' || $key[0] === '@' ) {
-                                               unset( $data[$key] );
-                                       }
-                               }
-                               $cachedData['messages'] = array_merge( $data, $cachedData['messages'] );
-                       }
-
-                       $cachedData['deps'][] = new FileDependency( $fileName );
-               }
-               return true;
-       }
-
-       $GLOBALS['wgHooks']['LocalisationCacheRecache'][] = '{{FUNC}}';
-}
-
-PHP;
-
-               $jsondir = str_replace( '\\', '/', $jsondir );
-               $shim = str_replace( '{{OUT}}', $jsondir, $shim );
-               $shim = str_replace( '{{FUNC}}', 'wfJsonI18nShim' . wfRandomString( 16 ), $shim );
-
-               return $shim;
+               $this->output(
+                       "All done. To complete the conversion, please do the following:\n" .
+                       "* Add \$wgMessagesDirs['YourExtension'] = __DIR__ . '/i18n';\n" .
+                       "* Remove \$wgExtensionMessagesFiles['YourExtension']\n" .
+                       "* Delete the old PHP message file\n" .
+                       "This script no longer generates backward compatibility shims! If you need\n" .
+                       "compatibility with MediaWiki 1.22 and older, use the MediaWiki 1.23 version\n" .
+                       "of this script instead, or create a shim manually.\n"
+               );
        }
 
        /**
index 990f258..0c3ea67 100644 (file)
@@ -339,7 +339,7 @@ ENDS;
 
                $blacklist = $checkBlacklist;
 
-               wfRunHooks( 'LocalisationChecksBlacklist', array( &$blacklist ) );
+               Hooks::run( 'LocalisationChecksBlacklist', array( &$blacklist ) );
 
                return $blacklist;
        }
index fb496cb..9affb9e 100644 (file)
@@ -63,7 +63,7 @@ class Languages {
         * files in the languages directory.
         */
        function __construct() {
-               wfRunHooks( 'LocalisationIgnoredOptionalMessages',
+               Hooks::run( 'LocalisationIgnoredOptionalMessages',
                        array( &$this->mIgnoredMessages, &$this->mOptionalMessages ) );
 
                $this->mLanguages = array_keys( Language::fetchLanguageNames( null, 'mwfile' ) );
index 71641ef..4ab57d4 100755 (executable)
@@ -203,13 +203,16 @@ def customRules( path ):
     fp = open( path, 'r', encoding = 'U8' )
     ret = dict()
     for line in fp:
-        elems = line.split( '#' )[0].split()
+        line = line.rstrip( '\r\n' )
+        if '#' in line:
+            line = line.split( '#' )[0].rstrip()
+        elems = line.split( '\t' )
         if len( elems ) > 1:
             ret[elems[0]] = elems[1]
     return ret
 
 def dictToSortedList( src_table, pos ):
-    return sorted( src_table.items(), key = lambda m: m[pos] )
+    return sorted( src_table.items(), key = lambda m: ( m[pos], m[1 - pos] ) )
 
 def translate( text, conv_table ):
     i = 0
@@ -229,7 +232,7 @@ def manualWordsTable( path, conv_table, reconv_table ):
     reconv_table = {}
     wordlist = [line.split( '#' )[0].strip() for line in fp]
     wordlist = list( set( wordlist ) )
-    wordlist.sort( key = len, reverse = True )
+    wordlist.sort( key = lambda w: ( len(w), w ), reverse = True )
     while wordlist:
         word = wordlist.pop()
         new_word = translate( word, conv_table )
@@ -241,7 +244,7 @@ def manualWordsTable( path, conv_table, reconv_table ):
 
 def defaultWordsTable( src_wordlist, src_tomany, char_conv_table, char_reconv_table ):
     wordlist = list( src_wordlist )
-    wordlist.sort( key = len, reverse = True )
+    wordlist.sort( key = lambda w: ( len(w), w ), reverse = True )
     word_conv_table = {}
     word_reconv_table = {}
     conv_table = char_conv_table.copy()
@@ -276,7 +279,7 @@ def PHPArray( table ):
 def main():
     #Get Unihan.zip:
     url = 'http://www.unicode.org/Public/%s/ucd/Unihan.zip' % UNIHAN_VER
-    han_dest = 'Unihan.zip'
+    han_dest = 'Unihan-%s.zip' % UNIHAN_VER
     download( url, han_dest )
     
     # Get scim-tables-$(SCIM_TABLES_VER).tar.gz:
index da75c44..b686f3d 100644 (file)
@@ -59,7 +59,7 @@ U+05446呆|U+05446呆|U+07343獃|
 U+054B8咸|U+054B8咸|U+09E79鹹|
 U+054C4哄|U+054C4哄|U+09B28鬨|
 U+0556E啮|U+09F67齧|U+056D3囓|U+05699嚙|
-U+05582喂|U+05582喂|U+09935餵|
+U+05582喂|U+09935餵|U+05582喂|
 U+056DE回|U+056DE回|U+08FF4迴|
 U+056E2团|U+05718團|U+07CF0糰|
 U+056F0困|U+056F0困|U+0774F睏|
index 3266168..58686d8 100644 (file)
@@ -7,4 +7,6 @@
 桿
 錶
 蘋
-詑
\ No newline at end of file
+詑
+堖
+嶴
\ No newline at end of file
index 3b14982..431a9fb 100644 (file)
 字乾生
 乾神
 乾西
+乾东
 象乾
 陈遇乾
 曾运乾
 孙乾
 乾潭
 乾贵士
+承乾
+乾生元
 於乎
 於戏
 魏徵
 於氏
 於夫罗
 於梨华
-卷舌
 樊於期
 於菟
 於潜县
 於哲
 於除鞬
 於志贺
-覆
+覆
 五箇山
 麽麽
 幺厮
 石碁
 碁圣
 暗闇
+闇公
+山崎闇斋
 繙㠾
 惏慄
 惏悷
 目劄
-橡椀
 谢肇淛
 朱淛
 諲譔
 庆馀
 馀庆
 子馀
-行馀
+行馀
 王馀鱼
-馀年无多
\ No newline at end of file
+傒倖
+倖田
+倖一郎
+兒宽
+穀旦
+不穀
+穀水
+岳讬
+硕讬
+讬庸
+讬恩多
+博和讬
+讬麻
+饱讬
+蔡絛
\ No newline at end of file
index b4dd3e0..0516daa 100644 (file)
@@ -26,5 +26,6 @@
 硷淡
 悽恻
 鲇鱼
-和尚撞一天钟
-余
\ No newline at end of file
+钟
+余
+老么
\ No newline at end of file
index 09e1415..7c26621 100644 (file)
@@ -18,7 +18,7 @@ U+08600蘀|U+0841A萚|
 U+08AE1諡|U+08C25谥|
 U+09746靆|U+053C7叇|
 U+09749靉|U+053C6叆|
-U+09A44驄|U+29A02𩨂|
+U+09A44驄|U+09AA2骢|
 U+09C1B鰛|U+09CC1鳁|
 U+09EB3麳|U+2A38C𪎌|
 U+295E1𩗡|U+29667𩙧|
index a678ac9..3b5f3dd 100644 (file)
@@ -58,6 +58,7 @@
 學姊 学姐
 乾姊 干姐
 澈底 彻底
+卯足 铆足
 逕庭 径庭
 逕到 径到
 逕取 径取
 帳外 账外
 帳務 账务
 螢光棒      荧光棒
-辭彙 词汇
 著業 着业
 著絲 着丝
 著麼 着么
 繫著 系着
 颳著 刮着
 鬥著 斗着
+縱著 纵着
+伏著 伏着
+視著 视着
+視著名      视著名
+蓋著 盖着
+蓋著名      盖著名
+蓋著稱      盖著称
+蓋著作      盖著作
+覆蓋著      覆盖着 #勿删此条
 象徵著      象征着
 象徵著名   象征著名
 三十六著   三十六着
 晶片 芯片
 晶元 芯片
 片語 词组
+隻字片語   只字片语
+隻言片語   只言片语
 軟碟機      软驱
 快閃記憶體        闪存
 滑鼠 鼠标
 行動電話   移动电话
 流動電話   移动电话
 數據機      调制解调器
-烏茲別克   乌兹别克斯坦
 葉門 也门
 貝里斯      伯利兹
 維德角      佛得角
 厄瓜多      厄瓜多尔
 厄利垂亞   厄立特里亚
 吉布地      吉布提
-哈薩克      哈萨克斯坦
 哥斯大黎加        哥斯达黎加
 吐瓦魯      图瓦卢
-土庫曼      土库曼斯坦
 聖露西亞   圣卢西亚
 聖吉斯納域斯     圣基茨和尼维斯
 聖克里斯多福及尼維斯 圣基茨和尼维斯
 衣索匹亞   埃塞俄比亚
 衣索比亞   埃塞俄比亚
 吉里巴斯   基里巴斯
-塔吉克      塔吉克斯坦
-塔吉克斯坦        塔吉克斯坦
 塞拉利昂   塞拉利昂
 塞普勒斯   塞浦路斯
 塞席爾      塞舌尔
 象牙海岸   科特迪瓦
 突尼西亞   突尼斯
 寮國 老挝
+貢寮國      贡寮国
 蘇利南      苏里南
 莫三比克   莫桑比克
 賴索托      莱索托
 螢屏 荧屏
 解像度      分辨率
 IP位址       IP地址
-IP 位址      IP 地址
 程式設計師        程序员
 公尺 米
 公升 升
@@ -2608,7 +2614,6 @@ A型肝炎        甲型肝炎
 金氏世界紀錄     吉尼斯世界纪录
 祖雲達斯   尤文图斯
 若且唯若   当且仅当
-山葉 雅马哈
 複製人      克隆人
 白朗寧      勃朗宁
 形上學      形而上学
@@ -2659,7 +2664,7 @@ A型肝炎        甲型肝炎
 共和联邦   英联邦
 阿布達比   阿布扎比
 蓋曼群島   开曼群岛
-柴契爾      撒切尔       
+柴契爾      撒切尔
 戴卓爾      撒切尔
 凱薩琳      凯瑟琳
 嘉芙蓮      凯瑟琳
@@ -2706,4 +2711,11 @@ A型肝炎       甲型肝炎
 翁山蘇姬   昂山素季
 昂山素姬   昂山素季
 西洋棋      囯际象棋
-私隱 隐私
\ No newline at end of file
+私隱 隐私
+格林美獎   格莱美奖
+葛萊美獎   格莱美奖
+史丹福      斯坦福
+賈伯斯      乔布斯
+波里活      宝莱坞
+庫德族      库尔德族
+庫德人      库尔德人
index c31d232..f765873 100644 (file)
@@ -19,7 +19,9 @@
 写字台      寫字枱
 工作台      工作枱
 弹子台      彈子枱
+上台面      上枱面
 台面上      枱面上
+台面化      枱面化
 柜台 櫃枱
 球台 球枱
 赌台 賭枱
@@ -35,7 +37,7 @@
 发布 發佈
 發布 發佈
 秀发布      秀發佈
-并发布      並發佈       
+并发布      並發佈
 分布 分佈
 宣布 宣佈
 公布 公佈
 袖里 袖裏
 被里 被裏
 里勾外连   裏勾外連
-里手 裏手
+行家里手   行家裏手
 里海 裏海
 里屋 裏屋
 里层 裏層
 话里有话   話裏有話
 车库里      車庫裏
 车站里      車站裏
+网站里      網站裏
 车里 車裏
 车里雅宾斯克     車里雅賓斯克
 这里 這裏
 山里有      山裏有
 棉里 棉裏
 语里 語裏
+言里 言裏
+境里 境裏
 方法里      方法裏
 语法里      語法裏
 看法里      看法裏
 宪法里      憲法裏
 用法里      用法裏
 法里,      法裏,
+框里 框裏
+碗里 碗裏
+电梯里      電梯裏
 苑裡 苑裡
 霄裡 霄裡
 岸裡 岸裡
 放著名      放著名
 放著稱      放著稱
 放著称      放著稱
+縱著 縱着
+伏著 伏着
+視著 視着
+視著名      視著名
+蓋著 蓋着
+蓋著名      蓋著名
+蓋著稱      蓋著稱
+蓋著作      蓋著作
+覆蓋著      覆蓋着
 三十六著   三十六着
 走為上著   走為上着
 鬧著 鬧着
 萬那杜      瓦努阿圖
 葛摩 科摩羅
 寮國 老撾
+貢寮國      貢寮國
 肯尼亚      肯雅
 莫三比克   莫桑比克
 賴索托      萊索托
 莱特湾      雷伊泰灣
 萊特灣      雷伊泰灣
 蘭卡威      浮羅交怡
-吉尔吉斯斯坦     吉爾吉斯
 撒马尔罕   撒馬爾罕
 伊斯蘭瑪巴德     伊斯蘭堡
 喀拉蚩      卡拉奇
@@ -2930,7 +2947,6 @@ C型肝炎        丙型肝炎
 晶体管      電晶體
 源代码      原始碼
 IP地址       IP位址
-IP 地址      IP 位址
 屏幕 螢幕
 荧屏 螢屏
 版权信息   版權資訊
@@ -2951,7 +2967,6 @@ IP 地址 IP 位址
 泰坦尼克号        鐵達尼號
 自行火炮   自走炮
 冰激凌      雪糕
-奥斯曼      鄂圖曼
 里氏0        黎克特制0
 里氏1        黎克特制1
 里氏2        黎克特制2
@@ -3041,4 +3056,12 @@ IP 地址        IP 位址
 西洋棋      國際象棋
 隐私 私隱
 隱私 私隱
-硅藻 硅藻
\ No newline at end of file
+硅藻 硅藻
+格莱美奖   格林美獎
+葛萊美獎   格林美獎
+斯坦福      史丹福
+賈伯斯      喬布斯
+宝莱坞      波里活
+寶萊塢      波里活
+庫德族      库爾德族
+庫德人      库爾德人
index b857e5f..1956391 100644 (file)
@@ -57,9 +57,9 @@
 男性为乾   男性为乾
 男为乾      男为乾
 阳为乾      阳为乾
\94·æ\80§ç\88²乾   男性为乾
\94·ç\88²乾      男为乾
\99½ç\88²乾      阳为乾
\94·æ\80§ç\82º乾   男性为乾
\94·ç\82º乾      男为乾
\99½ç\82º乾      阳为乾
 乾一组      乾一组
 乾一坛      乾一坛
 陈乾生      陈乾生
 孙乾 孙乾
 陈遇乾      陈遇乾
 曾运乾      曾运乾
-象乾 象乾
 乾贵士      乾贵士
+乾东 乾东
 柳诒徵      柳诒徵
 於夫罗      於夫罗
 於梨华      於梨华
-於潜县      於潜县
+於潜 於潜
 於志贺      於志贺
 憑藉 凭借
 藉端 借端
 么篇 幺篇
 么謙 幺谦
 六么 六幺
+老么 老幺
+么正 幺正
+么女 幺女
+么九 幺九
+么子 幺子
 这么 这么
+那么 那么
+什么 什么
+怎么 怎么
+多么 多么
 乾乾淨淨   干干净净
 乾乾脆脆   干干脆脆
 肉乾乾      肉干干
 獨鍾 独钟
 鍾靈 钟灵
 龍鍾 龙钟
-鍾山 钟山
-一鍾 一钟
-千鍾 千钟
 薰心 熏心
 薰習 熏习
 薰陶 熏陶
 麴黴 曲霉
 造麴 造曲
 大麴 大曲
-黃麴毒素   黄曲毒素
\ No newline at end of file
+黃麴毒素   黄曲毒素
+硃砂 朱砂
+硃紅 朱红
+硃色 朱色
+銀硃 银朱
+遶境 绕境
+侷促 局促
+侷限 局限
+馬鞌 马鞍
+觔斗 斤斗
\ No newline at end of file
index 14f7eae..b0be071 100644 (file)
 钚    鈽
 硅    矽
 煙草 菸草
+烟草 菸草
 煙蒂 菸蒂
+烟蒂 菸蒂
 煙斗 菸斗
+烟斗 菸斗
 煙鬼 菸鬼
+烟鬼 菸鬼
 煙灰 菸灰
+烟灰 菸灰
 煙具 菸具
+烟具 菸具
 煙民 菸民
+烟民 菸民
 煙農 菸農
+烟农 菸農
 煙絲 菸絲
+烟丝 菸絲
 煙頭 菸頭
+烟头 菸頭
 煙葉 菸葉
+烟叶 菸葉
 煙癮 菸癮
+烟瘾 菸癮
 煙嘴 菸嘴
+烟嘴 菸嘴
 煙酒 菸酒
+烟酒 菸酒
 煙袋 菸袋
+烟袋 菸袋
 煙品 菸品
+烟品 菸品
 煙鹼 菸鹼
+烟碱 菸鹼
 煙捲 菸捲
+烟卷 菸捲
 香煙 香菸
+香烟 香菸
 捲煙 捲菸
+卷烟 捲菸
 旱煙 旱菸
+旱烟 旱菸
 烤煙 烤菸
+烤烟 烤菸
 禁煙 禁菸
+禁烟 禁菸
 戒煙 戒菸
+戒烟 戒菸
 拒煙 拒菸
+拒烟 拒菸
 紙煙 紙菸
+纸烟 紙菸
 抽煙 抽菸
+抽烟 抽菸
 吸煙 吸菸
+吸烟 吸菸
 反煙 反菸
+反烟 反菸
 私煙 私菸
+私烟 私菸
 點煙 點菸
+点烟 點菸
 洋煙 洋菸
+洋烟 洋菸
 二手煙      二手菸
+二手烟      二手菸
 電子煙      電子菸
+电子烟      電子菸
 呂宋煙      呂宋菸
+吕宋烟      呂宋菸
 雪茄煙      雪茄菸
+雪茄烟      雪茄菸
 無煙日      無菸日
+无烟日      無菸日
 無煙環境   無菸環境
+无烟环境   無菸環境
 榴莲 榴槤
 榴蓮 榴槤
+铆足 卯足
 霉素 黴素
 想象 想像
 迭代 疊代
 斗着 鬥著
 徵狀 症狀
 系数 係數
+汇编 彙編
+划着船      划著船
+划着竹筏   划著竹筏
+划着独木舟        划著獨木舟
 缺省 預設
 以太网      乙太網
 光盘 光碟
 调制解调器        數據機
 調制解調器        數據機
 短信 簡訊
-乌兹别克斯坦     烏茲別克
 乍得 查德
 也门 葉門
 也門 葉門
 厄立特里亞        厄利垂亞
 吉布提      吉布地
 吉布堤      吉布地
-哈萨克斯坦        哈薩克
 哥斯达黎加        哥斯大黎加
 哥斯達黎加        哥斯大黎加
 图瓦卢      吐瓦魯
 圖瓦盧      吐瓦魯
-土库曼斯坦        土庫曼
 圣卢西亚   聖露西亞
 聖盧西亞   聖露西亞
 圣基茨和尼维斯  聖克里斯多福及尼維斯
 埃塞俄比亚        衣索比亞
 埃塞俄比亞        衣索比亞
 基里巴斯   吉里巴斯
-塔吉克斯坦        塔吉克
 塞拉利昂   獅子山
 塞浦路斯   塞普勒斯
 塞舌尔      塞席爾
 莱特湾      雷伊泰灣
 萊特灣      雷伊泰灣
 耶加達      雅加達
-吉尔吉斯斯坦     吉爾吉斯
 伊斯兰堡   伊斯蘭瑪巴德
 伊斯蘭堡   伊斯蘭瑪巴德
 卡拉奇      喀拉蚩
 晶體管      電晶體
 晶体管      電晶體
 IP地址       IP位址
-IP 地址      IP 位址
 解像度      解析度
 屏幕 螢幕
 荧屏 螢屏
@@ -614,7 +651,6 @@ IP 地址   IP 位址
 沙律 沙拉
 忌廉 奶油
 味美思      苦艾酒
-奥斯曼      鄂圖曼
 埃博拉      伊波拉
 克隆人      複製人
 荧光 螢光
@@ -672,7 +708,7 @@ IP 地址   IP 位址
 自由泳      自由式
 机床 工具機
 機床 工具機
-空气质量   空氣品質    
+空气质量   空氣品質
 空氣質素   空氣品質
 俯卧撑      伏地挺身
 掌上壓      伏地挺身
@@ -701,4 +737,10 @@ IP 地址  IP 位址
 囯际象棋   西洋棋
 國際象棋   西洋棋
 私隱 隱私
-硅藻 硅藻
\ No newline at end of file
+硅藻 硅藻
+格林美獎   葛萊美獎
+格莱美奖   葛萊美獎
+乔布斯      賈伯斯
+波里活      寶萊塢
+库尔德族   庫德族
+库尔德人   庫德人
index 7fc60c7..a82dd1e 100644 (file)
@@ -2,14 +2,24 @@
 “    「
 ‘    『
 ’    』
-’s   ’s 
+’s   ’s
 手塚治虫   手塚治虫
 無言不仇   無言不讎
 視如寇仇   視如寇讎
 往日無仇   往日無讎
 近日無仇   近日無讎
 李連杰      李連杰
-周杰倫      周杰倫
+杰倫 杰倫
+杰威爾      杰威爾
+黃詩杰      黃詩杰
+陳士杰      陳士杰
+林杰樑      林杰樑
+許聖杰      許聖杰
+張杰 張杰
+孫杰 孫杰
+陳杰 陳杰
+黃杰 黃杰
+謝杰 謝杰
 寶曆 寶曆
 涂謹申      涂謹申
 涂鴻欽      涂鴻欽
 于明濤      于明濤
 于根偉      于根偉
 于樹潔      于樹潔
-于正昇      于正昇
 于漢超      于漢超
 于洪區      于洪區
 于湘蘭      于湘蘭
 余三勝      余三勝
 簡筑翎      簡筑翎
 楊雅筑      楊雅筑
-杰威爾音樂        杰威爾音樂
 尸羅精舍   尸羅精舍
 騰格里      騰格里
 村里長      村里長
 進制 進制
 模范三軍   模范三軍
-黃詩杰      黃詩杰
 陳冲 陳冲
 劉佳怜      劉佳怜
 范賢惠      范賢惠
 苹果 蘋果
 苹果干      蘋果乾
 后庄 后庄
+後庄 後庄
 龜山庄      龜山庄
 寶山庄      寶山庄
 員山庄      員山庄
 鮮于樞      鮮于樞
 鳳凰于飛   鳳凰于飛
 賦范 賦范
-陳士杰      陳士杰
-林杰樑      林杰樑
 茅于軾      茅于軾
 陳有后      陳有后
 天神之后   天神之后
 划動 划動
 划得來      划得來
 划著 划著
+划著 劃著名
 划進 划進
 划過 划過
 划龍舟      划龍舟
 么弟 么弟
 六么 六么
 么雞 么雞
+么正 么正
+么女 么女
+么九 么九
+么子 么子
+么半 么半
 義联 義联
 杠轂 杠轂
 局促 侷促
 万余 萬餘
 亿余 億餘
 兆余 兆餘
+仅余 僅餘
 0余   0餘
 1余   1餘
 2余   2餘
 7余   7餘
 8余   8餘
 9余   9餘
+带余 帶餘
+余干 餘干
+余江 餘江
 于余曲折   于餘曲折
 尸居余气   尸居餘氣
 余光生      余光生
 曲钱 麴錢
 曲车 麴車
 鼠曲草      鼠麴草
-大曲酒      大麴酒
-泸州大曲   瀘州大麯 #商標名
-洋河大曲   洋河大麴
-双沟大曲   雙溝大麯 #商標名
\ No newline at end of file
+曲酒 麯酒
+泸州大曲   瀘州大麯  #商標名
+洋河大曲   洋河大麯
+沟大曲      溝大麯
+朱砂 硃砂
+银朱 銀硃
+喲喂 喲喂
+鳥栖 鳥栖
+澄江县      澂江縣 #以下為含異體字地名
+横峰县      橫峯縣
+鹤峰县      鶴峯縣
+五峰县      五峯縣
+兰溪市      蘭谿市
+金溪县      金谿縣
+竹溪县      竹谿縣
+辰溪县      辰谿縣
+松溪县      松谿縣
+慈溪 慈谿
+浚州 濬州
+浚县 濬縣
+穆棱 穆稜
+绥棱 綏稜
+丹棱 丹稜
+仙游 仙遊
+麟游 麟遊
+乐游原      樂遊原
+托克逊      託克遜
+托里县      託里縣
+沾化 霑化
+沾益 霑益
+岫岩 岫巖
+黄岩县      黃巖縣
+黄岩区      黃巖區
+北仑河      北崙河
+昆嵛 崑嵛
+昆承湖      崑承湖
+灵昆 靈崑
+龙岩 龍巖
+扑冬 撲鼕
+冬冬鼓      鼕鼕鼓
index f76a949..5a0c6c3 100644 (file)
@@ -1,4 +1,3 @@
-U+0347A㑺|U+04FCA俊|
 U+034BA㒺|U+07F54罔|
 U+034C2㓂|U+05BC7寇|
 U+03541㕁|U+05374却|
@@ -15,8 +14,6 @@ U+0384C㡌|U+05E3D帽|
 U+03898㢘|U+05EC9廉|
 U+03919㤙|U+06069恩|
 U+03966㥦|U+060EC惬|
-U+0396B㥫|U+060C7惇|
-U+039F1㧱|U+062FF拿|
 U+03A17㨗|U+06377捷|
 U+03A2A㨪|U+06643晃|
 U+03A3F㨿|U+0636E据|
@@ -61,7 +58,6 @@ U+04EB7亷|U+05EC9廉|
 U+04EBE亾|U+04EA1亡|
 U+04F48佈|U+05E03布|
 U+04F54佔|U+05360占|
-U+04FB7侷|U+05C40局|
 U+04FFB俻|U+05907备|
 U+05010倐|U+0500F倏|
 U+05016倖|U+05E78幸|
@@ -138,7 +134,6 @@ U+056D9囙|U+056E0因|
 U+05705圅|U+051FD函|
 U+0577F坿|U+09644附|
 U+0579C垜|U+0579B垛|
-U+0585A塚|U+051A2冢|
 U+0585F塟|U+0846C葬|
 U+05872塲|U+0573A场|
 U+05896墖|U+05854塔|
@@ -227,7 +222,7 @@ U+0617C慼|U+0621A戚|
 U+0617D慽|U+0621A戚|
 U+0617E慾|U+06B32欲|
 U+06187憇|U+061A9憩|
-U+061DE懞|U+08499蒙|
+U+061DE懞|U+061DE懞|U+08499蒙|
 U+0621E戞|U+0621B戛|
 U+0622F戯|U+0620F戏|
 U+06239戹|U+05384厄|
@@ -275,7 +270,6 @@ U+0671E朞|U+0671F期|
 U+06722朢|U+0671B望|
 U+0672E朮|U+0672F术|
 U+06736朶|U+06735朵|
-U+06792枒|U+04E2B桠|
 U+067B1枱|U+053F0台|
 U+067FA柺|U+062D0拐|
 U+067FB査|U+067E5查|
@@ -287,8 +281,6 @@ U+06852桒|U+06851桑|
 U+0686E桮|U+0676F杯|
 U+0687A桺|U+067F3柳|
 U+068CA棊|U+068CB棋|
-U+06900椀|U+07897碗|
-U+06909椉|U+04E58乘|
 U+06917椗|U+07887碇|
 U+06936椶|U+068D5棕|
 U+06937椷|U+07F04缄|
@@ -324,7 +316,6 @@ U+06DDB淛|U+06D59浙|
 U+06DE8淨|U+051C0净|
 U+06DE9淩|U+051CC凌|
 U+06E67湧|U+06D8C涌|
-U+06E7B湻|U+06DF3淳|
 U+06E7C湼|U+06D85涅|
 U+06EBC溼|U+06E7F湿|
 U+06ED9滙|U+06C47汇|
@@ -417,7 +408,6 @@ U+077C1矁|U+07785瞅|
 U+077C7矇|U+08499蒙|U+077C7矇|
 U+077D9矙|U+077B0瞰|
 U+07832砲|U+070AE炮|
-U+07843硃|U+06731朱|
 U+07881碁|U+068CB棋|
 U+078AA碪|U+07827砧|
 U+078DF磟|U+0788C碌|
@@ -446,7 +436,7 @@ U+07AE2竢|U+04FDF俟|
 U+07AEA竪|U+07AD6竖|
 U+07B5E筞|U+07B56策|
 U+07B69筩|U+07B52筒|
-U+07B6F筯|U+07BB8箸| 
+U+07B6F筯|U+07BB8箸|
 U+07B87箇|U+04E2A个|
 U+07B92箒|U+05E1A帚|
 U+07BA0箠|U+068F0棰|
@@ -567,7 +557,6 @@ U+08842衂|U+08844衄|
 U+08846衆|U+04F17众|
 U+08847衇|U+08109脉|
 U+0884A衊|U+08511蔑|
-U+08856衖|U+05F04弄|
 U+0885E衞|U+0536B卫|
 U+0887A衺|U+090AA邪|
 U+0889F袟|U+05E19帙|
@@ -584,7 +573,6 @@ U+08988覈|U+06838核|
 U+0898A覊|U+07F81羁|
 U+08994覔|U+089C5觅|
 U+089A9覩|U+07779睹|
-U+089D4觔|U+065A4斤|
 U+089DD觝|U+062B5抵|
 U+08A17託|U+06258托|U+08BAC讬|
 U+08A3C証|U+08BC1证|
@@ -649,7 +637,6 @@ U+09049遉|U+04FA6侦|
 U+0904A遊|U+06E38游|
 U+09061遡|U+06EAF溯|
 U+0906F遯|U+09041遁|
-U+09076遶|U+07ED5绕|
 U+09156酖|U+09E29鸩|
 U+09167酧|U+0916C酬|
 U+09183醃|U+0814C腌|
@@ -711,7 +698,6 @@ U+096A3隣|U+090BB邻|
 U+096B7隷|U+096B6隶|
 U+0976D靭|U+097E7韧|
 U+09771靱|U+097E7韧|
-U+0978C鞌|U+0978D鞍|
 U+097A6鞦|U+079CB秋|U+097A7鞧|
 U+097B5鞵|U+0978B鞋|
 U+097BE鞾|U+09774靴|
@@ -734,6 +720,7 @@ U+098F1飱|U+098E7飧|
 U+09901餁|U+0996A饪|
 U+09908餈|U+07CCD糍|
 U+09918餘|U+09980馀|U+04F59余|
+U+09935餵|U+05582喂|
 U+09939餹|U+07CD6糖|
 U+0993B餻|U+07CD5糕|
 U+0993D餽|U+09988馈|
@@ -742,22 +729,18 @@ U+09951饑|U+09965饥|
 U+0995D饝|U+0998D馍|
 U+099C8駈|U+09A71驱|
 U+099E1駡|U+09A82骂|
-U+099EE駮|U+09A73驳|
 U+09A10騐|U+09A8C验|
 U+09A23騣|U+09B03鬃|
 U+09A58驘|U+09AA1骡|
 U+09ABD骽|U+0817F腿|
 U+09ABE骾|U+09CA0鲠|
 U+09AC8髈|U+08180膀|
-U+09AE3髣|U+04EFF仿|
 U+09AE5髥|U+09AEF髯|
-U+09AF4髴|U+04F5B佛|
 U+09B00鬀|U+05243剃|
 U+09B09鬉|U+09B03鬃|
 U+09B26鬦|U+06597斗|
 U+09B28鬨|U+054C4哄|
 U+09B2A鬪|U+06597斗|
-U+09B2D鬭|U+06597斗|
 U+09B30鬰|U+090C1郁|
 U+09B8E鮎|U+09C87鲇|
 U+09B9D鮝|U+09C9E鲞|
@@ -786,47 +769,25 @@ U+09EF4黴|U+09709霉|
 U+09F03鼃|U+086D9蛙|
 U+09F07鼇|U+09CCC鳌|
 U+09F08鼈|U+09CD6鳖|
-U+09F15鼕|U+051AC冬|
+U+09F15鼕|U+0549A咚|
 U+09F63齣|U+051FA出|
 U+09F67齧|U+0556E啮|
 U+09F69齩|U+054AC咬|
-U+201EE𠇮|U+0547D命|
-U+20302𠌂|U+04F1E伞|
 U+20542𠕂|U+0518D再|
 U+20545𠕅|U+0518D再|
-U+20587𠖇|U+051A5冥|
 U+207B0𠞰|U+0527F剿|
-U+20ABE𠪾|U+05386历|
-U+20D1F𠴟|U+054A9咩|
-U+20EF3𠻳|U+055FD嗽|
-U+21428𡐨|U+091CE野|
 U+21681𡚁|U+05F0A弊|
-U+21A18𡨘|U+051A4冤|
 U+21A25𡨥|U+05BC7寇|
-U+21B36𡬶|U+05BFB寻|
 U+21ED5𡻕|U+05C81岁|
-U+22B38𢬸|U+062EC括|
-U+22B4F𢭏|U+06363捣|
-U+22BA5𢮥|U+064CD操|
-U+22DEC𢷬|U+06363捣|
 U+2365C𣙜|U+069B7榷|
 U+242EE𤋮|U+07199熙|
 U+24A0F𤨏|U+07410琐|
-U+24C1C𤰜|U+04EA9亩|
 U+24C48𤱈|U+04EA9亩|
-U+24C4A𤱊|U+07559留|
 U+24EA5𤺥|U+07629瘩|
-U+25128𥄨|U+07785瞅|
-U+25997𥦗|U+07A97窗|
-U+25CBB𥲻|U+07E82纂|
-U+260B3𦂳|U+07D27紧|
-U+260C2𦃂|U+07D27紧|
-U+26246𦉆|U+078B4碴|
 U+262B1𦊱|U+06302挂|
 U+26351𦍑|U+07F8C羌|
 U+26548𦕈|U+07707眇|
-U+26A99𦪙|U+0447D䑽|
 U+26D4F𦵏|U+0846C葬|
 U+28F7B𨽻|U+096B6隶|
 U+294D0𩓐|U+08116脖|
-U+295D7𩗗|U+098D3飓|
\ No newline at end of file
+U+295D7𩗗|U+098D3飓|
index 15192ea..9c81a80 100644 (file)
@@ -11,4 +11,6 @@
 幺
 苹
 厘
-𫍟
\ No newline at end of file
+𫍟
+垴
+岙
\ No newline at end of file
index 4d313b4..64e41b1 100644 (file)
 複流
 反複製
 複對數
+複分解
+複合材
+複合物
+複合體
+複合制
+複合式
+複合弓
+複合函數
 撥穀
 扁擬穀盜蟲
 不穀
 脫穀機
 年穀
 礱穀機
-孤寡不穀
 穀米
 穀旦
 穀圭
 南迴鐵路
 北迴線
 北迴鐵路
-文匯報
-河流匯集
-品彙
-博彙
 滙豐
 伙頭
-方几
 伏几
 高几
 雪窗螢几
 灕然
 澤滲灕而下降
 裏勾外連
-裏手
 水里溪
 二里頭
 年歷史
 辣麵
 肉麵
 燴麵
-雲吞麵
+蝦麵
+雲吞
+一碗麵
+吃碗麵
 冷面相
 糞穢衊面
 僕僕
 瀋河
 瀋水
 瀋州
+瀋北
+瀋吉
 瀋山線
-瀋吉線
-墨沈
+瀋山鐵路
 瀋海鐵路
+瀋丹線
+瀋丹鐵路
+瀋丹客運
+瀋大線
+瀋大鐵路
+瀋大高速
+秦瀋客運
 遼瀋
+京瀋
 胜肽
 胜鍵
 雙胜類
 骨罈
 菜罈
 罈騞
-餵驢
-剪牡丹喂牛
 鹹粥
 鹹食
 鹹潟
 龍眼乾
 乾乾淨淨
 乾柴烈火
-乾乾兒的
 桑乾
 撈乾
 搭乾鋪
 幹事
 幹什麼
 幹細胞
-頭兒幹
 配水幹管
-繐幃飄井幹
-站乾岸兒
-秋陰入井幹
-沒梢幹
+口燥唇乾
+舌乾唇焦
+不食乾腊
+不乾不淨
+乾重
+蒸乾
+乾物
+乾食
+乾鍋
 楨幹
-據榦而窺井底
-井榦摧敗
-杰特
+新幹縣
+誰幹的
+得力幹將
+黑幹將
+的幹將
 李連杰
-周杰
+周杰
 杰倫
-姜文杰
+文杰
+杰威爾
+黃詩杰
+何杰
+狄志杰
+伊適杰
+張杰
+孫杰
+胡杰
+陳杰
+黃杰
+謝杰
+正杰
+柳斌杰
 稜鏡
 稜角
 稜台
 筑邦
 筑陽
 南筑
+悲筑
 批准的
 核准的
 為準
 舊錶
 台鐘
 鐘響
+船鐘
+電波鐘
+石鐘
+自由鐘
+鐘螺
+鐘花
 計時錶
 防水錶
 顯示表格
 遊牧
 遊蕩
 遊刃
+遊美學務
 黑奴籲天錄
 林郁方
 讚歌
 爭奇鬥豔
 使其鬥
 鬥地主
+鈎心鬥角
+鬥劍
+激鬥
+政鬥
+鬥獸
+鬥龍
 石樑
 木樑
 藏歷史
 頁面
-方面
 面條目
 大讚
 唄讚
 詩讚
 賞讚
 讚唄
+點讚
 飛紮
 紮裹
 紮腳
 徵吏
 徵令
 本徵
-船鐘
 黃鈺筑
 香山庄
 當準
 趙治勳
 殭屍
 有栖川
+栗栖溪
+鳥栖市
 兇惡
 兇狠
 兇猛
 鼕鼕鼓
 剷頭
 剷刈
-口燥唇乾
-舌乾唇焦
 花菴詞選
 渾箇
 箇中原因
 箇中好手
 箇中強手
 箇中滋味
-箇中奧
-箇中奧妙
+箇中奧
+箇中道理
 箇中玄機
-箇中消息
-箇中資訊
-箇中訊息
+箇中翹楚
+,箇中
+。箇中
+的箇中
 對表達
 對表現
 對表演
 之一只
 之二只
 之八九只
-也斗了膽
-事情干脆
-事都干脆
 二只得
 亦云
 人云
 以自制
-們斗了膽
-你斗了膽
 其一只
 其二只
 其八九只
 台風穩健
 穩健的台風
 台風獎
+電視台風
+足球台
+網球台
 合府上
 後面店
 向往常
 精制住
 精制服
 經有云
-給我干脆
 編制法
 能干休
 能干戈
 面店鋪
 面粉碎
 面粉紅
-面食麵
 面食飯
 顛顛仆仆
 高干擾
 黃金表
 天后宮
 一吊錢
-不食乾腊
 傳位于四太子
 儉确之教
 党懷英
 八蜡
 憑几
 南宮适
+洪适
+李适
 大蜡
 子云
 分子雲
 折子戲
 搤肮拊背
 文采郁郁
-洪适
 腊之以為餌
 腊毒
 蜡月
 宜云
 貴价
 郁郁菲菲
-不乾不淨
 生發生
 必須
 須根據
 ·范
 剋剝
+休克期
+克期間
+溫洛克期
 科尼亞克期
 馬斯垂克期
 滿拚自盡
 拚絕
 成於思
 單單於
+名單於
 積澱
 澱積
 澱北片
 范文藤
 范文虎
 范文照
-乾重
-鈎心鬥角
 全面包圍
 全面包裹
 機械系
 體系
 心理
-複分解
 鹰鵰
 天地志狼
 薴烯
 山裡有
 棉裡
 語裡
+言裡
+境裡
+境里程
+中境里
 方法裡
 語法裡
 看法裡
 憲法裡
 用法裡
 法裡,
+框裡
+碗裡
+電梯裡
+網站裡
+行家裡手
 首發
 夸脫
-誰幹的
-鐘螺
 風采
 代碼表
 編碼表
 劃入
 中庄子
 埔裏社
+手裏劍
+裏水鎮
+裏運河
 懸掛
 僱傭
 四捨六入
 莜麵
 簡筑翎
 楊雅筑
-魔杰座
-杰威爾音樂
 彭于晏
 尸羅精舍
 進制
-黃詩杰
-何杰
 劉佳怜
 于小惠
 于耘婕
 劉芸后
 謝華后
 趙惠后
+昭惠后
+周惠后
+孝惠后
 趙威后
 聖后
 陳有后
 許虬
-狄志杰
-伊適杰
 于冠華
 于雲鶴
 于忠肅集
 于天龍
 于謹
 于榮光
-電波鐘
 掛名
-啟發式
 舞后
 甄后
 郭后
 于寶軒
 于震
 於震前
\96¼é\9c\87å\90\8e
\96¼é\9c\87å¾\8c
 於震中
 固定制
 毗婆尸佛
 划艇
 划行
 划算
+划着船
+划着竹筏
+划着獨木舟
 總裁制
 仲裁制
 獨裁制
 恒生
 嚴云農
-手裏劍
 伊東怜
 衛後莊公
 並行
 併發重症
 併發模式
 併發型模式
+啟發式
+連發式
 色長髮
 頭長髮
 的長髮
+黑長髮
+留長髮
+髮披肩
+髮及腰
 後天
 學家
 游離
 功勳
 蝎虎
 磨蝎
-鬥劍
-激鬥
-政鬥
 沈海蓉
 方志恒
 古蹟
 騰衝
 沖天
 豐臺
+煙臺
 陽穀
-蒸乾
 太醜
 御製
 合併
 皮托管
 白面包青天
 天神之后
-栗栖溪
 羅馬曆
 羅馬歷史
 羅馬歷代
 自誇
 誇稱
 誇讚
-更加注
+讚嘆
 繼承制
 布穀鳥
 黎克特制
 墨瀋
 米瀋
 拾瀋
-乾物
 姦污
 託兒
 同人誌
 衝着
 確係
 乃係
-開山
+開山
 穀祿
 製衣
 巨製
 錦滷
 汤滷
 浸滷
-石鐘
-石鐘山
 花葯
 聚葯雄蕊
 遺蹟
 辦公檯
 檯面上
 上檯面
+檯面化
 牴觸
 牴牾
 角牴
 涼蓆
 灘蓆
 麻將蓆
-裏水鎮
 被廢後
 蒸製
 體徵
 被繫上
 繫上,
 繫上。
+繫舟
 亂發生
 亂發脾氣
 秀發村
 秀發現
 秀發生
 秀發起
-秀發展
\ No newline at end of file
+秀發展
+縮短發
+簡短發
+短發生
+古人有云
+昔人有云
+云敞
+喂,
+喂!
+喂喲
+喲喂
+啊喂
+呵喂
+呦喂
+水表面
+表面包
+松口鎮
+沙瑯
+琺瑯
+菜餚
\ No newline at end of file
index 4a3613b..2ff49c4 100644 (file)
 複流
 複畝珍
 起複
-餘
\ No newline at end of file
+餘
+旋乾轉坤
+乾坤
+乾卦
+乾隆
+乾掉
+讚嘆不已
+讚歎
+好乾
+加註
+幹將
+鼕
+彙報
+彙整
+彙編
+彙集
\ No newline at end of file
index 43fa460..b491497 100644 (file)
@@ -173,10 +173,8 @@ foreach ( $mmfl['setupFiles'] as $fileName ) {
        // Using extension.json or skin.json
        if ( substr( $fileName, -strlen( '.json' ) ) === '.json' ) {
                $queue[$fileName] = 1;
-       } elseif ( !( include_once $fileName ) ) {
-               // Include the extension to update $wgExtensionMessagesFiles
-               fwrite( STDERR, "Unable to read $fileName\n" );
-               exit( 1 );
+       } else {
+               require_once $fileName;
        }
 }
 
index ab0ca1e..66553bc 100644 (file)
@@ -57,12 +57,6 @@ TEXT;
                        false,
                        true
                );
-               $this->addOption(
-                       'max-slave-lag',
-                       'If slave lag exceeds this many seconds, wait until it drops before continuing. Default: 10',
-                       false,
-                       true
-               );
                $this->addOption(
                        'throttle',
                        'Wait this many milliseconds after each category. Default: 0',
@@ -74,13 +68,9 @@ TEXT;
 
        public function execute() {
                $begin = $this->getOption( 'begin', '' );
-               $maxSlaveLag = $this->getOption( 'max-slave-lag', 10 );
                $throttle = $this->getOption( 'throttle', 0 );
                $force = $this->getOption( 'force', false );
-               $this->doPopulateCategory( $begin, $maxSlaveLag, $throttle, $force );
-       }
 
-       private function doPopulateCategory( $begin, $maxlag, $throttle, $force ) {
                $dbw = wfGetDB( DB_MASTER );
 
                if ( !$force ) {
index d21a296..b98e95f 100644 (file)
@@ -166,7 +166,6 @@ class PurgeChangedFiles extends Maintenance {
 
                                // Purge current version and any versions in oldimage table
                                $file->purgeCache();
-                               $file->purgeHistory();
 
                                if ( $logType === 'delete' ) {
                                        // If there is an orphaned storage file... delete it
@@ -191,7 +190,6 @@ class PurgeChangedFiles extends Maintenance {
                                                $target = $params['4::target'];
                                                $targetFile = $repo->newFile( Title::makeTitle( NS_FILE, $target ) );
                                                $targetFile->purgeCache();
-                                               $targetFile->purgeHistory();
                                                $this->verbose( "Purged file {$target}; move target @{$row->log_timestamp}.\n" );
                                        }
                                }
index 5a14967..8e39978 100644 (file)
@@ -59,7 +59,6 @@ class ImageBuilder extends Maintenance {
 
        public function execute() {
                $this->dbw = wfGetDB( DB_MASTER );
-               $this->maxLag = 10; # if slaves are lagged more than 10 secs, wait
                $this->dryrun = $this->hasOption( 'dry-run' );
                if ( $this->dryrun ) {
                        $GLOBALS['wgReadOnly'] = 'Dry run mode, image upgrades are suppressed';
index e1b6ac6..5d311ad 100644 (file)
@@ -83,7 +83,7 @@ class RefreshLinks extends Maintenance {
                }
 
                // Give extensions a chance to optimize settings
-               wfRunHooks( 'MaintenanceRefreshLinksInit', array( $this ) );
+               Hooks::run( 'MaintenanceRefreshLinksInit', array( $this ) );
 
                # Don't generate extension images (e.g. Timeline)
                $wgParser->clearTagHooks();
index f6245f2..d0989e2 100755 (executable)
@@ -1,8 +1,8 @@
-#!/usr/bin/env bash
+#!/bin/bash -eu
 
 # This script generates a commit that updates our copy of OOjs UI
 
-if [ -n "$2" ]
+if [ -n "${2:-}" ]
 then
        # Too many parameters
        echo >&2 "Usage: $0 [<version>]"
@@ -14,18 +14,21 @@ TARGET_DIR="resources/lib/oojs-ui" # Destination relative to the root of the rep
 NPM_DIR=$(mktemp -d 2>/dev/null || mktemp -d -t 'update-oojs-ui') # e.g. /tmp/update-oojs-ui.rI0I5Vir
 
 # Prepare working tree
-cd "$REPO_DIR" &&
-git reset composer.json && git checkout composer.json &&
-git reset $TARGET_DIR && git checkout $TARGET_DIR && git fetch origin &&
-git checkout -B upstream-oojs-ui origin/master || exit 1
+cd "$REPO_DIR"
+git reset composer.json
+git checkout composer.json
+git reset -- $TARGET_DIR
+git checkout -- $TARGET_DIR
+git fetch origin
+git checkout -B upstream-oojs-ui origin/master
 
 # Fetch upstream version
 cd $NPM_DIR
-if [ -n "$1" ]
+if [ -n "${1:-}" ]
 then
-       npm install "oojs-ui@$1" || exit 1
+       npm install "oojs-ui@$1"
 else
-       npm install oojs-ui || exit 1
+       npm install oojs-ui
 fi
 
 OOJSUI_VERSION=$(node -e 'console.log(require("./node_modules/oojs-ui/package.json").version);')
@@ -35,24 +38,22 @@ then
        exit 1
 fi
 
-# Copy files, excluding:
-# * the Apex theme files,
-# * the minimised distribution files, and
-# * the RTL sheets for non-CSSJanus environments
-# * the raster- and vector-only distribution sheets
-rsync --force --recursive --delete \
-       --exclude '*apex*' \
-       --exclude 'oojs-ui*.min.*' \
-       --exclude 'oojs-ui*.rtl.css' \
-       --exclude 'oojs-ui*.raster.css' \
-       --exclude 'oojs-ui*.vector.css' \
-       ./node_modules/oojs-ui/dist/ "$REPO_DIR/$TARGET_DIR" || exit 1
+# Copy files, picking the necessary ones from source and distribution
+rm -r "$REPO_DIR/$TARGET_DIR"
+mkdir -p "$REPO_DIR/$TARGET_DIR/i18n"
+mkdir -p "$REPO_DIR/$TARGET_DIR/images"
+mkdir -p "$REPO_DIR/$TARGET_DIR/themes/mediawiki/images"
+cp ./node_modules/oojs-ui/dist/{oojs-ui-mediawiki-noimages.css,oojs-ui-mediawiki.js,oojs-ui.js} "$REPO_DIR/$TARGET_DIR"
+cp -R ./node_modules/oojs-ui/dist/i18n "$REPO_DIR/$TARGET_DIR"
+cp -R ./node_modules/oojs-ui/dist/images "$REPO_DIR/$TARGET_DIR"
+cp -R ./node_modules/oojs-ui/dist/themes/mediawiki/images "$REPO_DIR/$TARGET_DIR/themes/mediawiki"
+cp ./node_modules/oojs-ui/src/themes/mediawiki/*.json "$REPO_DIR/$TARGET_DIR/themes/mediawiki"
 
 # Clean up temporary area
 rm -rf "$NPM_DIR"
 
 # Generate commit
-cd $REPO_DIR || exit 1
+cd $REPO_DIR
 
 COMMITMSG=$(cat <<END
 Update OOjs UI to v$OOJSUI_VERSION
@@ -66,4 +67,7 @@ END
 composer require oojs/oojs-ui $OOJSUI_VERSION --no-update
 
 # Stage deletion, modification and creation of files. Then commit.
-git add --update $TARGET_DIR && git add $TARGET_DIR && git add composer.json && git commit -m "$COMMITMSG" || exit 1
+git add --update $TARGET_DIR
+git add $TARGET_DIR
+git add composer.json
+git commit -m "$COMMITMSG"
index 1d5c2b1..b91cb28 100755 (executable)
@@ -1,8 +1,8 @@
-#!/usr/bin/env bash
+#!/bin/bash -eu
 
 # This script generates a commit that updates our copy of OOjs
 
-if [ -n "$2" ]
+if [ -n "${2:-}" ]
 then
        # Too many parameters
        echo >&2 "Usage: $0 [<version>]"
@@ -14,17 +14,19 @@ TARGET_DIR="resources/lib/oojs" # Destination relative to the root of the repo
 NPM_DIR=$(mktemp -d 2>/dev/null || mktemp -d -t 'update-oojs') # e.g. /tmp/update-oojs.rI0I5Vir
 
 # Prepare working tree
-cd "$REPO_DIR" &&
-git reset $TARGET_DIR && git checkout $TARGET_DIR && git fetch origin &&
-git checkout -B upstream-oojs origin/master || exit 1
+cd "$REPO_DIR"
+git reset -- $TARGET_DIR
+git checkout -- $TARGET_DIR
+git fetch origin
+git checkout -B upstream-oojs origin/master
 
 # Fetch upstream version
 cd $NPM_DIR
-if [ -n "$1" ]
+if [ -n "${1:-}" ]
 then
-       npm install "oojs@$1" || exit 1
+       npm install "oojs@$1"
 else
-       npm install oojs || exit 1
+       npm install oojs
 fi
 
 OOJS_VERSION=$(node -e 'console.log(require("./node_modules/oojs/package.json").version);')
@@ -35,13 +37,13 @@ then
 fi
 
 # Copy file(s)
-rsync --force ./node_modules/oojs/dist/oojs.jquery.js "$REPO_DIR/$TARGET_DIR" || exit 1
+rsync --force ./node_modules/oojs/dist/oojs.jquery.js "$REPO_DIR/$TARGET_DIR"
 
 # Clean up temporary area
 rm -rf "$NPM_DIR"
 
 # Generate commit
-cd $REPO_DIR || exit 1
+cd $REPO_DIR
 
 COMMITMSG=$(cat <<END
 Update OOjs to v$OOJS_VERSION
@@ -52,4 +54,6 @@ END
 )
 
 # Stage deletion, modification and creation of files. Then commit.
-git add --update $TARGET_DIR && git add $TARGET_DIR && git commit -m "$COMMITMSG" || exit 1
+git add --update $TARGET_DIR
+git add $TARGET_DIR
+git commit -m "$COMMITMSG"
index 3864e3c..3c5d28b 100644 (file)
@@ -52,9 +52,7 @@ class RunJobs extends Maintenance {
        }
 
        public function execute() {
-               if ( wfReadOnly() ) {
-                       $this->error( "Unable to run jobs; the wiki is in read-only mode.", 1 ); // die
-               }
+               global $wgCommandLineMode;
 
                if ( $this->hasOption( 'procs' ) ) {
                        $procs = intval( $this->getOption( 'procs' ) );
@@ -68,21 +66,29 @@ class RunJobs extends Maintenance {
                        }
                }
 
-               $json = ( $this->getOption( 'result' ) === 'json' );
+               $outputJSON = ( $this->getOption( 'result' ) === 'json' );
+
+               // Enable DBO_TRX for atomicity; JobRunner manages transactions
+               // and works well in web server mode already (@TODO: this is a hack)
+               $wgCommandLineMode = false;
 
                $runner = new JobRunner( LoggerFactory::getInstance( 'runJobs' ) );
-               if ( !$json ) {
+               if ( !$outputJSON ) {
                        $runner->setDebugHandler( array( $this, 'debugInternal' ) );
                }
+
                $response = $runner->run( array(
                        'type'     => $this->getOption( 'type', false ),
                        'maxJobs'  => $this->getOption( 'maxjobs', false ),
                        'maxTime'  => $this->getOption( 'maxtime', false ),
                        'throttle' => $this->hasOption( 'nothrottle' ) ? false : true,
                ) );
-               if ( $json ) {
+
+               if ( $outputJSON ) {
                        $this->output( FormatJson::encode( $response, true ) );
                }
+
+               $wgCommandLineMode = true;
        }
 
        /**
index 0fd1fd8..b8af5e9 100755 (executable)
@@ -63,8 +63,7 @@ class UpdateMediaWiki extends Maintenance {
        }
 
        function getDbType() {
-               /* If we used the class constant PHP4 would give a parser error here */
-               return 2; /* Maintenance::DB_ADMIN */
+               return Maintenance::DB_ADMIN;
        }
 
        function compatChecks() {
@@ -126,7 +125,7 @@ class UpdateMediaWiki extends Maintenance {
 
                $this->output( "MediaWiki {$wgVersion} Updater\n\n" );
 
-               wfWaitForSlaves( 5 ); // let's not kill databases, shall we? ;) --tor
+               wfWaitForSlaves();
 
                if ( !$this->hasOption( 'skip-compat-checks' ) ) {
                        $this->compatChecks();
index 342ffba..5cf8afa 100644 (file)
@@ -24,8 +24,6 @@
  * @author Aryeh Gregor (Simetrical)
  */
 
-#$optionsWithArgs = array( 'begin', 'max-slave-lag' );
-
 require_once __DIR__ . '/Maintenance.php';
 
 /**
index c9b1abb..50665ef 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * Wait until slave lag goes under a certain value.
+ * Wait for the slaves to catch up to the master position.
  *
  * 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
 require_once __DIR__ . '/Maintenance.php';
 
 /**
- * Maintenance script to wait until slave lag goes under a certain value.
+ * Maintenance script to wait for the slaves to catch up to the master position.
  *
  * @ingroup Maintenance
  */
 class WaitForSlave extends Maintenance {
-       public function __construct() {
-               parent::__construct();
-               $this->addArg( 'maxlag', 'How long to wait for the slaves, default 10 seconds', false );
-       }
-
        public function execute() {
-               wfWaitForSlaves( $this->getArg( 0, 10 ) );
+               wfWaitForSlaves();
        }
 }
 
index 5e5e35d..0b56972 100644 (file)
@@ -94,7 +94,7 @@ foreach ( $wgOpenSearchTemplates as $type => $template ) {
 
 // Allow hooks to override the suggestion URL settings in a more
 // general way than overriding the whole search engine...
-wfRunHooks( 'OpenSearchUrls', array( &$urls ) );
+Hooks::run( 'OpenSearchUrls', array( &$urls ) );
 
 foreach ( $urls as $attribs ) {
        print Xml::element( 'Url', $attribs );
index a4dde37..874920e 100644 (file)
@@ -21,4 +21,6 @@
  * @file
  */
 
+define( 'MW_ENTRY_PHP5', true );
+
 require './opensearch_desc.php';
index fc2bd3a..42270f7 100644 (file)
     "grunt-cli": "0.1.13",
     "grunt-banana-checker": "0.2.1",
     "grunt-contrib-copy": "0.8.0",
-    "grunt-contrib-jshint": "0.11.0",
+    "grunt-contrib-jshint": "0.11.2",
     "grunt-contrib-watch": "0.6.1",
-    "grunt-jscs": "1.5.0",
+    "grunt-jscs": "1.8.0",
     "grunt-jsonlint": "1.0.4",
     "grunt-karma": "0.10.1",
     "karma": "0.12.31",
-    "karma-chrome-launcher": "0.1.7",
+    "karma-chrome-launcher": "0.1.8",
     "karma-firefox-launcher": "0.1.4",
     "karma-qunit": "0.1.4",
-    "qunitjs": "1.17.1"
+    "qunitjs": "1.18.0"
   }
 }
index 14ef421..6d430f6 100644 (file)
@@ -21,4 +21,6 @@
  * @file
  */
 
+define( 'MW_ENTRY_PHP5', true );
+
 require './profileinfo.php';
index ec5a9a0..ae5b3f9 100644 (file)
@@ -981,10 +981,13 @@ return array(
        ),
        'mediawiki.notification' => array(
                'styles' => array(
-                       'resources/src/mediawiki/mediawiki.notification.css',
+                       'resources/src/mediawiki/mediawiki.notification.common.css',
                        'resources/src/mediawiki/mediawiki.notification.hideForPrint.css'
                                => array( 'media' => 'print' ),
                ),
+               'skinStyles' => array(
+                       'default' => 'resources/src/mediawiki/mediawiki.notification.css',
+               ),
                'scripts' => 'resources/src/mediawiki/mediawiki.notification.js',
                'dependencies' => 'mediawiki.page.startup',
                'targets' => array( 'desktop', 'mobile' ),
@@ -1269,6 +1272,7 @@ return array(
                'dependencies' => array(
                        'mediawiki.util',
                        'mediawiki.language',
+                       'dom-level2-shim',
                ),
                'targets' => array( 'desktop', 'mobile' ),
        ),
@@ -1695,6 +1699,14 @@ return array(
                'skipFunction' => 'resources/src/es5-skip.js',
        ),
 
+       /* dom-level2-shim */
+       // IE 8
+       'dom-level2-shim' => array(
+               'scripts' => 'resources/src/polyfill-nodeTypes.js',
+               'targets' => array( 'desktop', 'mobile' ),
+               'skipFunction' => 'resources/src/dom-level2-skip.js',
+       ),
+
        /* OOjs */
        'oojs' => array(
                'scripts' => array(
@@ -1721,6 +1733,9 @@ return array(
                        'es5-shim',
                        'oojs',
                        'oojs-ui.styles',
+                       'oojs-ui.styles.icons',
+                       'oojs-ui.styles.indicators',
+                       'oojs-ui.styles.textures',
                ),
                'messages' => array(
                        'ooui-dialog-message-accept',
@@ -1741,124 +1756,127 @@ return array(
 
        'oojs-ui.styles' => array(
                'position' => 'top',
+               'styles' => 'resources/src/oojs-ui-local.css', // HACK, see inside the file
                'skinStyles' => array(
-                       'default' => 'resources/lib/oojs-ui/oojs-ui-mediawiki.css',
+                       'default' => 'resources/lib/oojs-ui/oojs-ui-mediawiki-noimages.css',
                ),
                'targets' => array( 'desktop', 'mobile' ),
        ),
 
-       // FIXME: This is a bit of a mess; T92551 requests fixing
+       'oojs-ui.styles.icons' => array(
+               'class' => 'ResourceLoaderImageModule',
+               'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
+               'data' => 'icons.json',
+               'selectorWithoutVariant' => '.oo-ui-icon-{name}, .mw-ui-icon-{name}:after, .mw-ui-icon-{name}:before',
+               'selectorWithVariant' => '.oo-ui-image-{variant} .oo-ui-icon-{name}, .oo-ui-image-{variant}.oo-ui-icon-{name}, .mw-ui-icon-{name}-{variant}:after, .mw-ui-icon-{name}-{variant}:before',
+       ),
+       'oojs-ui.styles.indicators' => array(
+               'class' => 'ResourceLoaderImageModule',
+               'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
+               'data' => 'indicators.json',
+       ),
+       'oojs-ui.styles.textures' => array(
+               'class' => 'ResourceLoaderImageModule',
+               'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
+               'data' => 'textures.json',
+       ),
        'oojs-ui.styles.icons-alerts' => array(
-               'position' => 'top',
-               'skinStyles' => array(
-                       'default' => 'resources/lib/oojs-ui/oojs-ui-mediawiki-icons-alerts.css',
-               ),
-               'dependencies' => array( 'oojs-ui.styles' ),
-               'targets' => array( 'desktop', 'mobile' ),
+               'class' => 'ResourceLoaderImageModule',
+               'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
+               'data' => 'icons-alerts.json',
+               'selectorWithoutVariant' => '.oo-ui-icon-{name}, .mw-ui-icon-{name}:after, .mw-ui-icon-{name}:before',
+               'selectorWithVariant' => '.oo-ui-image-{variant} .oo-ui-icon-{name}, .oo-ui-image-{variant}.oo-ui-icon-{name}, .mw-ui-icon-{name}-{variant}:after, .mw-ui-icon-{name}-{variant}:before',
        ),
        'oojs-ui.styles.icons-content' => array(
-               'position' => 'top',
-               'skinStyles' => array(
-                       'default' => 'resources/lib/oojs-ui/oojs-ui-mediawiki-icons-content.css',
-               ),
-               'dependencies' => array( 'oojs-ui.styles' ),
-               'targets' => array( 'desktop', 'mobile' ),
+               'class' => 'ResourceLoaderImageModule',
+               'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
+               'data' => 'icons-content.json',
+               'selectorWithoutVariant' => '.oo-ui-icon-{name}, .mw-ui-icon-{name}:after, .mw-ui-icon-{name}:before',
+               'selectorWithVariant' => '.oo-ui-image-{variant} .oo-ui-icon-{name}, .oo-ui-image-{variant}.oo-ui-icon-{name}, .mw-ui-icon-{name}-{variant}:after, .mw-ui-icon-{name}-{variant}:before',
        ),
        'oojs-ui.styles.icons-editing-advanced' => array(
-               'position' => 'top',
-               'skinStyles' => array(
-                       'default' => 'resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-advanced.css',
-               ),
-               'dependencies' => array( 'oojs-ui.styles' ),
-               'targets' => array( 'desktop', 'mobile' ),
+               'class' => 'ResourceLoaderImageModule',
+               'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
+               'data' => 'icons-editing-advanced.json',
+               'selectorWithoutVariant' => '.oo-ui-icon-{name}, .mw-ui-icon-{name}:after, .mw-ui-icon-{name}:before',
+               'selectorWithVariant' => '.oo-ui-image-{variant} .oo-ui-icon-{name}, .oo-ui-image-{variant}.oo-ui-icon-{name}, .mw-ui-icon-{name}-{variant}:after, .mw-ui-icon-{name}-{variant}:before',
        ),
        'oojs-ui.styles.icons-editing-core' => array(
-               'position' => 'top',
-               'skinStyles' => array(
-                       'default' => 'resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-core.css',
-               ),
-               'dependencies' => array( 'oojs-ui.styles' ),
-               'targets' => array( 'desktop', 'mobile' ),
+               'class' => 'ResourceLoaderImageModule',
+               'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
+               'data' => 'icons-editing-core.json',
+               'selectorWithoutVariant' => '.oo-ui-icon-{name}, .mw-ui-icon-{name}:after, .mw-ui-icon-{name}:before',
+               'selectorWithVariant' => '.oo-ui-image-{variant} .oo-ui-icon-{name}, .oo-ui-image-{variant}.oo-ui-icon-{name}, .mw-ui-icon-{name}-{variant}:after, .mw-ui-icon-{name}-{variant}:before',
        ),
        'oojs-ui.styles.icons-editing-list' => array(
-               'position' => 'top',
-               'skinStyles' => array(
-                       'default' => 'resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-list.css',
-               ),
-               'dependencies' => array( 'oojs-ui.styles' ),
-               'targets' => array( 'desktop', 'mobile' ),
+               'class' => 'ResourceLoaderImageModule',
+               'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
+               'data' => 'icons-editing-list.json',
+               'selectorWithoutVariant' => '.oo-ui-icon-{name}, .mw-ui-icon-{name}:after, .mw-ui-icon-{name}:before',
+               'selectorWithVariant' => '.oo-ui-image-{variant} .oo-ui-icon-{name}, .oo-ui-image-{variant}.oo-ui-icon-{name}, .mw-ui-icon-{name}-{variant}:after, .mw-ui-icon-{name}-{variant}:before',
        ),
        'oojs-ui.styles.icons-editing-styling' => array(
-               'position' => 'top',
-               'skinStyles' => array(
-                       'default' => 'resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-styling.css',
-               ),
-               'dependencies' => array( 'oojs-ui.styles' ),
-               'targets' => array( 'desktop', 'mobile' ),
+               'class' => 'ResourceLoaderImageModule',
+               'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
+               'data' => 'icons-editing-styling.json',
+               'selectorWithoutVariant' => '.oo-ui-icon-{name}, .mw-ui-icon-{name}:after, .mw-ui-icon-{name}:before',
+               'selectorWithVariant' => '.oo-ui-image-{variant} .oo-ui-icon-{name}, .oo-ui-image-{variant}.oo-ui-icon-{name}, .mw-ui-icon-{name}-{variant}:after, .mw-ui-icon-{name}-{variant}:before',
        ),
        'oojs-ui.styles.icons-interactions' => array(
-               'position' => 'top',
-               'skinStyles' => array(
-                       'default' => 'resources/lib/oojs-ui/oojs-ui-mediawiki-icons-interactions.css',
-               ),
-               'dependencies' => array( 'oojs-ui.styles' ),
-               'targets' => array( 'desktop', 'mobile' ),
+               'class' => 'ResourceLoaderImageModule',
+               'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
+               'data' => 'icons-interactions.json',
+               'selectorWithoutVariant' => '.oo-ui-icon-{name}, .mw-ui-icon-{name}:after, .mw-ui-icon-{name}:before',
+               'selectorWithVariant' => '.oo-ui-image-{variant} .oo-ui-icon-{name}, .oo-ui-image-{variant}.oo-ui-icon-{name}, .mw-ui-icon-{name}-{variant}:after, .mw-ui-icon-{name}-{variant}:before',
        ),
        'oojs-ui.styles.icons-layout' => array(
-               'position' => 'top',
-               'skinStyles' => array(
-                       'default' => 'resources/lib/oojs-ui/oojs-ui-mediawiki-icons-layout.css',
-               ),
-               'dependencies' => array( 'oojs-ui.styles' ),
-               'targets' => array( 'desktop', 'mobile' ),
+               'class' => 'ResourceLoaderImageModule',
+               'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
+               'data' => 'icons-layout.json',
+               'selectorWithoutVariant' => '.oo-ui-icon-{name}, .mw-ui-icon-{name}:after, .mw-ui-icon-{name}:before',
+               'selectorWithVariant' => '.oo-ui-image-{variant} .oo-ui-icon-{name}, .oo-ui-image-{variant}.oo-ui-icon-{name}, .mw-ui-icon-{name}-{variant}:after, .mw-ui-icon-{name}-{variant}:before',
        ),
        'oojs-ui.styles.icons-location' => array(
-               'position' => 'top',
-               'skinStyles' => array(
-                       'default' => 'resources/lib/oojs-ui/oojs-ui-mediawiki-icons-location.css',
-               ),
-               'dependencies' => array( 'oojs-ui.styles' ),
-               'targets' => array( 'desktop', 'mobile' ),
+               'class' => 'ResourceLoaderImageModule',
+               'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
+               'data' => 'icons-location.json',
+               'selectorWithoutVariant' => '.oo-ui-icon-{name}, .mw-ui-icon-{name}:after, .mw-ui-icon-{name}:before',
+               'selectorWithVariant' => '.oo-ui-image-{variant} .oo-ui-icon-{name}, .oo-ui-image-{variant}.oo-ui-icon-{name}, .mw-ui-icon-{name}-{variant}:after, .mw-ui-icon-{name}-{variant}:before',
        ),
        'oojs-ui.styles.icons-media' => array(
-               'position' => 'top',
-               'skinStyles' => array(
-                       'default' => 'resources/lib/oojs-ui/oojs-ui-mediawiki-icons-media.css',
-               ),
-               'dependencies' => array( 'oojs-ui.styles' ),
-               'targets' => array( 'desktop', 'mobile' ),
+               'class' => 'ResourceLoaderImageModule',
+               'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
+               'data' => 'icons-media.json',
+               'selectorWithoutVariant' => '.oo-ui-icon-{name}, .mw-ui-icon-{name}:after, .mw-ui-icon-{name}:before',
+               'selectorWithVariant' => '.oo-ui-image-{variant} .oo-ui-icon-{name}, .oo-ui-image-{variant}.oo-ui-icon-{name}, .mw-ui-icon-{name}-{variant}:after, .mw-ui-icon-{name}-{variant}:before',
        ),
        'oojs-ui.styles.icons-moderation' => array(
-               'position' => 'top',
-               'skinStyles' => array(
-                       'default' => 'resources/lib/oojs-ui/oojs-ui-mediawiki-icons-moderation.css',
-               ),
-               'dependencies' => array( 'oojs-ui.styles' ),
-               'targets' => array( 'desktop', 'mobile' ),
+               'class' => 'ResourceLoaderImageModule',
+               'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
+               'data' => 'icons-moderation.json',
+               'selectorWithoutVariant' => '.oo-ui-icon-{name}, .mw-ui-icon-{name}:after, .mw-ui-icon-{name}:before',
+               'selectorWithVariant' => '.oo-ui-image-{variant} .oo-ui-icon-{name}, .oo-ui-image-{variant}.oo-ui-icon-{name}, .mw-ui-icon-{name}-{variant}:after, .mw-ui-icon-{name}-{variant}:before',
        ),
        'oojs-ui.styles.icons-movement' => array(
-               'position' => 'top',
-               'skinStyles' => array(
-                       'default' => 'resources/lib/oojs-ui/oojs-ui-mediawiki-icons-movement.css',
-               ),
-               'dependencies' => array( 'oojs-ui.styles' ),
-               'targets' => array( 'desktop', 'mobile' ),
+               'class' => 'ResourceLoaderImageModule',
+               'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
+               'data' => 'icons-movement.json',
+               'selectorWithoutVariant' => '.oo-ui-icon-{name}, .mw-ui-icon-{name}:after, .mw-ui-icon-{name}:before',
+               'selectorWithVariant' => '.oo-ui-image-{variant} .oo-ui-icon-{name}, .oo-ui-image-{variant}.oo-ui-icon-{name}, .mw-ui-icon-{name}-{variant}:after, .mw-ui-icon-{name}-{variant}:before',
        ),
        'oojs-ui.styles.icons-user' => array(
-               'position' => 'top',
-               'skinStyles' => array(
-                       'default' => 'resources/lib/oojs-ui/oojs-ui-mediawiki-icons-user.css',
-               ),
-               'dependencies' => array( 'oojs-ui.styles' ),
-               'targets' => array( 'desktop', 'mobile' ),
+               'class' => 'ResourceLoaderImageModule',
+               'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
+               'data' => 'icons-user.json',
+               'selectorWithoutVariant' => '.oo-ui-icon-{name}, .mw-ui-icon-{name}:after, .mw-ui-icon-{name}:before',
+               'selectorWithVariant' => '.oo-ui-image-{variant} .oo-ui-icon-{name}, .oo-ui-image-{variant}.oo-ui-icon-{name}, .mw-ui-icon-{name}-{variant}:after, .mw-ui-icon-{name}-{variant}:before',
        ),
        'oojs-ui.styles.icons-wikimedia' => array(
-               'position' => 'top',
-               'skinStyles' => array(
-                       'default' => 'resources/lib/oojs-ui/oojs-ui-mediawiki-icons-wikimedia.css',
-               ),
-               'dependencies' => array( 'oojs-ui.styles' ),
-               'targets' => array( 'desktop', 'mobile' ),
+               'class' => 'ResourceLoaderImageModule',
+               'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
+               'data' => 'icons-wikimedia.json',
+               'selectorWithoutVariant' => '.oo-ui-icon-{name}, .mw-ui-icon-{name}:after, .mw-ui-icon-{name}:before',
+               'selectorWithVariant' => '.oo-ui-image-{variant} .oo-ui-icon-{name}, .oo-ui-image-{variant}.oo-ui-icon-{name}, .mw-ui-icon-{name}-{variant}:after, .mw-ui-icon-{name}-{variant}:before',
        ),
 
 );
index 1c3aa82..6feb110 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery JavaScript Library v1.11.2
+ * jQuery JavaScript Library v1.11.3
  * http://jquery.com/
  *
  * Includes Sizzle.js
@@ -9,7 +9,7 @@
  * Released under the MIT license
  * http://jquery.org/license
  *
- * Date: 2014-12-17T15:27Z
+ * Date: 2015-04-28T16:19Z
  */
 
 (function( global, factory ) {
@@ -64,7 +64,7 @@ var support = {};
 
 
 var
-       version = "1.11.2",
+       version = "1.11.3",
 
        // Define a local copy of jQuery
        jQuery = function( selector, context ) {
@@ -569,7 +569,12 @@ jQuery.each("Boolean Number String Function Array Date RegExp Object Error".spli
 });
 
 function isArraylike( obj ) {
-       var length = obj.length,
+
+       // Support: iOS 8.2 (not reproducible in simulator)
+       // `in` check used to prevent JIT error (gh-2145)
+       // hasOwn isn't used here due to false negatives
+       // regarding Nodelist length in IE
+       var length = "length" in obj && obj.length,
                type = jQuery.type( obj );
 
        if ( type === "function" || jQuery.isWindow( obj ) ) {
index c7df768..1cfa6c4 100644 (file)
@@ -19,6 +19,7 @@
        "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": "অগ্রসর হোন"
index b84df25..6230cc9 100644 (file)
@@ -6,5 +6,14 @@
        },
        "ooui-outline-control-move-down": "Flyt lutin niður",
        "ooui-outline-control-move-up": "Flyt lutin upp",
-       "ooui-toolbar-more": "Meira"
+       "ooui-outline-control-remove": "Tak ein lut burtur",
+       "ooui-toolbar-more": "Meira",
+       "ooui-toolgroup-expand": "Meira",
+       "ooui-toolgroup-collapse": "Færri",
+       "ooui-dialog-message-accept": "OK",
+       "ooui-dialog-message-reject": "Avbrót",
+       "ooui-dialog-process-error": "Okkurt gekk galið",
+       "ooui-dialog-process-dismiss": "Lat aftur",
+       "ooui-dialog-process-retry": "Royn aftur",
+       "ooui-dialog-process-continue": "Halt fram"
 }
index b003e8c..982a3cd 100644 (file)
@@ -3,7 +3,8 @@
                "authors": [
                        "Vikassy",
                        "Nayvik",
-                       "Omshivaprakash"
+                       "Omshivaprakash",
+                       "Pavanaja"
                ]
        },
        "ooui-outline-control-move-down": "ವಸ್ತುವನ್ನು ಕೆಳಗೆ ಸರಿಸು",
@@ -14,7 +15,7 @@
        "ooui-toolgroup-collapse": "ಕೆಲವೇ ಕೆಲವು",
        "ooui-dialog-message-accept": "ಸರಿ",
        "ooui-dialog-message-reject": "ರದ್ದುಮಾಡು",
-       "ooui-dialog-process-error": "à²\8eನೋ ಎಡವಟ್ಟಾಗಿದೆ....",
+       "ooui-dialog-process-error": "à²\8fನೋ ಎಡವಟ್ಟಾಗಿದೆ....",
        "ooui-dialog-process-dismiss": "ತೆಗೆದುಹಾಕು",
        "ooui-dialog-process-retry": "ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ",
        "ooui-dialog-process-continue": "ಮುಂದುವರೆಸು"
diff --git a/resources/lib/oojs-ui/i18n/ku-latn.json b/resources/lib/oojs-ui/i18n/ku-latn.json
new file mode 100644 (file)
index 0000000..be9a8ab
--- /dev/null
@@ -0,0 +1,13 @@
+{
+       "@metadata": {
+               "authors": [
+                       "George Animal"
+               ]
+       },
+       "ooui-toolgroup-expand": "Bêhtir",
+       "ooui-toolgroup-collapse": "Kêmtir",
+       "ooui-dialog-message-accept": "Baş e",
+       "ooui-dialog-message-reject": "Betal bike",
+       "ooui-dialog-process-retry": "Dîsa hewl bide",
+       "ooui-dialog-process-continue": "Bidomîne"
+}
index 94bc7df..ebffe53 100644 (file)
@@ -6,5 +6,13 @@
        },
        "ooui-outline-control-move-down": "توکی ښکته راوړل",
        "ooui-outline-control-move-up": "توکی پورته راوړل",
-       "ooui-toolbar-more": "نور"
+       "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": "بيا هڅه"
 }
diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-alerts.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-alerts.css
deleted file mode 100644 (file)
index bf3cedf..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/*!
- * OOjs UI v0.9.8
- * https://www.mediawiki.org/wiki/OOjs_UI
- *
- * Copyright 2011–2015 OOjs Team and other contributors.
- * Released under the MIT license
- * http://oojs.mit-license.org
- *
- * Date: 2015-04-12T17:19:13Z
- */
-.oo-ui-icon-bell {
-       background-image: url("themes/mediawiki/images/icons/bell.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bell.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bell.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bell.png");
-}
-.oo-ui-icon-bellOn {
-       background-image: url("themes/mediawiki/images/icons/bellOn-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bellOn-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bellOn-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bellOn-ltr.png");
-}
-.oo-ui-icon-eye {
-       background-image: url("themes/mediawiki/images/icons/eye.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/eye.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/eye.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/eye.png");
-}
-.oo-ui-icon-eyeClosed {
-       background-image: url("themes/mediawiki/images/icons/eyeClosed.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/eyeClosed.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/eyeClosed.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/eyeClosed.png");
-}
-.oo-ui-icon-message {
-       background-image: url("themes/mediawiki/images/icons/message-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/message-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/message-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/message-ltr.png");
-}
-.oo-ui-icon-signature {
-       background-image: url("themes/mediawiki/images/icons/signature-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/signature-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/signature-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/signature-ltr.png");
-}
-.oo-ui-icon-speechBubble {
-       background-image: url("themes/mediawiki/images/icons/speechBubble-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/speechBubble-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/speechBubble-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/speechBubble-ltr.png");
-}
-.oo-ui-icon-speechBubbleAdd {
-       background-image: url("themes/mediawiki/images/icons/speechBubbleAdd-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/speechBubbleAdd-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/speechBubbleAdd-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/speechBubbleAdd-ltr.png");
-}
-.oo-ui-icon-speechBubbles {
-       background-image: url("themes/mediawiki/images/icons/speechBubbles-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/speechBubbles-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/speechBubbles-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/speechBubbles-ltr.png");
-}
diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-content.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-content.css
deleted file mode 100644 (file)
index 80de362..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-/*!
- * OOjs UI v0.9.8
- * https://www.mediawiki.org/wiki/OOjs_UI
- *
- * Copyright 2011–2015 OOjs Team and other contributors.
- * Released under the MIT license
- * http://oojs.mit-license.org
- *
- * Date: 2015-04-12T17:19:13Z
- */
-.oo-ui-icon-article {
-       background-image: url("themes/mediawiki/images/icons/article-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/article-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/article-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/article-ltr.png");
-}
-.oo-ui-icon-articleCheck {
-       background-image: url("themes/mediawiki/images/icons/articleCheck-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/articleCheck-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/articleCheck-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/articleCheck-ltr.png");
-}
-.oo-ui-icon-articleSearch {
-       background-image: url("themes/mediawiki/images/icons/articleSearch-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/articleSearch-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/articleSearch-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/articleSearch-ltr.png");
-}
-.oo-ui-icon-book {
-       background-image: url("themes/mediawiki/images/icons/book-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/book-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/book-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/book-ltr.png");
-}
-.oo-ui-icon-citeArticle {
-       background-image: url("themes/mediawiki/images/icons/citeArticle-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/citeArticle-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/citeArticle-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/citeArticle-ltr.png");
-}
-.oo-ui-icon-die {
-       background-image: url("themes/mediawiki/images/icons/die-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/die-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/die-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/die-ltr.png");
-}
-.oo-ui-icon-download {
-       background-image: url("themes/mediawiki/images/icons/download-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/download-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/download-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/download-ltr.png");
-}
-.oo-ui-icon-folderPlaceholder {
-       background-image: url("themes/mediawiki/images/icons/folderPlaceholder-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/folderPlaceholder-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/folderPlaceholder-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/folderPlaceholder-ltr.png");
-}
-.oo-ui-icon-journal {
-       background-image: url("themes/mediawiki/images/icons/journal-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/journal-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/journal-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/journal-ltr.png");
-}
-.oo-ui-icon-newspaper {
-       background-image: url("themes/mediawiki/images/icons/newspaper-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/newspaper-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/newspaper-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/newspaper-ltr.png");
-}
-.oo-ui-icon-upload {
-       background-image: url("themes/mediawiki/images/icons/upload-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/upload-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/upload-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/upload-ltr.png");
-}
diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-advanced.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-advanced.css
deleted file mode 100644 (file)
index bacc878..0000000
+++ /dev/null
@@ -1,166 +0,0 @@
-/*!
- * OOjs UI v0.9.8
- * https://www.mediawiki.org/wiki/OOjs_UI
- *
- * Copyright 2011–2015 OOjs Team and other contributors.
- * Released under the MIT license
- * http://oojs.mit-license.org
- *
- * Date: 2015-04-12T17:19:13Z
- */
-.oo-ui-icon-alignCentre {
-       background-image: url("themes/mediawiki/images/icons/align-center.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/align-center.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/align-center.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/align-center.png");
-}
-.oo-ui-icon-alignLeft {
-       background-image: url("themes/mediawiki/images/icons/align-float-left.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/align-float-left.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/align-float-left.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/align-float-left.png");
-}
-.oo-ui-icon-alignRight {
-       background-image: url("themes/mediawiki/images/icons/align-float-right.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/align-float-right.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/align-float-right.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/align-float-right.png");
-}
-.oo-ui-icon-find {
-       background-image: url("themes/mediawiki/images/icons/find-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/find-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/find-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/find-ltr.png");
-}
-.oo-ui-icon-insert {
-       background-image: url("themes/mediawiki/images/icons/insert.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/insert.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/insert.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/insert.png");
-}
-.oo-ui-icon-layout {
-       background-image: url("themes/mediawiki/images/icons/layout-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/layout-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/layout-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/layout-ltr.png");
-}
-.oo-ui-icon-newline {
-       background-image: url("themes/mediawiki/images/icons/newline-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/newline-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/newline-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/newline-ltr.png");
-}
-.oo-ui-icon-redirect {
-       background-image: url("themes/mediawiki/images/icons/redirect-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/redirect-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/redirect-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/redirect-ltr.png");
-}
-.oo-ui-icon-noWikiText {
-       background-image: url("themes/mediawiki/images/icons/noWikiText-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/noWikiText-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/noWikiText-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/noWikiText-ltr.png");
-}
-.oo-ui-icon-outline {
-       background-image: url("themes/mediawiki/images/icons/outline-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/outline-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/outline-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/outline-ltr.png");
-}
-.oo-ui-icon-puzzle {
-       background-image: url("themes/mediawiki/images/icons/puzzle-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/puzzle-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/puzzle-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/puzzle-ltr.png");
-}
-.oo-ui-icon-quotes {
-       background-image: url("themes/mediawiki/images/icons/quotes-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/quotes-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/quotes-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/quotes-ltr.png");
-}
-.oo-ui-icon-quotesAdd {
-       background-image: url("themes/mediawiki/images/icons/quotesAdd-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/quotesAdd-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/quotesAdd-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/quotesAdd-ltr.png");
-}
-.oo-ui-icon-searchCaseSensitive {
-       background-image: url("themes/mediawiki/images/icons/case-sensitive.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/case-sensitive.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/case-sensitive.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/case-sensitive.png");
-}
-.oo-ui-icon-searchRegularExpression {
-       background-image: url("themes/mediawiki/images/icons/regular-expression.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/regular-expression.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/regular-expression.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/regular-expression.png");
-}
-.oo-ui-icon-specialCharacter {
-       background-image: url("themes/mediawiki/images/icons/specialCharacter.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/specialCharacter.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/specialCharacter.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/specialCharacter.png");
-}
-.oo-ui-icon-table {
-       background-image: url("themes/mediawiki/images/icons/table.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/table.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/table.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/table.png");
-}
-.oo-ui-icon-tableAddColumnAfter {
-       background-image: url("themes/mediawiki/images/icons/table-insert-column-rtl.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/table-insert-column-rtl.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/table-insert-column-rtl.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/table-insert-column-rtl.png");
-}
-.oo-ui-icon-tableAddColumnBefore {
-       background-image: url("themes/mediawiki/images/icons/table-insert-column-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/table-insert-column-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/table-insert-column-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/table-insert-column-ltr.png");
-}
-.oo-ui-icon-tableAddRowAfter {
-       background-image: url("themes/mediawiki/images/icons/table-insert-row-after.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/table-insert-row-after.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/table-insert-row-after.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/table-insert-row-after.png");
-}
-.oo-ui-icon-tableAddRowBefore {
-       background-image: url("themes/mediawiki/images/icons/table-insert-row-before.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/table-insert-row-before.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/table-insert-row-before.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/table-insert-row-before.png");
-}
-.oo-ui-icon-tableCaption {
-       background-image: url("themes/mediawiki/images/icons/table-caption.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/table-caption.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/table-caption.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/table-caption.png");
-}
-.oo-ui-icon-tableMergeCells {
-       background-image: url("themes/mediawiki/images/icons/table-merge-cells.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/table-merge-cells.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/table-merge-cells.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/table-merge-cells.png");
-}
-.oo-ui-icon-templateAdd {
-       background-image: url("themes/mediawiki/images/icons/templateAdd-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/templateAdd-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/templateAdd-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/templateAdd-ltr.png");
-}
-.oo-ui-icon-translation {
-       background-image: url("themes/mediawiki/images/icons/translation-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/translation-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/translation-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/translation-ltr.png");
-}
-.oo-ui-icon-wikiText {
-       background-image: url("themes/mediawiki/images/icons/wikiText.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/wikiText.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/wikiText.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/wikiText.png");
-}
diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-core.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-core.css
deleted file mode 100644 (file)
index 654562c..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-/*!
- * OOjs UI v0.9.8
- * https://www.mediawiki.org/wiki/OOjs_UI
- *
- * Copyright 2011–2015 OOjs Team and other contributors.
- * Released under the MIT license
- * http://oojs.mit-license.org
- *
- * Date: 2015-04-12T17:19:13Z
- */
-.oo-ui-icon-edit {
-       background-image: url("themes/mediawiki/images/icons/edit-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/edit-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/edit-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/edit-ltr.png");
-}
-.oo-ui-icon-editLock {
-       background-image: url("themes/mediawiki/images/icons/editLock-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/editLock-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/editLock-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/editLock-ltr.png");
-}
-.oo-ui-icon-editUndo {
-       background-image: url("themes/mediawiki/images/icons/editUndo-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/editUndo-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/editUndo-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/editUndo-ltr.png");
-}
-.oo-ui-icon-link {
-       background-image: url("themes/mediawiki/images/icons/link-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/link-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/link-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/link-ltr.png");
-}
-.oo-ui-icon-linkExternal {
-       background-image: url("themes/mediawiki/images/icons/external-link-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/external-link-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/external-link-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/external-link-ltr.png");
-}
-.oo-ui-icon-linkSecure {
-       background-image: url("themes/mediawiki/images/icons/secure-link.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/secure-link.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/secure-link.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/secure-link.png");
-}
diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-list.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-list.css
deleted file mode 100644 (file)
index 8f90358..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-/*!
- * OOjs UI v0.9.8
- * https://www.mediawiki.org/wiki/OOjs_UI
- *
- * Copyright 2011–2015 OOjs Team and other contributors.
- * Released under the MIT license
- * http://oojs.mit-license.org
- *
- * Date: 2015-04-12T17:19:13Z
- */
-.oo-ui-icon-indent {
-       background-image: url("themes/mediawiki/images/icons/indent-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/indent-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/indent-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/indent-ltr.png");
-}
-.oo-ui-icon-listBullet {
-       background-image: url("themes/mediawiki/images/icons/listBullet-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/listBullet-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/listBullet-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/listBullet-ltr.png");
-}
-.oo-ui-icon-listNumbered {
-       background-image: url("themes/mediawiki/images/icons/listNumbered-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/listNumbered-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/listNumbered-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/listNumbered-ltr.png");
-}
-.oo-ui-icon-outdent {
-       background-image: url("themes/mediawiki/images/icons/outdent-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/outdent-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/outdent-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/outdent-ltr.png");
-}
diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-styling.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-styling.css
deleted file mode 100644 (file)
index fa5a369..0000000
+++ /dev/null
@@ -1,495 +0,0 @@
-/*!
- * OOjs UI v0.9.8
- * https://www.mediawiki.org/wiki/OOjs_UI
- *
- * Copyright 2011–2015 OOjs Team and other contributors.
- * Released under the MIT license
- * http://oojs.mit-license.org
- *
- * Date: 2015-04-12T17:19:13Z
- */
-.oo-ui-icon-bigger {
-       background-image: url("themes/mediawiki/images/icons/bigger-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bigger-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bigger-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bigger-ltr.png");
-}
-.oo-ui-icon-smaller {
-       background-image: url("themes/mediawiki/images/icons/smaller-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/smaller-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/smaller-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/smaller-ltr.png");
-}
-.oo-ui-icon-subscript {
-       background-image: url("themes/mediawiki/images/icons/subscript-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/subscript-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/subscript-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/subscript-ltr.png");
-}
-.oo-ui-icon-superscript {
-       background-image: url("themes/mediawiki/images/icons/superscript-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/superscript-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/superscript-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/superscript-ltr.png");
-}
-.oo-ui-icon-bold {
-       background-image: url("themes/mediawiki/images/icons/bold-a.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-a.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-a.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-a.png");
-}
-/* @noflip */
-.oo-ui-icon-bold:lang(ar) {
-       background-image: url("themes/mediawiki/images/icons/bold-arab-ain.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-arab-ain.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-arab-ain.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-arab-ain.png");
-}
-/* @noflip */
-.oo-ui-icon-bold:lang(be) {
-       background-image: url("themes/mediawiki/images/icons/bold-cyrl-te.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-cyrl-te.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-cyrl-te.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-cyrl-te.png");
-}
-/* @noflip */
-.oo-ui-icon-bold:lang(cs) {
-       background-image: url("themes/mediawiki/images/icons/bold-b.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-b.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-b.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-b.png");
-}
-/* @noflip */
-.oo-ui-icon-bold:lang(en) {
-       background-image: url("themes/mediawiki/images/icons/bold-b.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-b.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-b.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-b.png");
-}
-/* @noflip */
-.oo-ui-icon-bold:lang(he) {
-       background-image: url("themes/mediawiki/images/icons/bold-b.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-b.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-b.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-b.png");
-}
-/* @noflip */
-.oo-ui-icon-bold:lang(ml) {
-       background-image: url("themes/mediawiki/images/icons/bold-b.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-b.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-b.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-b.png");
-}
-/* @noflip */
-.oo-ui-icon-bold:lang(pl) {
-       background-image: url("themes/mediawiki/images/icons/bold-b.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-b.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-b.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-b.png");
-}
-/* @noflip */
-.oo-ui-icon-bold:lang(da) {
-       background-image: url("themes/mediawiki/images/icons/bold-f.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-f.png");
-}
-/* @noflip */
-.oo-ui-icon-bold:lang(de) {
-       background-image: url("themes/mediawiki/images/icons/bold-f.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-f.png");
-}
-/* @noflip */
-.oo-ui-icon-bold:lang(hu) {
-       background-image: url("themes/mediawiki/images/icons/bold-f.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-f.png");
-}
-/* @noflip */
-.oo-ui-icon-bold:lang(ksh) {
-       background-image: url("themes/mediawiki/images/icons/bold-f.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-f.png");
-}
-/* @noflip */
-.oo-ui-icon-bold:lang(nn) {
-       background-image: url("themes/mediawiki/images/icons/bold-f.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-f.png");
-}
-/* @noflip */
-.oo-ui-icon-bold:lang(no) {
-       background-image: url("themes/mediawiki/images/icons/bold-f.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-f.png");
-}
-/* @noflip */
-.oo-ui-icon-bold:lang(sv) {
-       background-image: url("themes/mediawiki/images/icons/bold-f.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-f.png");
-}
-/* @noflip */
-.oo-ui-icon-bold:lang(es) {
-       background-image: url("themes/mediawiki/images/icons/bold-n.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-n.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-n.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-n.png");
-}
-/* @noflip */
-.oo-ui-icon-bold:lang(gl) {
-       background-image: url("themes/mediawiki/images/icons/bold-n.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-n.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-n.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-n.png");
-}
-/* @noflip */
-.oo-ui-icon-bold:lang(pt) {
-       background-image: url("themes/mediawiki/images/icons/bold-n.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-n.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-n.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-n.png");
-}
-/* @noflip */
-.oo-ui-icon-bold:lang(eu) {
-       background-image: url("themes/mediawiki/images/icons/bold-l.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-l.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-l.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-l.png");
-}
-/* @noflip */
-.oo-ui-icon-bold:lang(fi) {
-       background-image: url("themes/mediawiki/images/icons/bold-l.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-l.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-l.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-l.png");
-}
-/* @noflip */
-.oo-ui-icon-bold:lang(fa) {
-       background-image: url("themes/mediawiki/images/icons/bold-arab-dad.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-arab-dad.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-arab-dad.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-arab-dad.png");
-}
-/* @noflip */
-.oo-ui-icon-bold:lang(fr) {
-       background-image: url("themes/mediawiki/images/icons/bold-g.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-g.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-g.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-g.png");
-}
-/* @noflip */
-.oo-ui-icon-bold:lang(it) {
-       background-image: url("themes/mediawiki/images/icons/bold-g.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-g.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-g.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-g.png");
-}
-/* @noflip */
-.oo-ui-icon-bold:lang(hy) {
-       background-image: url("themes/mediawiki/images/icons/bold-armn-to.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-armn-to.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-armn-to.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-armn-to.png");
-}
-/* @noflip */
-.oo-ui-icon-bold:lang(ka) {
-       background-image: url("themes/mediawiki/images/icons/bold-geor-man.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-geor-man.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-geor-man.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-geor-man.png");
-}
-/* @noflip */
-.oo-ui-icon-bold:lang(ky) {
-       background-image: url("themes/mediawiki/images/icons/bold-cyrl-zhe.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-cyrl-zhe.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-cyrl-zhe.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-cyrl-zhe.png");
-}
-/* @noflip */
-.oo-ui-icon-bold:lang(ru) {
-       background-image: url("themes/mediawiki/images/icons/bold-cyrl-zhe.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-cyrl-zhe.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-cyrl-zhe.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-cyrl-zhe.png");
-}
-/* @noflip */
-.oo-ui-icon-bold:lang(nl) {
-       background-image: url("themes/mediawiki/images/icons/bold-v.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-v.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-v.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-v.png");
-}
-/* @noflip */
-.oo-ui-icon-bold:lang(os) {
-       background-image: url("themes/mediawiki/images/icons/bold-cyrl-be.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-cyrl-be.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-cyrl-be.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-cyrl-be.png");
-}
-.oo-ui-icon-italic {
-       background-image: url("themes/mediawiki/images/icons/italic-a.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-a.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-a.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-a.png");
-}
-/* @noflip */
-.oo-ui-icon-italic:lang(ar) {
-       background-image: url("themes/mediawiki/images/icons/italic-arab-meem.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-arab-meem.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-arab-meem.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-arab-meem.png");
-}
-/* @noflip */
-.oo-ui-icon-italic:lang(cs) {
-       background-image: url("themes/mediawiki/images/icons/italic-i.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-i.png");
-}
-/* @noflip */
-.oo-ui-icon-italic:lang(en) {
-       background-image: url("themes/mediawiki/images/icons/italic-i.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-i.png");
-}
-/* @noflip */
-.oo-ui-icon-italic:lang(fr) {
-       background-image: url("themes/mediawiki/images/icons/italic-i.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-i.png");
-}
-/* @noflip */
-.oo-ui-icon-italic:lang(he) {
-       background-image: url("themes/mediawiki/images/icons/italic-i.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-i.png");
-}
-/* @noflip */
-.oo-ui-icon-italic:lang(ml) {
-       background-image: url("themes/mediawiki/images/icons/italic-i.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-i.png");
-}
-/* @noflip */
-.oo-ui-icon-italic:lang(pl) {
-       background-image: url("themes/mediawiki/images/icons/italic-i.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-i.png");
-}
-/* @noflip */
-.oo-ui-icon-italic:lang(pt) {
-       background-image: url("themes/mediawiki/images/icons/italic-i.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-i.png");
-}
-/* @noflip */
-.oo-ui-icon-italic:lang(be) {
-       background-image: url("themes/mediawiki/images/icons/italic-k.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-k.png");
-}
-/* @noflip */
-.oo-ui-icon-italic:lang(da) {
-       background-image: url("themes/mediawiki/images/icons/italic-k.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-k.png");
-}
-/* @noflip */
-.oo-ui-icon-italic:lang(de) {
-       background-image: url("themes/mediawiki/images/icons/italic-k.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-k.png");
-}
-/* @noflip */
-.oo-ui-icon-italic:lang(fi) {
-       background-image: url("themes/mediawiki/images/icons/italic-k.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-k.png");
-}
-/* @noflip */
-.oo-ui-icon-italic:lang(ky) {
-       background-image: url("themes/mediawiki/images/icons/italic-k.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-k.png");
-}
-/* @noflip */
-.oo-ui-icon-italic:lang(nn) {
-       background-image: url("themes/mediawiki/images/icons/italic-k.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-k.png");
-}
-/* @noflip */
-.oo-ui-icon-italic:lang(no) {
-       background-image: url("themes/mediawiki/images/icons/italic-k.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-k.png");
-}
-/* @noflip */
-.oo-ui-icon-italic:lang(os) {
-       background-image: url("themes/mediawiki/images/icons/italic-k.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-k.png");
-}
-/* @noflip */
-.oo-ui-icon-italic:lang(sv) {
-       background-image: url("themes/mediawiki/images/icons/italic-k.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-k.png");
-}
-/* @noflip */
-.oo-ui-icon-italic:lang(ru) {
-       background-image: url("themes/mediawiki/images/icons/italic-k.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-k.png");
-}
-/* @noflip */
-.oo-ui-icon-italic:lang(es) {
-       background-image: url("themes/mediawiki/images/icons/italic-c.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-c.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-c.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-c.png");
-}
-/* @noflip */
-.oo-ui-icon-italic:lang(gl) {
-       background-image: url("themes/mediawiki/images/icons/italic-c.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-c.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-c.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-c.png");
-}
-/* @noflip */
-.oo-ui-icon-italic:lang(it) {
-       background-image: url("themes/mediawiki/images/icons/italic-c.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-c.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-c.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-c.png");
-}
-/* @noflip */
-.oo-ui-icon-italic:lang(nl) {
-       background-image: url("themes/mediawiki/images/icons/italic-c.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-c.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-c.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-c.png");
-}
-/* @noflip */
-.oo-ui-icon-italic:lang(eu) {
-       background-image: url("themes/mediawiki/images/icons/italic-e.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-e.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-e.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-e.png");
-}
-/* @noflip */
-.oo-ui-icon-italic:lang(fa) {
-       background-image: url("themes/mediawiki/images/icons/italic-arab-keheh-jeem.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-arab-keheh-jeem.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-arab-keheh-jeem.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-arab-keheh-jeem.png");
-}
-/* @noflip */
-.oo-ui-icon-italic:lang(hu) {
-       background-image: url("themes/mediawiki/images/icons/italic-d.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-d.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-d.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-d.png");
-}
-/* @noflip */
-.oo-ui-icon-italic:lang(hy) {
-       background-image: url("themes/mediawiki/images/icons/italic-armn-sha.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-armn-sha.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-armn-sha.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-armn-sha.png");
-}
-/* @noflip */
-.oo-ui-icon-italic:lang(ksh) {
-       background-image: url("themes/mediawiki/images/icons/italic-s.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-s.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-s.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-s.png");
-}
-/* @noflip */
-.oo-ui-icon-italic:lang(ka) {
-       background-image: url("themes/mediawiki/images/icons/italic-geor-kan.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-geor-kan.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-geor-kan.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-geor-kan.png");
-}
-.oo-ui-icon-strikethrough {
-       background-image: url("themes/mediawiki/images/icons/strikethrough-a.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/strikethrough-a.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/strikethrough-a.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/strikethrough-a.png");
-}
-/* @noflip */
-.oo-ui-icon-strikethrough:lang(en) {
-       background-image: url("themes/mediawiki/images/icons/strikethrough-s.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/strikethrough-s.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/strikethrough-s.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/strikethrough-s.png");
-}
-/* @noflip */
-.oo-ui-icon-strikethrough:lang(fi) {
-       background-image: url("themes/mediawiki/images/icons/strikethrough-y.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/strikethrough-y.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/strikethrough-y.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/strikethrough-y.png");
-}
-.oo-ui-icon-underline {
-       background-image: url("themes/mediawiki/images/icons/underline-a.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/underline-a.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/underline-a.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/underline-a.png");
-}
-/* @noflip */
-.oo-ui-icon-underline:lang(en) {
-       background-image: url("themes/mediawiki/images/icons/underline-u.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/underline-u.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/underline-u.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/underline-u.png");
-}
-.oo-ui-icon-textLanguage {
-       background-image: url("themes/mediawiki/images/icons/language.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/language.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/language.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/language.png");
-}
-.oo-ui-icon-textDirLTR {
-       background-image: url("themes/mediawiki/images/icons/text-dir-lefttoright.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/text-dir-lefttoright.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/text-dir-lefttoright.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/text-dir-lefttoright.png");
-}
-.oo-ui-icon-textDirRTL {
-       background-image: url("themes/mediawiki/images/icons/text-dir-righttoleft.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/text-dir-righttoleft.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/text-dir-righttoleft.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/text-dir-righttoleft.png");
-}
-.oo-ui-icon-textStyle {
-       background-image: url("themes/mediawiki/images/icons/text-style.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/text-style.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/text-style.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/text-style.png");
-}
diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-interactions.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-interactions.css
deleted file mode 100644 (file)
index 70c354d..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-/*!
- * OOjs UI v0.9.8
- * https://www.mediawiki.org/wiki/OOjs_UI
- *
- * Copyright 2011–2015 OOjs Team and other contributors.
- * Released under the MIT license
- * http://oojs.mit-license.org
- *
- * Date: 2015-04-12T17:19:13Z
- */
-.oo-ui-icon-beta {
-       background-image: url("themes/mediawiki/images/icons/beta.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/beta.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/beta.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/beta.png");
-}
-.oo-ui-icon-betaLaunch {
-       background-image: url("themes/mediawiki/images/icons/betaLaunch.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/betaLaunch.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/betaLaunch.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/betaLaunch.png");
-}
-.oo-ui-icon-bookmark {
-       background-image: url("themes/mediawiki/images/icons/bookmark-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bookmark-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bookmark-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bookmark-ltr.png");
-}
-.oo-ui-icon-browser {
-       background-image: url("themes/mediawiki/images/icons/browser-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/browser-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/browser-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/browser-ltr.png");
-}
-.oo-ui-icon-clock {
-       background-image: url("themes/mediawiki/images/icons/clock.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/clock.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/clock.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/clock.png");
-}
-.oo-ui-icon-closeInput {
-       background-image: url("themes/mediawiki/images/icons/closeInput.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/closeInput.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/closeInput.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/closeInput.png");
-}
-.oo-ui-icon-funnel {
-       background-image: url("themes/mediawiki/images/icons/funnel-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/funnel-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/funnel-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/funnel-ltr.png");
-}
-.oo-ui-icon-heart {
-       background-image: url("themes/mediawiki/images/icons/heart.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/heart.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/heart.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/heart.png");
-}
-.oo-ui-icon-key {
-       background-image: url("themes/mediawiki/images/icons/key-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/key-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/key-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/key-ltr.png");
-}
-.oo-ui-icon-keyboard {
-       background-image: url("themes/mediawiki/images/icons/keyboard-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/keyboard-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/keyboard-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/keyboard-ltr.png");
-}
-.oo-ui-icon-logOut {
-       background-image: url("themes/mediawiki/images/icons/logOut-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/logOut-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/logOut-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/logOut-ltr.png");
-}
-.oo-ui-icon-magnifyingGlass {
-       background-image: url("themes/mediawiki/images/icons/magnifyingGlass-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/magnifyingGlass-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/magnifyingGlass-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/magnifyingGlass-ltr.png");
-}
-.oo-ui-icon-newWindow {
-       background-image: url("themes/mediawiki/images/icons/newWindow-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/newWindow-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/newWindow-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/newWindow-ltr.png");
-}
-.oo-ui-icon-printer {
-       background-image: url("themes/mediawiki/images/icons/printer-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/printer-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/printer-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/printer-ltr.png");
-}
-.oo-ui-icon-ribbonPrize {
-       background-image: url("themes/mediawiki/images/icons/ribbonPrize.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/ribbonPrize.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/ribbonPrize.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/ribbonPrize.png");
-}
-.oo-ui-icon-sun {
-       background-image: url("themes/mediawiki/images/icons/sun-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/sun-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/sun-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/sun-ltr.png");
-}
-.oo-ui-icon-watchlist {
-       background-image: url("themes/mediawiki/images/icons/watchlist-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/watchlist-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/watchlist-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/watchlist-ltr.png");
-}
diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-layout.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-layout.css
deleted file mode 100644 (file)
index 4d7c676..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-/*!
- * OOjs UI v0.9.8
- * https://www.mediawiki.org/wiki/OOjs_UI
- *
- * Copyright 2011–2015 OOjs Team and other contributors.
- * Released under the MIT license
- * http://oojs.mit-license.org
- *
- * Date: 2015-04-12T17:19:13Z
- */
-.oo-ui-icon-stripeFlow {
-       background-image: url("themes/mediawiki/images/icons/stripeFlow-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/stripeFlow-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/stripeFlow-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/stripeFlow-ltr.png");
-}
-.oo-ui-icon-stripeSideMenu {
-       background-image: url("themes/mediawiki/images/icons/stripeSideMenu.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/stripeSideMenu.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/stripeSideMenu.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/stripeSideMenu.png");
-}
-.oo-ui-icon-stripeSummary {
-       background-image: url("themes/mediawiki/images/icons/stripeSummary-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/stripeSummary-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/stripeSummary-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/stripeSummary-ltr.png");
-}
-.oo-ui-icon-stripeToC {
-       background-image: url("themes/mediawiki/images/icons/stripeToC-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/stripeToC-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/stripeToC-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/stripeToC-ltr.png");
-}
diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-location.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-location.css
deleted file mode 100644 (file)
index bb4eed9..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-/*!
- * OOjs UI v0.9.8
- * https://www.mediawiki.org/wiki/OOjs_UI
- *
- * Copyright 2011–2015 OOjs Team and other contributors.
- * Released under the MIT license
- * http://oojs.mit-license.org
- *
- * Date: 2015-04-12T17:19:13Z
- */
-.oo-ui-icon-map {
-       background-image: url("themes/mediawiki/images/icons/map-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/map-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/map-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/map-ltr.png");
-}
-.oo-ui-icon-mapPin {
-       background-image: url("themes/mediawiki/images/icons/mapPin.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/mapPin.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/mapPin.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/mapPin.png");
-}
-.oo-ui-icon-mapPinAdd {
-       background-image: url("themes/mediawiki/images/icons/mapPinAdd-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/mapPinAdd-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/mapPinAdd-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/mapPinAdd-ltr.png");
-}
-.oo-ui-icon-wikitrail {
-       background-image: url("themes/mediawiki/images/icons/wikitrail-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/wikitrail-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/wikitrail-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/wikitrail-ltr.png");
-}
diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-media.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-media.css
deleted file mode 100644 (file)
index d67a180..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-/*!
- * OOjs UI v0.9.8
- * https://www.mediawiki.org/wiki/OOjs_UI
- *
- * Copyright 2011–2015 OOjs Team and other contributors.
- * Released under the MIT license
- * http://oojs.mit-license.org
- *
- * Date: 2015-04-12T17:19:13Z
- */
-.oo-ui-icon-image {
-       background-image: url("themes/mediawiki/images/icons/image-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/image-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/image-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/image-ltr.png");
-}
-.oo-ui-icon-imageAdd {
-       background-image: url("themes/mediawiki/images/icons/imageAdd-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/imageAdd-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/imageAdd-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/imageAdd-ltr.png");
-}
-.oo-ui-icon-imageLock {
-       background-image: url("themes/mediawiki/images/icons/imageLock-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/imageLock-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/imageLock-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/imageLock-ltr.png");
-}
-.oo-ui-icon-photoGallery {
-       background-image: url("themes/mediawiki/images/icons/photoGallery-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/photoGallery-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/photoGallery-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/photoGallery-ltr.png");
-}
-.oo-ui-icon-play {
-       background-image: url("themes/mediawiki/images/icons/play-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/play-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/play-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/play-ltr.png");
-}
-.oo-ui-icon-stop {
-       background-image: url("themes/mediawiki/images/icons/stop.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/stop.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/stop.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/stop.png");
-}
diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-moderation.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-moderation.css
deleted file mode 100644 (file)
index d04cccd..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-/*!
- * OOjs UI v0.9.8
- * https://www.mediawiki.org/wiki/OOjs_UI
- *
- * Copyright 2011–2015 OOjs Team and other contributors.
- * Released under the MIT license
- * http://oojs.mit-license.org
- *
- * Date: 2015-04-12T17:19:13Z
- */
-.oo-ui-icon-block {
-       background-image: url("themes/mediawiki/images/icons/block.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/block.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/block.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/block.png");
-}
-.oo-ui-icon-blockUndo {
-       background-image: url("themes/mediawiki/images/icons/blockUndo-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/blockUndo-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/blockUndo-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/blockUndo-ltr.png");
-}
-.oo-ui-icon-flag {
-       background-image: url("themes/mediawiki/images/icons/flag-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/flag-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/flag-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/flag-ltr.png");
-}
-.oo-ui-icon-flagUndo {
-       background-image: url("themes/mediawiki/images/icons/flagUndo-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/flagUndo-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/flagUndo-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/flagUndo-ltr.png");
-}
-.oo-ui-icon-lock {
-       background-image: url("themes/mediawiki/images/icons/lock-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/lock-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/lock-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/lock-ltr.png");
-}
-.oo-ui-icon-star {
-       background-image: url("themes/mediawiki/images/icons/star.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/star.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/star.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/star.png");
-}
-.oo-ui-icon-trash {
-       background-image: url("themes/mediawiki/images/icons/trash.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/trash.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/trash.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/trash.png");
-}
-.oo-ui-icon-trashUndo {
-       background-image: url("themes/mediawiki/images/icons/trashUndo-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/trashUndo-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/trashUndo-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/trashUndo-ltr.png");
-}
-.oo-ui-icon-unLock {
-       background-image: url("themes/mediawiki/images/icons/unLock-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/unLock-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/unLock-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/unLock-ltr.png");
-}
-.oo-ui-icon-unStar {
-       background-image: url("themes/mediawiki/images/icons/unStar.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/unStar.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/unStar.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/unStar.png");
-}
diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-movement.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-movement.css
deleted file mode 100644 (file)
index 0285d2e..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/*!
- * OOjs UI v0.9.8
- * https://www.mediawiki.org/wiki/OOjs_UI
- *
- * Copyright 2011–2015 OOjs Team and other contributors.
- * Released under the MIT license
- * http://oojs.mit-license.org
- *
- * Date: 2015-04-12T17:19:13Z
- */
-.oo-ui-icon-arrowNext {
-       background-image: url("themes/mediawiki/images/icons/arrow-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/arrow-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/arrow-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/arrow-ltr.png");
-}
-.oo-ui-icon-arrowLast {
-       background-image: url("themes/mediawiki/images/icons/arrow-rtl.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/arrow-rtl.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/arrow-rtl.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/arrow-rtl.png");
-}
-.oo-ui-icon-caretNext {
-       background-image: url("themes/mediawiki/images/icons/caret-rtl.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/caret-rtl.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/caret-rtl.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/caret-rtl.png");
-}
-.oo-ui-icon-caretLast {
-       background-image: url("themes/mediawiki/images/icons/caret-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/caret-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/caret-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/caret-ltr.png");
-}
-.oo-ui-icon-caretDown {
-       background-image: url("themes/mediawiki/images/icons/caretDown.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/caretDown.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/caretDown.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/caretDown.png");
-}
-.oo-ui-icon-caretUp {
-       background-image: url("themes/mediawiki/images/icons/caretUp.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/caretUp.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/caretUp.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/caretUp.png");
-}
-.oo-ui-icon-downTriangle {
-       background-image: url("themes/mediawiki/images/icons/downTriangle.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/downTriangle.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/downTriangle.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/downTriangle.png");
-}
-.oo-ui-icon-move {
-       background-image: url("themes/mediawiki/images/icons/move.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/move.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/move.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/move.png");
-}
-.oo-ui-icon-upTriangle {
-       background-image: url("themes/mediawiki/images/icons/upTriangle.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/upTriangle.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/upTriangle.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/upTriangle.png");
-}
diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-user.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-user.css
deleted file mode 100644 (file)
index aa06d4b..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-/*!
- * OOjs UI v0.9.8
- * https://www.mediawiki.org/wiki/OOjs_UI
- *
- * Copyright 2011–2015 OOjs Team and other contributors.
- * Released under the MIT license
- * http://oojs.mit-license.org
- *
- * Date: 2015-04-12T17:19:13Z
- */
-.oo-ui-icon-userActive {
-       background-image: url("themes/mediawiki/images/icons/userActive-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/userActive-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/userActive-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/userActive-ltr.png");
-}
-.oo-ui-icon-userAvatar {
-       background-image: url("themes/mediawiki/images/icons/userAvatar.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/userAvatar.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/userAvatar.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/userAvatar.png");
-}
-.oo-ui-icon-userInactive {
-       background-image: url("themes/mediawiki/images/icons/userInactive-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/userInactive-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/userInactive-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/userInactive-ltr.png");
-}
-.oo-ui-icon-userTalk {
-       background-image: url("themes/mediawiki/images/icons/userTalk-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/userTalk-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/userTalk-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/userTalk-ltr.png");
-}
diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-wikimedia.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-wikimedia.css
deleted file mode 100644 (file)
index b9d36bf..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*!
- * OOjs UI v0.9.8
- * https://www.mediawiki.org/wiki/OOjs_UI
- *
- * Copyright 2011–2015 OOjs Team and other contributors.
- * Released under the MIT license
- * http://oojs.mit-license.org
- *
- * Date: 2015-04-12T17:19:13Z
- */
-.oo-ui-icon-logoCC {
-       background-image: url("themes/mediawiki/images/icons/logo-cc.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/logo-cc.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/logo-cc.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/logo-cc.png");
-}
-.oo-ui-icon-logoWikimediaCommons {
-       background-image: url("themes/mediawiki/images/icons/logo-wikimediaCommons.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/logo-wikimediaCommons.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/logo-wikimediaCommons.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/logo-wikimediaCommons.png");
-}
-.oo-ui-icon-logoWikipedia {
-       background-image: url("themes/mediawiki/images/icons/logo-wikipedia.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/logo-wikipedia.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/logo-wikipedia.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/logo-wikipedia.png");
-}
index 41e2f88..12e80c1 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.9.8
+ * OOjs UI v0.11.3
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2015 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-04-12T17:19:13Z
+ * Date: 2015-05-12T12:15:44Z
  */
 @-webkit-keyframes oo-ui-progressBarWidget-slide {
        from {
 }
 .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active > .oo-ui-labelElement-label,
 .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-       color: #2962cc;
+       color: #1f4999;
        box-shadow: none;
 }
 .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-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: #008c6d;
+       color: #005946;
        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-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active > .oo-ui-labelElement-label,
 .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-       color: #a7170f;
+       color: #73100a;
        box-shadow: none;
 }
 .oo-ui-buttonElement-frameless.oo-ui-widget-disabled > .oo-ui-buttonElement-button {
        border: 1px solid #cdcdcd;
 }
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled > .oo-ui-buttonElement-button:hover {
-       box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2), 0 0.1em 0 0 rgba(0, 0, 0, 0.2);
+       background-color: #ebebeb;
 }
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled > .oo-ui-buttonElement-button:focus {
        box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.2);
 }
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active,
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
-       background-color: #d0d0d0;
-       border-color: #d0d0d0;
+       background-color: #d9d9d9;
+       border-color: #d9d9d9;
        box-shadow: none;
 }
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button {
        color: #347bff;
 }
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:hover {
-       box-shadow: inset 0 -0.2em 0 0 #2962cc, 0 0.1em 0 0 rgba(0, 0, 0, 0.1);
-       border-bottom-color: #2962cc;
+       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-progressive > .oo-ui-buttonElement-button:focus {
-       box-shadow: inset 0 0 0 1px #2962cc;
-       border-color: #2962cc;
+       box-shadow: inset 0 0 0 1px #1f4999;
+       border-color: #1f4999;
 }
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled .oo-ui-buttonElement-button:active,
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
-       color: #2962cc;
-       border-color: #d0d0d0;
+       color: #1f4999;
+       border-color: #1f4999;
        box-shadow: none;
 }
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button {
        color: #00af89;
 }
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:hover {
-       box-shadow: inset 0 -0.2em 0 0 #008c6d, 0 0.1em 0 0 rgba(0, 0, 0, 0.1);
-       border-bottom-color: #008c6d;
+       background-color: rgba(0, 171, 137, 0.1);
+       border-color: rgba(0, 89, 70, 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 #008c6d;
-       border-color: #008c6d;
+       box-shadow: inset 0 0 0 1px #005946;
+       border-color: #005946;
 }
 .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: #008c6d;
-       border-color: #d0d0d0;
+       color: #005946;
+       border-color: #005946;
        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 {
        color: #d11d13;
 }
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:hover {
-       box-shadow: inset 0 -0.2em 0 0 #a7170f, 0 0.1em 0 0 rgba(0, 0, 0, 0.1);
-       border-bottom-color: #a7170f;
+       background-color: rgba(209, 29, 19, 0.1);
+       border-color: rgba(115, 16, 10, 0.5);
 }
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:focus {
-       box-shadow: inset 0 0 0 1px #a7170f;
-       border-color: #a7170f;
+       box-shadow: inset 0 0 0 1px #73100a;
+       border-color: #73100a;
 }
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled .oo-ui-buttonElement-button:active,
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
-       color: #a7170f;
-       border-color: #d0d0d0;
+       color: #73100a;
+       border-color: #73100a;
        box-shadow: none;
 }
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button {
        border-color: #347bff;
 }
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:hover {
-       box-shadow: inset 0 -0.2em 0 0 #2962cc, 0 0.1em 0 0 rgba(0, 0, 0, 0.1);
-       border-bottom-color: #2962cc;
+       background: #2962cc;
+       border-color: #2962cc;
 }
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:focus {
-       box-shadow: inset 0 0 0 1px #2962cc;
-       border-color: #2962cc;
+       box-shadow: inset 0 0 0 1px #ffffff;
+       border-color: #347bff;
 }
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled .oo-ui-buttonElement-button:active,
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
        color: #ffffff;
-       background-color: #2962cc;
-       border-color: #2962cc;
+       background-color: #1f4999;
+       border-color: #1f4999;
        box-shadow: none;
 }
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button {
        border-color: #00af89;
 }
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:hover {
-       box-shadow: inset 0 -0.2em 0 0 #008c6d, 0 0.1em 0 0 rgba(0, 0, 0, 0.1);
-       border-bottom-color: #008c6d;
+       background: #008064;
+       border-color: #008064;
 }
 .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 #008c6d;
-       border-color: #008c6d;
+       box-shadow: inset 0 0 0 1px #ffffff;
+       border-color: #00af89;
 }
 .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: #008c6d;
-       border-color: #008c6d;
+       background-color: #005946;
+       border-color: #005946;
        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 {
        border-color: #d11d13;
 }
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:hover {
-       box-shadow: inset 0 -0.2em 0 0 #a7170f, 0 0.1em 0 0 rgba(0, 0, 0, 0.1);
-       border-bottom-color: #a7170f;
+       background: #8c130d;
+       border-color: #8c130d;
 }
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:focus {
-       box-shadow: inset 0 0 0 1px #a7170f;
-       border-color: #a7170f;
+       box-shadow: inset 0 0 0 1px #ffffff;
+       border-color: #d11d13;
 }
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled .oo-ui-buttonElement-button:active,
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
        color: #ffffff;
-       background-color: #a7170f;
-       border-color: #a7170f;
+       background-color: #73100a;
+       border-color: #73100a;
        box-shadow: none;
 }
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button {
 .oo-ui-bookletLayout-outlinePanel > .oo-ui-outlineControlsWidget {
        box-shadow: 0 0 0.25em rgba(0, 0, 0, 0.25);
 }
+.oo-ui-indexLayout > .oo-ui-menuLayout-menu {
+       height: 3em;
+}
+.oo-ui-indexLayout > .oo-ui-menuLayout-content {
+       top: 3em;
+}
+.oo-ui-indexLayout-stackLayout > .oo-ui-panelLayout {
+       padding: 1.5em;
+}
 .oo-ui-fieldLayout {
        display: block;
        margin-bottom: 1em;
             -o-transition: all ease-in-out 200ms;
                transition: all ease-in-out 200ms;
 }
+.oo-ui-menuLayout-menu {
+       height: 18em;
+       width: 18em;
+}
 .oo-ui-menuLayout-content {
-       top: 0;
-       left: 0;
-       right: 0;
-       bottom: 0;
+       top: 18em;
+       left: 18em;
+       right: 18em;
+       bottom: 18em;
+}
+.oo-ui-menuLayout.oo-ui-menuLayout-hideMenu .oo-ui-menuLayout-menu {
+       width: 0 !important;
+       height: 0 !important;
+       overflow: hidden;
+}
+.oo-ui-menuLayout.oo-ui-menuLayout-hideMenu .oo-ui-menuLayout-content {
+       top: 0 !important;
+       left: 0 !important;
+       right: 0 !important;
+       bottom: 0 !important;
 }
-.oo-ui-menuLayout-top .oo-ui-menuLayout-menu {
+.oo-ui-menuLayout.oo-ui-menuLayout-showMenu.oo-ui-menuLayout-top .oo-ui-menuLayout-menu {
+       width: auto !important;
        left: 0;
        top: 0;
        right: 0;
 }
-.oo-ui-menuLayout-top .oo-ui-menuLayout-content {
+.oo-ui-menuLayout.oo-ui-menuLayout-showMenu.oo-ui-menuLayout-top .oo-ui-menuLayout-content {
        right: 0 !important;
        bottom: 0 !important;
        left: 0 !important;
 }
-.oo-ui-menuLayout-after .oo-ui-menuLayout-menu {
+.oo-ui-menuLayout.oo-ui-menuLayout-showMenu.oo-ui-menuLayout-after .oo-ui-menuLayout-menu {
+       height: auto !important;
        top: 0;
        right: 0;
        bottom: 0;
 }
-.oo-ui-menuLayout-after .oo-ui-menuLayout-content {
+.oo-ui-menuLayout.oo-ui-menuLayout-showMenu.oo-ui-menuLayout-after .oo-ui-menuLayout-content {
        bottom: 0 !important;
        left: 0 !important;
        top: 0 !important;
 }
-.oo-ui-menuLayout-bottom .oo-ui-menuLayout-menu {
+.oo-ui-menuLayout.oo-ui-menuLayout-showMenu.oo-ui-menuLayout-bottom .oo-ui-menuLayout-menu {
+       width: auto !important;
        right: 0;
        bottom: 0;
        left: 0;
 }
-.oo-ui-menuLayout-bottom .oo-ui-menuLayout-content {
+.oo-ui-menuLayout.oo-ui-menuLayout-showMenu.oo-ui-menuLayout-bottom .oo-ui-menuLayout-content {
        left: 0 !important;
        top: 0 !important;
        right: 0 !important;
 }
-.oo-ui-menuLayout-before .oo-ui-menuLayout-menu {
+.oo-ui-menuLayout.oo-ui-menuLayout-showMenu.oo-ui-menuLayout-before .oo-ui-menuLayout-menu {
+       height: auto !important;
        bottom: 0;
        left: 0;
        top: 0;
 }
-.oo-ui-menuLayout-before .oo-ui-menuLayout-content {
+.oo-ui-menuLayout.oo-ui-menuLayout-showMenu.oo-ui-menuLayout-before .oo-ui-menuLayout-content {
        top: 0 !important;
        right: 0 !important;
        bottom: 0 !important;
 .oo-ui-popupTool .oo-ui-popupWidget {
        /* @noflip */
        margin-left: 1.25em;
-       font-size: 0.8em;
 }
 .oo-ui-toolGroupTool > .oo-ui-popupToolGroup {
+       border: 0;
+       border-radius: 0;
        margin: 0;
 }
+.oo-ui-toolGroupTool > .oo-ui-toolGroup {
+       border-right: none;
+}
 .oo-ui-toolGroupTool > .oo-ui-popupToolGroup > .oo-ui-popupToolGroup-handle {
-       height: 1.5em;
-       padding: 0.25em;
+       height: 2.5em;
+       padding: 0.3125em;
 }
 .oo-ui-toolGroupTool > .oo-ui-popupToolGroup > .oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
-       height: 1.5em;
-       width: 1.5em;
-       opacity: 0.8;
+       height: 2.5em;
+       width: 1.875em;
 }
 .oo-ui-toolGroupTool > .oo-ui-popupToolGroup.oo-ui-labelElement > .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
        line-height: 2.1em;
 .oo-ui-toolGroup {
        display: inline-block;
        vertical-align: middle;
-       margin: 0.3em;
+       border-radius: 0;
+       border-right: 1px solid #dddddd;
 }
 .oo-ui-toolGroup-empty {
        display: none;
 }
+.oo-ui-toolGroup .oo-ui-tool-link {
+       text-decoration: none;
+}
 .oo-ui-toolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
        background-position: center center;
        background-repeat: no-repeat;
 .oo-ui-toolbar-narrow .oo-ui-toolGroup + .oo-ui-toolGroup {
        margin-left: 0;
 }
-.oo-ui-toolGroup.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-tool-title {
-       color: #000000;
-}
-.oo-ui-toolGroup.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-tool-accel {
-       color: #888888;
+.oo-ui-toolGroup .oo-ui-toolGroup .oo-ui-widget-enabled {
+       border-right: none !important;
 }
 .oo-ui-barToolGroup > .oo-ui-iconElement-icon,
 .oo-ui-barToolGroup > .oo-ui-labelElement-label {
        display: none;
 }
+.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link {
+       cursor: pointer;
+}
 .oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool {
        display: inline-block;
        position: relative;
 .oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link {
        display: block;
 }
-.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link .oo-ui-iconElement-icon {
-       display: block;
-}
-.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link .oo-ui-tool-accel,
-.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link .oo-ui-tool-title {
+.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link .oo-ui-tool-accel {
        display: none;
 }
-.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-widget-disabled > .oo-ui-tool-link {
-       cursor: default;
+.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-iconElement > .oo-ui-tool-link .oo-ui-iconElement-icon {
+       display: inline-block;
+       vertical-align: top;
 }
-.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link > .oo-ui-tool-title,
-.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link > .oo-ui-tool-accel {
+.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-iconElement > .oo-ui-tool-link .oo-ui-tool-title {
        display: none;
 }
-.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link {
-       cursor: pointer;
+.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-iconElement.oo-ui-tool-with-label > .oo-ui-tool-link .oo-ui-tool-title {
+       display: inline;
+}
+.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-widget-disabled > .oo-ui-tool-link {
+       cursor: default;
 }
 .oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link {
-       height: 1.5em;
-       padding: 0.25em;
+       height: 1.875em;
+       padding: 0.625em;
 }
 .oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link .oo-ui-iconElement-icon {
-       height: 1.5em;
-       width: 1.5em;
-       opacity: 0.8;
+       height: 1.875em;
+       width: 1.875em;
+}
+.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link .oo-ui-tool-title {
+       line-height: 2.1em;
+       padding: 0 0.4em;
+}
+.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-widget-enabled:hover {
+       border-color: rgba(0, 0, 0, 0.2);
+       background-color: #eeeeee;
+}
+.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool > a.oo-ui-tool-link .oo-ui-tool-title {
+       color: #555555;
 }
 .oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-tool-active.oo-ui-widget-enabled {
+       border-color: rgba(0, 0, 0, 0.2);
+       box-shadow: inset 0 0.07em 0.07em 0 rgba(0, 0, 0, 0.07);
+       background-color: #e5e5e5;
+}
+.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-tool-active.oo-ui-widget-enabled:hover {
        background-color: #eeeeee;
 }
+.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-tool-active.oo-ui-widget-enabled + .oo-ui-tool-active.oo-ui-widget-enabled {
+       border-left-color: rgba(0, 0, 0, 0.1);
+}
+.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-widget-disabled > .oo-ui-tool-link .oo-ui-tool-title {
+       color: #cccccc;
+}
 .oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-widget-disabled > .oo-ui-tool-link .oo-ui-iconElement-icon {
        opacity: 0.2;
 }
 .oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-widget-enabled > .oo-ui-tool-link .oo-ui-iconElement-icon {
-       opacity: 0.8;
+       opacity: 0.7;
 }
 .oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-widget-enabled:hover > .oo-ui-tool-link .oo-ui-iconElement-icon {
-       opacity: 1;
+       opacity: 0.9;
 }
-.oo-ui-barToolGroup.oo-ui-widget-disabled > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link .oo-ui-iconElement-icon {
+.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-widget-enabled:active {
+       background-color: #e7e7e7;
+}
+.oo-ui-barToolGroup.oo-ui-widget-disabled > .oo-ui-toolGroup-tools > .oo-ui-tool > a.oo-ui-tool-link .oo-ui-tool-title {
+       color: #cccccc;
+}
+.oo-ui-barToolGroup.oo-ui-widget-disabled > .oo-ui-toolGroup-tools > .oo-ui-tool > a.oo-ui-tool-link .oo-ui-iconElement-icon {
        opacity: 0.2;
 }
 .oo-ui-popupToolGroup {
        position: relative;
-       height: 2em;
+       height: 3.125em;
        min-width: 2em;
 }
 .oo-ui-popupToolGroup-handle {
        width: 100%;
        vertical-align: middle;
        white-space: nowrap;
-       text-decoration: none;
 }
 .oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon,
 .oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-accel,
        padding-left: 3em;
 }
 .oo-ui-toolbar-narrow .oo-ui-popupToolGroup {
-       min-width: 1.5em;
+       min-width: 1.875em;
 }
 .oo-ui-popupToolGroup.oo-ui-iconElement {
-       min-width: 2.5em;
+       min-width: 3.125em;
 }
 .oo-ui-toolbar-narrow .oo-ui-popupToolGroup.oo-ui-iconElement {
-       min-width: 2em;
+       min-width: 2.5em;
 }
 .oo-ui-popupToolGroup.oo-ui-indicatorElement.oo-ui-iconElement {
-       min-width: 3.5em;
+       min-width: 4.375em;
 }
 .oo-ui-toolbar-narrow .oo-ui-popupToolGroup.oo-ui-indicatorElement.oo-ui-iconElement {
-       min-width: 3em;
+       min-width: 3.75em;
 }
 .oo-ui-popupToolGroup.oo-ui-labelElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
        line-height: 2.6em;
-       font-size: 0.8em;
        margin: 0 1em;
 }
 .oo-ui-toolbar-narrow .oo-ui-popupToolGroup.oo-ui-labelElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
        margin-left: 2.5em;
 }
 .oo-ui-popupToolGroup.oo-ui-labelElement.oo-ui-indicatorElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
-       margin-right: 2.25em;
+       margin-right: 2em;
 }
 .oo-ui-toolbar-narrow .oo-ui-popupToolGroup.oo-ui-labelElement.oo-ui-indicatorElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
        margin-right: 1.75em;
 }
+.oo-ui-popupToolGroup.oo-ui-widget-enabled .oo-ui-popupToolGroup-handle:hover {
+       background-color: #eeeeee;
+}
+.oo-ui-popupToolGroup.oo-ui-widget-enabled .oo-ui-popupToolGroup-handle:active {
+       background-color: #e5e5e5;
+}
+.oo-ui-popupToolGroup-handle {
+       padding: 0.3125em;
+       height: 2.5em;
+}
 .oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator {
-       width: 0.75em;
-       height: 0.75em;
-       margin: 0.625em;
+       width: 0.9375em;
+       height: 1.625em;
+       margin: 0.78125em 0.5em;
        top: 0;
        right: 0;
+       opacity: 0.3;
 }
 .oo-ui-toolbar-narrow .oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator {
-       right: -0.25em;
+       right: -0.3125em;
 }
 .oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
-       width: 1.5em;
-       height: 1.5em;
+       width: 1.875em;
+       height: 2.6em;
        margin: 0.25em;
        top: 0;
-       left: 0.25em;
+       left: 0.3125em;
+       opacity: 0.7;
 }
 .oo-ui-toolbar-narrow .oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
        left: 0;
 }
 .oo-ui-popupToolGroup-header {
        line-height: 2.6em;
-       font-size: 0.8em;
        margin: 0 0.6em;
        font-weight: bold;
 }
+.oo-ui-popupToolGroup-active.oo-ui-widget-enabled {
+       border-bottom-left-radius: 0;
+       border-bottom-right-radius: 0;
+       box-shadow: inset 0 0.07em 0.07em 0 rgba(0, 0, 0, 0.07);
+       background-color: #eeeeee;
+}
 .oo-ui-popupToolGroup .oo-ui-toolGroup-tools {
-       top: 2em;
-       background-color: white;
+       top: 3.125em;
+       margin: 0 -1px;
+       border: 1px solid #cccccc;
+       background-color: #ffffff;
+       box-shadow: 0 2px 3px rgba(0, 0, 0, 0.2);
+       min-width: 16em;
 }
 .oo-ui-popupToolGroup .oo-ui-tool-link {
-       padding: 0.25em 0 0.25em 0.25em;
+       padding: 0.4em 0.625em;
+       box-sizing: border-box;
 }
 .oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
-       height: 1.5em;
-       width: 1.5em;
-       min-width: 1.5em;
+       height: 2.5em;
+       width: 1.875em;
+       min-width: 1.875em;
 }
 .oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
        padding-left: 0.5em;
+       color: #000000;
 }
 .oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-accel,
 .oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
        line-height: 2em;
-       font-size: 0.8em;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-accel {
+       color: #888888;
 }
 .oo-ui-listToolGroup .oo-ui-tool {
        display: block;
 .oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link {
        cursor: default;
 }
-.oo-ui-listToolGroup .oo-ui-tool {
-       padding: 0 0.75em 0 0.25em;
+.oo-ui-listToolGroup.oo-ui-popupToolGroup-active {
+       border-color: rgba(0, 0, 0, 0.2);
 }
 .oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover {
+       border-color: rgba(0, 0, 0, 0.2);
        background-color: #eeeeee;
 }
-.oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled,
+.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled:active {
+       background-color: #e7e7e7;
+}
+.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover .oo-ui-tool-link .oo-ui-iconElement-icon {
+       opacity: 0.9;
+}
+.oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled {
+       border-color: rgba(0, 0, 0, 0.1);
+       box-shadow: inset 0 0.07em 0.07em 0 rgba(0, 0, 0, 0.07);
+       background-color: #e5e5e5;
+}
+.oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled + .oo-ui-tool-active.oo-ui-widget-enabled {
+       border-top-color: rgba(0, 0, 0, 0.1);
+}
 .oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled:hover {
-       background-color: #d0d0d0;
+       border-color: rgba(0, 0, 0, 0.2);
+       background-color: #eeeeee;
 }
 .oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-tool-title {
        color: #cccccc;
 .oo-ui-listToolGroup.oo-ui-widget-disabled .oo-ui-iconElement-icon {
        opacity: 0.2;
 }
-.oo-ui-listToolGroup .oo-ui-toolGroup-tools {
-       padding: 0.25em 0 0.25em 0;
-       border: 1px solid #aaaaaa;
-       border-radius: 0.2em;
-       box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2), 0 0.1em 0 0 rgba(0, 0, 0, 0.1);
-}
-.oo-ui-menuToolGroup {
-       border: 1px solid #cccccc;
-       border-radius: 0.1em;
-}
 .oo-ui-menuToolGroup .oo-ui-tool {
        display: block;
 }
        cursor: default;
 }
 .oo-ui-menuToolGroup .oo-ui-popupToolGroup-handle {
-       min-width: 8em;
+       min-width: 10em;
 }
 .oo-ui-toolbar-narrow .oo-ui-menuToolGroup .oo-ui-popupToolGroup-handle {
-       min-width: 6.5em;
-}
-.oo-ui-menuToolGroup .oo-ui-toolGroup-tools {
-       margin-left: -1px;
-       padding: 0.25em 0 0.25em 0;
-       border: 1px solid #aaaaaa;
-       border-radius: 0.2em;
-       border-top-left-radius: 0;
-       box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2), 0 0.1em 0 0 rgba(0, 0, 0, 0.1);
-}
-.oo-ui-menuToolGroup.oo-ui-widget-enabled:hover {
-       border-color: #aaaaaa;
-}
-.oo-ui-menuToolGroup.oo-ui-popupToolGroup-active {
-       border-color: #aaaaaa;
-}
-.oo-ui-menuToolGroup .oo-ui-tool {
-       padding: 0 1em 0 0.25em;
+       min-width: 8.125em;
 }
 .oo-ui-menuToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
        background-image: none;
 }
 .oo-ui-menuToolGroup.oo-ui-widget-disabled {
        color: #cccccc;
-       border-color: #cccccc;
 }
 .oo-ui-menuToolGroup.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator,
 .oo-ui-menuToolGroup.oo-ui-widget-disabled .oo-ui-iconElement-icon {
 }
 .oo-ui-toolbar-bar {
        line-height: 1em;
+       position: relative;
 }
 .oo-ui-toolbar-actions {
        float: right;
 }
+.oo-ui-toolbar-actions .oo-ui-toolbar {
+       display: inline-block;
+}
 .oo-ui-toolbar-tools {
        display: inline;
        white-space: nowrap;
        pointer-events: none;
 }
 .oo-ui-toolbar-bar {
-       border-bottom: 2px solid rgba(0, 0, 0, 0.15);
-       background: #ffffff;
+       border-bottom: 1px solid #cccccc;
+       background-color: #ffffff;
+       box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);
+       font-weight: 500;
+       color: #555555;
 }
 .oo-ui-toolbar-bar .oo-ui-toolbar-bar {
        border: none;
        background: none;
+       box-shadow: none;
 }
-.oo-ui-toolbar-shadow {
-       display: none;
-}
-.oo-ui-selectWidget {
-       border-radius: 2px;
-}
-.oo-ui-selectWidget .oo-ui-buttonOptionWidget .oo-ui-buttonElement-button {
-       border-radius: 0;
-       margin-left: -1px;
-}
-.oo-ui-selectWidget .oo-ui-buttonOptionWidget:first-child .oo-ui-buttonElement-button {
-       border-bottom-left-radius: 2px;
-       border-top-left-radius: 2px;
-       margin-left: 0;
+.oo-ui-toolbar-actions > .oo-ui-buttonElement {
+       margin-top: 0.25em;
+       margin-bottom: 0.25em;
 }
-.oo-ui-selectWidget .oo-ui-buttonOptionWidget:last-child .oo-ui-buttonElement-button {
-       border-bottom-right-radius: 2px;
-       border-top-right-radius: 2px;
+.oo-ui-toolbar-actions > .oo-ui-toolbar,
+.oo-ui-toolbar-actions > .oo-ui-buttonElement:last-child {
+       margin-right: 0.5em;
 }
 .oo-ui-optionWidget {
        position: relative;
 .oo-ui-buttonGroupWidget:last-child {
        margin-right: 0;
 }
-.oo-ui-buttonGroupWidget .oo-ui-buttonWidget {
+.oo-ui-buttonGroupWidget .oo-ui-buttonElement {
        margin-right: 0;
 }
-.oo-ui-buttonGroupWidget .oo-ui-buttonWidget:last-child {
+.oo-ui-buttonGroupWidget .oo-ui-buttonElement:last-child {
        margin-right: 0;
 }
 .oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed .oo-ui-buttonElement-button {
        border-bottom-right-radius: 2px;
        border-top-right-radius: 2px;
 }
+.oo-ui-toggleButtonWidget {
+       display: inline-block;
+       vertical-align: middle;
+       margin-right: 0.5em;
+}
+.oo-ui-toggleButtonWidget:last-child {
+       margin-right: 0;
+}
 .oo-ui-toggleSwitchWidget {
        position: relative;
        display: inline-block;
        border-width: 9px;
 }
 .oo-ui-popupWidget-transitioning .oo-ui-popupWidget-popup {
-       -webkit-transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
-          -moz-transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
-           -ms-transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
-            -o-transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
-               transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
+       -webkit-transition: width 0.1s ease-in-out, height 0.1s ease-in-out, left 0.1s ease-in-out;
+          -moz-transition: width 0.1s ease-in-out, height 0.1s ease-in-out, left 0.1s ease-in-out;
+           -ms-transition: width 0.1s ease-in-out, height 0.1s ease-in-out, left 0.1s ease-in-out;
+            -o-transition: width 0.1s ease-in-out, height 0.1s ease-in-out, left 0.1s ease-in-out;
+               transition: width 0.1s ease-in-out, height 0.1s ease-in-out, left 0.1s ease-in-out;
 }
 .oo-ui-popupWidget-head {
        height: 2.5em;
        border: solid 1px #cccccc;
        box-shadow: inset 0 0 0 0 #347bff;
        border-radius: 0.1em;
-       -webkit-transition: box-shadow 0.1s;
-          -moz-transition: box-shadow 0.1s;
-           -ms-transition: box-shadow 0.1s;
-            -o-transition: box-shadow 0.1s;
-               transition: box-shadow 0.1s;
+       -webkit-transition: box-shadow 0.1s ease-in-out;
+          -moz-transition: box-shadow 0.1s ease-in-out;
+           -ms-transition: box-shadow 0.1s ease-in-out;
+            -o-transition: box-shadow 0.1s ease-in-out;
+               transition: box-shadow 0.1s ease-in-out;
        -webkit-box-sizing: border-box;
           -moz-box-sizing: border-box;
                box-sizing: border-box;
 }
 .oo-ui-textInputWidget.oo-ui-widget-enabled input,
 .oo-ui-textInputWidget.oo-ui-widget-enabled textarea {
-       -webkit-transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1) box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1);
-          -moz-transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1) box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1);
-           -ms-transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1) box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1);
-            -o-transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1) box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1);
-               transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1) box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1);
+       -webkit-transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1);
+          -moz-transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1);
+           -ms-transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1);
+            -o-transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1);
+               transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1);
 }
 .oo-ui-textInputWidget.oo-ui-widget-enabled input:focus,
 .oo-ui-textInputWidget.oo-ui-widget-enabled textarea:focus {
        border-color: #cccccc;
        box-shadow: inset 0 0 0 0.1em #cccccc;
 }
+.oo-ui-textInputWidget.oo-ui-widget-enabled.oo-ui-flaggedElement-invalid input,
+.oo-ui-textInputWidget.oo-ui-widget-enabled.oo-ui-flaggedElement-invalid textarea {
+       border-color: red;
+       box-shadow: inset 0 0 0 0 red;
+}
+.oo-ui-textInputWidget.oo-ui-widget-enabled.oo-ui-flaggedElement-invalid input:focus,
+.oo-ui-textInputWidget.oo-ui-widget-enabled.oo-ui-flaggedElement-invalid textarea:focus {
+       border-color: red;
+       box-shadow: inset 0 0 0 0.1em red;
+}
 .oo-ui-textInputWidget.oo-ui-widget-disabled input,
 .oo-ui-textInputWidget.oo-ui-widget-disabled textarea {
        color: #cccccc;
        display: block;
 }
 .oo-ui-menuOptionWidget.oo-ui-optionWidget-selected {
-       background-color: #999999;
-       color: #ffffff;
+       background-color: #d8e6fe;
+       color: rgba(0, 0, 0, 0.8);
 }
 .oo-ui-menuOptionWidget.oo-ui-optionWidget-selected .oo-ui-iconElement-icon {
        display: none;
        background-color: #eeeeee;
        color: black;
 }
+.oo-ui-menuOptionWidget.oo-ui-optionWidget-selected.oo-ui-menuOptionWidget.oo-ui-optionWidget-highlighted {
+       background-color: #d8e6fe;
+}
 .oo-ui-menuSectionOptionWidget {
        cursor: default;
        padding: 0.33em 0.75em;
        margin: 0.5em 0 0.5em 0.5em;
        opacity: 0.2;
 }
+.oo-ui-tabSelectWidget {
+       text-align: left;
+       white-space: nowrap;
+       overflow: hidden;
+       background-color: #dddddd;
+}
+.oo-ui-tabOptionWidget {
+       display: inline-block;
+       vertical-align: bottom;
+       padding: 0.35em 1em;
+       margin: 0.5em 0 0 0.75em;
+       border: 1px solid transparent;
+       border-bottom: none;
+       border-top-left-radius: 2px;
+       border-top-right-radius: 2px;
+       color: #666666;
+       font-weight: bold;
+}
+.oo-ui-tabOptionWidget.oo-ui-widget-enabled:hover {
+       background-color: rgba(255, 255, 255, 0.3);
+}
+.oo-ui-tabOptionWidget.oo-ui-widget-enabled:active {
+       background-color: rgba(255, 255, 255, 0.8);
+}
+.oo-ui-tabOptionWidget.oo-ui-indicatorElement .oo-ui-labelElement-label {
+       padding-right: 1.5em;
+}
+.oo-ui-tabOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
+       opacity: 0.5;
+}
+.oo-ui-selectWidget-pressed .oo-ui-tabOptionWidget.oo-ui-optionWidget-selected,
+.oo-ui-selectWidget-depressed .oo-ui-tabOptionWidget.oo-ui-optionWidget-selected,
+.oo-ui-tabOptionWidget.oo-ui-optionWidget-selected:hover {
+       background-color: #ffffff;
+       color: #333333;
+}
 .oo-ui-comboBoxWidget {
        display: inline-block;
        position: relative;
 }
 .oo-ui-window {
        background: transparent;
-       font-size: 0.8em;
 }
 .oo-ui-window-frame {
        -webkit-box-sizing: border-box;
diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki.css b/resources/lib/oojs-ui/oojs-ui-mediawiki.css
deleted file mode 100644 (file)
index 76093dd..0000000
+++ /dev/null
@@ -1,3039 +0,0 @@
-/*!
- * OOjs UI v0.9.8
- * https://www.mediawiki.org/wiki/OOjs_UI
- *
- * Copyright 2011–2015 OOjs Team and other contributors.
- * Released under the MIT license
- * http://oojs.mit-license.org
- *
- * Date: 2015-04-12T17:19:13Z
- */
-@-webkit-keyframes oo-ui-progressBarWidget-slide {
-       from {
-               margin-left: -40%;
-       }
-       to {
-               margin-left: 100%;
-       }
-}
-@-moz-keyframes oo-ui-progressBarWidget-slide {
-       from {
-               margin-left: -40%;
-       }
-       to {
-               margin-left: 100%;
-       }
-}
-@-ms-keyframes oo-ui-progressBarWidget-slide {
-       from {
-               margin-left: -40%;
-       }
-       to {
-               margin-left: 100%;
-       }
-}
-@-o-keyframes oo-ui-progressBarWidget-slide {
-       from {
-               margin-left: -40%;
-       }
-       to {
-               margin-left: 100%;
-       }
-}
-@keyframes oo-ui-progressBarWidget-slide {
-       from {
-               margin-left: -40%;
-       }
-       to {
-               margin-left: 100%;
-       }
-}
-/* @noflip */
-.oo-ui-rtl {
-       direction: rtl;
-}
-/* @noflip */
-.oo-ui-ltr {
-       direction: ltr;
-}
-.oo-ui-element-hidden {
-       display: none !important;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-button {
-       cursor: pointer;
-       display: inline-block;
-       vertical-align: middle;
-       font: inherit;
-       white-space: nowrap;
-       -webkit-touch-callout: none;
-       -webkit-user-select: none;
-          -moz-user-select: none;
-           -ms-user-select: none;
-               user-select: none;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon,
-.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
-       display: none;
-}
-.oo-ui-buttonElement.oo-ui-widget-disabled > .oo-ui-buttonElement-button {
-       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 {
-       display: inline-block;
-       vertical-align: middle;
-       background-position: center center;
-       background-repeat: no-repeat;
-}
-.oo-ui-buttonElement-frameless {
-       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 {
-       cursor: default;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-button {
-       font-weight: bold;
-}
-.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-       margin-left: 0;
-}
-.oo-ui-buttonElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
-       width: 0.9375em;
-       height: 0.9375em;
-       margin: 0.46875em;
-}
-.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
-       margin-left: 0.46875em;
-}
-.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-       width: 1.875em;
-       height: 1.875em;
-}
-.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:focus {
-       box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.2), 0 0 0 1px rgba(0, 0, 0, 0.2);
-       outline: none;
-}
-.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button .oo-ui-indicatorElement-indicator {
-       margin-right: 0;
-}
-.oo-ui-buttonElement-frameless.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-       margin-left: 0.25em;
-       margin-right: 0.25em;
-}
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-       color: #555555;
-}
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-       color: #444444;
-}
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:hover > .oo-ui-labelElement-label,
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:focus > .oo-ui-labelElement-label {
-       color: #347bff;
-}
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-       color: #777777;
-}
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active > .oo-ui-labelElement-label,
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-       color: #2962cc;
-       box-shadow: none;
-}
-.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: #00af89;
-}
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-       color: #777777;
-}
-.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: #008c6d;
-       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-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:focus > .oo-ui-labelElement-label {
-       color: #d11d13;
-}
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-       color: #777777;
-}
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active > .oo-ui-labelElement-label,
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-       color: #a7170f;
-       box-shadow: none;
-}
-.oo-ui-buttonElement-frameless.oo-ui-widget-disabled > .oo-ui-buttonElement-button {
-       color: #cccccc;
-}
-.oo-ui-buttonElement-frameless.oo-ui-widget-disabled > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon,
-.oo-ui-buttonElement-frameless.oo-ui-widget-disabled > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
-       opacity: 0.2;
-}
-.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button {
-       margin: 0.1em 0;
-       padding: 0.2em 0.8em;
-       border-radius: 2px;
-       -webkit-transition: background 0.1s ease-in-out, color 0.1s ease-in-out, box-shadow 0.1s ease-in-out;
-          -moz-transition: background 0.1s ease-in-out, color 0.1s ease-in-out, box-shadow 0.1s ease-in-out;
-           -ms-transition: background 0.1s ease-in-out, color 0.1s ease-in-out, box-shadow 0.1s ease-in-out;
-            -o-transition: background 0.1s ease-in-out, color 0.1s ease-in-out, box-shadow 0.1s ease-in-out;
-               transition: background 0.1s ease-in-out, color 0.1s ease-in-out, box-shadow 0.1s ease-in-out;
-}
-.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button:hover,
-.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button:focus {
-       outline: none;
-}
-.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.875em;
-}
-.oo-ui-buttonElement-framed.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-       margin-left: -0.5em;
-       margin-right: -0.5em;
-}
-.oo-ui-buttonElement-framed.oo-ui-iconElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-       margin-right: 0.3em;
-}
-.oo-ui-buttonElement-framed.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
-       /* -0.5 - 0.475 */
-       margin-left: -0.005em;
-       margin-right: -0.005em;
-}
-.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;
-       margin-right: -0.275em;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled > .oo-ui-buttonElement-button {
-       color: #ffffff;
-       background: #dddddd;
-       border: 1px solid #dddddd;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled > .oo-ui-buttonElement-button {
-       color: #555555;
-       background-color: #ffffff;
-       border: 1px solid #cdcdcd;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled > .oo-ui-buttonElement-button:hover {
-       box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2), 0 0.1em 0 0 rgba(0, 0, 0, 0.2);
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled > .oo-ui-buttonElement-button:focus {
-       box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.2);
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active,
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
-       background-color: #d0d0d0;
-       border-color: #d0d0d0;
-       box-shadow: none;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button {
-       background-color: #999999;
-       color: #ffffff;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button {
-       color: #347bff;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:hover {
-       box-shadow: inset 0 -0.2em 0 0 #2962cc, 0 0.1em 0 0 rgba(0, 0, 0, 0.1);
-       border-bottom-color: #2962cc;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:focus {
-       box-shadow: inset 0 0 0 1px #2962cc;
-       border-color: #2962cc;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled .oo-ui-buttonElement-button:active,
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
-       color: #2962cc;
-       border-color: #d0d0d0;
-       box-shadow: none;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button {
-       background-color: #999999;
-       color: #ffffff;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button {
-       color: #00af89;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:hover {
-       box-shadow: inset 0 -0.2em 0 0 #008c6d, 0 0.1em 0 0 rgba(0, 0, 0, 0.1);
-       border-bottom-color: #008c6d;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:focus {
-       box-shadow: inset 0 0 0 1px #008c6d;
-       border-color: #008c6d;
-}
-.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: #008c6d;
-       border-color: #d0d0d0;
-       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 {
-       background-color: #999999;
-       color: #ffffff;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button {
-       color: #d11d13;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:hover {
-       box-shadow: inset 0 -0.2em 0 0 #a7170f, 0 0.1em 0 0 rgba(0, 0, 0, 0.1);
-       border-bottom-color: #a7170f;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:focus {
-       box-shadow: inset 0 0 0 1px #a7170f;
-       border-color: #a7170f;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled .oo-ui-buttonElement-button:active,
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
-       color: #a7170f;
-       border-color: #d0d0d0;
-       box-shadow: none;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button {
-       background-color: #999999;
-       color: #ffffff;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button {
-       color: #ffffff;
-       background-color: #347bff;
-       border-color: #347bff;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:hover {
-       box-shadow: inset 0 -0.2em 0 0 #2962cc, 0 0.1em 0 0 rgba(0, 0, 0, 0.1);
-       border-bottom-color: #2962cc;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:focus {
-       box-shadow: inset 0 0 0 1px #2962cc;
-       border-color: #2962cc;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled .oo-ui-buttonElement-button:active,
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
-       color: #ffffff;
-       background-color: #2962cc;
-       border-color: #2962cc;
-       box-shadow: none;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button {
-       background-color: #999999;
-       color: #ffffff;
-}
-.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;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:hover {
-       box-shadow: inset 0 -0.2em 0 0 #008c6d, 0 0.1em 0 0 rgba(0, 0, 0, 0.1);
-       border-bottom-color: #008c6d;
-}
-.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 #008c6d;
-       border-color: #008c6d;
-}
-.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: #008c6d;
-       border-color: #008c6d;
-       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 {
-       background-color: #999999;
-       color: #ffffff;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button {
-       color: #ffffff;
-       background-color: #d11d13;
-       border-color: #d11d13;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:hover {
-       box-shadow: inset 0 -0.2em 0 0 #a7170f, 0 0.1em 0 0 rgba(0, 0, 0, 0.1);
-       border-bottom-color: #a7170f;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:focus {
-       box-shadow: inset 0 0 0 1px #a7170f;
-       border-color: #a7170f;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled .oo-ui-buttonElement-button:active,
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
-       color: #ffffff;
-       background-color: #a7170f;
-       border-color: #a7170f;
-       box-shadow: none;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button {
-       background-color: #999999;
-       color: #ffffff;
-}
-.oo-ui-clippableElement-clippable {
-       -webkit-box-sizing: border-box;
-          -moz-box-sizing: border-box;
-               box-sizing: border-box;
-}
-.oo-ui-draggableElement {
-       cursor: -webkit-grab -moz-grab, url(images/grab.cur), move;
-       /*
-        * HACK: In order to style horizontally, we must override
-        * OO.ui.OptionWidget's display rule that is currently set
-        * to be 'block'
-        */
-}
-.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-draggableGroupElement-horizontal .oo-ui-draggableElement.oo-ui-optionWidget {
-       display: inline-block;
-}
-.oo-ui-draggableGroupElement-placeholder {
-       position: absolute;
-       display: block;
-       background: rgba(0, 0, 0, 0.4);
-}
-.oo-ui-iconElement .oo-ui-iconElement-icon,
-.oo-ui-iconElement.oo-ui-iconElement-icon {
-       background-size: contain;
-       background-position: center center;
-}
-.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator,
-.oo-ui-indicatorElement.oo-ui-indicatorElement-indicator {
-       background-size: contain;
-       background-position: center center;
-}
-.oo-ui-lookupElement > .oo-ui-menuSelectWidget {
-       z-index: 1;
-       width: 100%;
-}
-.oo-ui-bookletLayout-stackLayout.oo-ui-stackLayout-continuous > .oo-ui-panelLayout-scrollable {
-       overflow-y: hidden;
-}
-.oo-ui-bookletLayout-stackLayout > .oo-ui-panelLayout {
-       width: 100%;
-       -webkit-box-sizing: border-box;
-          -moz-box-sizing: border-box;
-               box-sizing: border-box;
-}
-.oo-ui-bookletLayout-stackLayout > .oo-ui-panelLayout-scrollable {
-       overflow-y: auto;
-}
-.oo-ui-bookletLayout-stackLayout > .oo-ui-panelLayout-padded {
-       padding: 2em;
-}
-.oo-ui-bookletLayout-outlinePanel-editable > .oo-ui-outlineSelectWidget {
-       position: absolute;
-       top: 0;
-       left: 0;
-       right: 0;
-       bottom: 3em;
-       overflow-y: auto;
-}
-.oo-ui-bookletLayout-outlinePanel > .oo-ui-outlineControlsWidget {
-       position: absolute;
-       bottom: 0;
-       left: 0;
-       right: 0;
-}
-.oo-ui-bookletLayout-stackLayout > .oo-ui-panelLayout {
-       padding: 1.5em;
-}
-.oo-ui-bookletLayout-outlinePanel {
-       border-right: 1px solid #dddddd;
-}
-.oo-ui-bookletLayout-outlinePanel > .oo-ui-outlineControlsWidget {
-       box-shadow: 0 0 0.25em rgba(0, 0, 0, 0.25);
-}
-.oo-ui-fieldLayout {
-       display: block;
-       margin-bottom: 1em;
-}
-.oo-ui-fieldLayout:before,
-.oo-ui-fieldLayout:after {
-       content: " ";
-       display: table;
-}
-.oo-ui-fieldLayout:after {
-       clear: both;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label,
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label,
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-fieldLayout-body > .oo-ui-fieldLayout-field,
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-body > .oo-ui-fieldLayout-field {
-       display: block;
-       float: left;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label {
-       text-align: right;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-body {
-       display: table;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label,
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-body > .oo-ui-fieldLayout-field {
-       display: table-cell;
-       vertical-align: middle;
-}
-.oo-ui-fieldLayout.oo-ui-labelElement.oo-ui-fieldLayout-align-top > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label {
-       display: inline-block;
-}
-.oo-ui-fieldLayout > .oo-ui-fieldLayout-help {
-       float: right;
-}
-.oo-ui-fieldLayout > .oo-ui-fieldLayout-help > .oo-ui-popupWidget > .oo-ui-popupWidget-popup {
-       z-index: 1;
-}
-.oo-ui-fieldLayout > .oo-ui-fieldLayout-help .oo-ui-fieldLayout-help-content {
-       padding: 0.5em 0.75em;
-       line-height: 1.5em;
-}
-.oo-ui-fieldLayout:last-child {
-       margin-bottom: 0;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left.oo-ui-labelElement > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label,
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right.oo-ui-labelElement > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label {
-       padding-top: 0.5em;
-       margin-right: 5%;
-       width: 35%;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-fieldLayout-body > .oo-ui-fieldLayout-field,
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-body > .oo-ui-fieldLayout-field {
-       width: 60%;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline.oo-ui-labelElement > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label {
-       padding: 0.5em;
-       padding-left: 1em;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-body > .oo-ui-fieldLayout-field {
-       padding: 0.5em 0;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-top.oo-ui-labelElement > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label {
-       padding: 0.5em 0;
-}
-.oo-ui-fieldLayout > .oo-ui-popupButtonWidget {
-       margin-right: 0;
-       margin-top: 0.25em;
-}
-.oo-ui-fieldLayout > .oo-ui-popupButtonWidget:last-child {
-       margin-right: 0;
-}
-.oo-ui-fieldLayout-disabled .oo-ui-labelElement-label {
-       color: #cccccc;
-}
-.oo-ui-actionFieldLayout-field {
-       display: table;
-       table-layout: fixed;
-       width: 100%;
-}
-.oo-ui-actionFieldLayout-input,
-.oo-ui-actionFieldLayout-button {
-       display: table-cell;
-       vertical-align: middle;
-}
-.oo-ui-actionFieldLayout-input {
-       padding-right: 1em;
-}
-.oo-ui-actionFieldLayout-button {
-       width: 1%;
-       white-space: nowrap;
-}
-.oo-ui-fieldsetLayout {
-       position: relative;
-       margin: 0;
-       padding: 0;
-       border: none;
-}
-.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-iconElement-icon {
-       display: block;
-       position: absolute;
-       background-position: center center;
-       background-repeat: no-repeat;
-}
-.oo-ui-fieldsetLayout.oo-ui-labelElement > .oo-ui-labelElement-label {
-       display: inline-block;
-}
-.oo-ui-fieldsetLayout > .oo-ui-fieldsetLayout-help {
-       float: right;
-}
-.oo-ui-fieldsetLayout > .oo-ui-fieldsetLayout-help > .oo-ui-popupWidget > .oo-ui-popupWidget-popup {
-       z-index: 1;
-}
-.oo-ui-fieldsetLayout > .oo-ui-fieldsetLayout-help .oo-ui-fieldsetLayout-help-content {
-       padding: 0.5em 0.75em;
-       line-height: 1.5em;
-}
-.oo-ui-fieldsetLayout + .oo-ui-fieldsetLayout,
-.oo-ui-fieldsetLayout + .oo-ui-formLayout {
-       margin-top: 2em;
-}
-.oo-ui-fieldsetLayout > .oo-ui-labelElement-label {
-       font-size: 1.1em;
-       margin-bottom: 0.5em;
-       padding: 0.25em 0;
-       font-weight: bold;
-}
-.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-labelElement-label {
-       padding-left: 2em;
-       line-height: 1.8em;
-}
-.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-iconElement-icon {
-       left: 0;
-       top: 0.25em;
-       width: 1.875em;
-       height: 1.875em;
-}
-.oo-ui-fieldsetLayout > .oo-ui-popupButtonWidget {
-       margin-right: 0;
-}
-.oo-ui-fieldsetLayout > .oo-ui-popupButtonWidget:last-child {
-       margin-right: 0;
-}
-.oo-ui-formLayout + .oo-ui-fieldsetLayout,
-.oo-ui-formLayout + .oo-ui-formLayout {
-       margin-top: 2em;
-}
-.oo-ui-menuLayout {
-       position: absolute;
-       top: 0;
-       left: 0;
-       right: 0;
-       bottom: 0;
-}
-.oo-ui-menuLayout-menu,
-.oo-ui-menuLayout-content {
-       position: absolute;
-       -webkit-transition: all ease-in-out 200ms;
-          -moz-transition: all ease-in-out 200ms;
-           -ms-transition: all ease-in-out 200ms;
-            -o-transition: all ease-in-out 200ms;
-               transition: all ease-in-out 200ms;
-}
-.oo-ui-menuLayout-content {
-       top: 0;
-       left: 0;
-       right: 0;
-       bottom: 0;
-}
-.oo-ui-menuLayout-top .oo-ui-menuLayout-menu {
-       left: 0;
-       top: 0;
-       right: 0;
-}
-.oo-ui-menuLayout-top .oo-ui-menuLayout-content {
-       right: 0 !important;
-       bottom: 0 !important;
-       left: 0 !important;
-}
-.oo-ui-menuLayout-after .oo-ui-menuLayout-menu {
-       top: 0;
-       right: 0;
-       bottom: 0;
-}
-.oo-ui-menuLayout-after .oo-ui-menuLayout-content {
-       bottom: 0 !important;
-       left: 0 !important;
-       top: 0 !important;
-}
-.oo-ui-menuLayout-bottom .oo-ui-menuLayout-menu {
-       right: 0;
-       bottom: 0;
-       left: 0;
-}
-.oo-ui-menuLayout-bottom .oo-ui-menuLayout-content {
-       left: 0 !important;
-       top: 0 !important;
-       right: 0 !important;
-}
-.oo-ui-menuLayout-before .oo-ui-menuLayout-menu {
-       bottom: 0;
-       left: 0;
-       top: 0;
-}
-.oo-ui-menuLayout-before .oo-ui-menuLayout-content {
-       top: 0 !important;
-       right: 0 !important;
-       bottom: 0 !important;
-}
-.oo-ui-panelLayout {
-       position: relative;
-}
-.oo-ui-panelLayout-scrollable {
-       overflow-y: auto;
-}
-.oo-ui-panelLayout-expanded {
-       position: absolute;
-       top: 0;
-       left: 0;
-       right: 0;
-       bottom: 0;
-}
-.oo-ui-panelLayout-padded {
-       padding: 1.25em;
-}
-.oo-ui-panelLayout-framed {
-       border: 1px solid #aaaaaa;
-       border-radius: 0.2em;
-       box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2);
-}
-.oo-ui-stackLayout-continuous > .oo-ui-panelLayout {
-       display: block;
-       position: relative;
-}
-.oo-ui-popupTool .oo-ui-popupWidget-popup,
-.oo-ui-popupTool .oo-ui-popupWidget-anchor {
-       z-index: 4;
-}
-.oo-ui-popupTool .oo-ui-popupWidget {
-       /* @noflip */
-       margin-left: 1.25em;
-       font-size: 0.8em;
-}
-.oo-ui-toolGroupTool > .oo-ui-popupToolGroup {
-       margin: 0;
-}
-.oo-ui-toolGroupTool > .oo-ui-popupToolGroup > .oo-ui-popupToolGroup-handle {
-       height: 1.5em;
-       padding: 0.25em;
-}
-.oo-ui-toolGroupTool > .oo-ui-popupToolGroup > .oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
-       height: 1.5em;
-       width: 1.5em;
-       opacity: 0.8;
-}
-.oo-ui-toolGroupTool > .oo-ui-popupToolGroup.oo-ui-labelElement > .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
-       line-height: 2.1em;
-}
-.oo-ui-toolGroup {
-       display: inline-block;
-       vertical-align: middle;
-       margin: 0.3em;
-}
-.oo-ui-toolGroup-empty {
-       display: none;
-}
-.oo-ui-toolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
-       background-position: center center;
-       background-repeat: no-repeat;
-}
-.oo-ui-toolbar-narrow .oo-ui-toolGroup + .oo-ui-toolGroup {
-       margin-left: 0;
-}
-.oo-ui-toolGroup.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-tool-title {
-       color: #000000;
-}
-.oo-ui-toolGroup.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-tool-accel {
-       color: #888888;
-}
-.oo-ui-barToolGroup > .oo-ui-iconElement-icon,
-.oo-ui-barToolGroup > .oo-ui-labelElement-label {
-       display: none;
-}
-.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool {
-       display: inline-block;
-       position: relative;
-       vertical-align: top;
-}
-.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link {
-       display: block;
-}
-.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link .oo-ui-iconElement-icon {
-       display: block;
-}
-.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link .oo-ui-tool-accel,
-.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link .oo-ui-tool-title {
-       display: none;
-}
-.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-widget-disabled > .oo-ui-tool-link {
-       cursor: default;
-}
-.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link > .oo-ui-tool-title,
-.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link > .oo-ui-tool-accel {
-       display: none;
-}
-.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link {
-       cursor: pointer;
-}
-.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link {
-       height: 1.5em;
-       padding: 0.25em;
-}
-.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link .oo-ui-iconElement-icon {
-       height: 1.5em;
-       width: 1.5em;
-       opacity: 0.8;
-}
-.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-tool-active.oo-ui-widget-enabled {
-       background-color: #eeeeee;
-}
-.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-widget-disabled > .oo-ui-tool-link .oo-ui-iconElement-icon {
-       opacity: 0.2;
-}
-.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-widget-enabled > .oo-ui-tool-link .oo-ui-iconElement-icon {
-       opacity: 0.8;
-}
-.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-widget-enabled:hover > .oo-ui-tool-link .oo-ui-iconElement-icon {
-       opacity: 1;
-}
-.oo-ui-barToolGroup.oo-ui-widget-disabled > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link .oo-ui-iconElement-icon {
-       opacity: 0.2;
-}
-.oo-ui-popupToolGroup {
-       position: relative;
-       height: 2em;
-       min-width: 2em;
-}
-.oo-ui-popupToolGroup-handle {
-       display: block;
-       cursor: pointer;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator,
-.oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
-       position: absolute;
-       background-position: center center;
-       background-repeat: no-repeat;
-}
-.oo-ui-popupToolGroup.oo-ui-widget-disabled .oo-ui-popupToolGroup-handle {
-       cursor: default;
-}
-.oo-ui-popupToolGroup .oo-ui-toolGroup-tools {
-       display: none;
-       position: absolute;
-       z-index: 4;
-}
-.oo-ui-popupToolGroup .oo-ui-toolGroup-tools .oo-ui-iconElement-icon {
-       background-repeat: no-repeat;
-       background-position: center center;
-}
-.oo-ui-popupToolGroup-active.oo-ui-widget-enabled > .oo-ui-toolGroup-tools {
-       display: block;
-}
-.oo-ui-popupToolGroup-left > .oo-ui-toolGroup-tools {
-       left: 0;
-}
-.oo-ui-popupToolGroup-right > .oo-ui-toolGroup-tools {
-       right: 0;
-}
-.oo-ui-popupToolGroup .oo-ui-tool-link {
-       display: table;
-       width: 100%;
-       vertical-align: middle;
-       white-space: nowrap;
-       text-decoration: none;
-}
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon,
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-accel,
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
-       display: table-cell;
-       vertical-align: middle;
-}
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-accel {
-       text-align: right;
-}
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-accel:not(:empty) {
-       padding-left: 3em;
-}
-.oo-ui-toolbar-narrow .oo-ui-popupToolGroup {
-       min-width: 1.5em;
-}
-.oo-ui-popupToolGroup.oo-ui-iconElement {
-       min-width: 2.5em;
-}
-.oo-ui-toolbar-narrow .oo-ui-popupToolGroup.oo-ui-iconElement {
-       min-width: 2em;
-}
-.oo-ui-popupToolGroup.oo-ui-indicatorElement.oo-ui-iconElement {
-       min-width: 3.5em;
-}
-.oo-ui-toolbar-narrow .oo-ui-popupToolGroup.oo-ui-indicatorElement.oo-ui-iconElement {
-       min-width: 3em;
-}
-.oo-ui-popupToolGroup.oo-ui-labelElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
-       line-height: 2.6em;
-       font-size: 0.8em;
-       margin: 0 1em;
-}
-.oo-ui-toolbar-narrow .oo-ui-popupToolGroup.oo-ui-labelElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
-       margin: 0 0.5em;
-}
-.oo-ui-popupToolGroup.oo-ui-labelElement.oo-ui-iconElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
-       margin-left: 3em;
-}
-.oo-ui-toolbar-narrow .oo-ui-popupToolGroup.oo-ui-labelElement.oo-ui-iconElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
-       margin-left: 2.5em;
-}
-.oo-ui-popupToolGroup.oo-ui-labelElement.oo-ui-indicatorElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
-       margin-right: 2.25em;
-}
-.oo-ui-toolbar-narrow .oo-ui-popupToolGroup.oo-ui-labelElement.oo-ui-indicatorElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
-       margin-right: 1.75em;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator {
-       width: 0.75em;
-       height: 0.75em;
-       margin: 0.625em;
-       top: 0;
-       right: 0;
-}
-.oo-ui-toolbar-narrow .oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator {
-       right: -0.25em;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
-       width: 1.5em;
-       height: 1.5em;
-       margin: 0.25em;
-       top: 0;
-       left: 0.25em;
-}
-.oo-ui-toolbar-narrow .oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
-       left: 0;
-}
-.oo-ui-popupToolGroup-header {
-       line-height: 2.6em;
-       font-size: 0.8em;
-       margin: 0 0.6em;
-       font-weight: bold;
-}
-.oo-ui-popupToolGroup .oo-ui-toolGroup-tools {
-       top: 2em;
-       background-color: white;
-}
-.oo-ui-popupToolGroup .oo-ui-tool-link {
-       padding: 0.25em 0 0.25em 0.25em;
-}
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
-       height: 1.5em;
-       width: 1.5em;
-       min-width: 1.5em;
-}
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
-       padding-left: 0.5em;
-}
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-accel,
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
-       line-height: 2em;
-       font-size: 0.8em;
-}
-.oo-ui-listToolGroup .oo-ui-tool {
-       display: block;
-       -webkit-box-sizing: border-box;
-          -moz-box-sizing: border-box;
-               box-sizing: border-box;
-}
-.oo-ui-listToolGroup .oo-ui-tool-link {
-       cursor: pointer;
-}
-.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link {
-       cursor: default;
-}
-.oo-ui-listToolGroup .oo-ui-tool {
-       padding: 0 0.75em 0 0.25em;
-}
-.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover {
-       background-color: #eeeeee;
-}
-.oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled,
-.oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled:hover {
-       background-color: #d0d0d0;
-}
-.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-tool-title {
-       color: #cccccc;
-}
-.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-tool-accel {
-       color: #dddddd;
-}
-.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconElement-icon {
-       opacity: 0.2;
-}
-.oo-ui-listToolGroup.oo-ui-widget-disabled {
-       color: #cccccc;
-}
-.oo-ui-listToolGroup.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator,
-.oo-ui-listToolGroup.oo-ui-widget-disabled .oo-ui-iconElement-icon {
-       opacity: 0.2;
-}
-.oo-ui-listToolGroup .oo-ui-toolGroup-tools {
-       padding: 0.25em 0 0.25em 0;
-       border: 1px solid #aaaaaa;
-       border-radius: 0.2em;
-       box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2), 0 0.1em 0 0 rgba(0, 0, 0, 0.1);
-}
-.oo-ui-menuToolGroup {
-       border: 1px solid #cccccc;
-       border-radius: 0.1em;
-}
-.oo-ui-menuToolGroup .oo-ui-tool {
-       display: block;
-}
-.oo-ui-menuToolGroup .oo-ui-tool-link {
-       cursor: pointer;
-}
-.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link {
-       cursor: default;
-}
-.oo-ui-menuToolGroup .oo-ui-popupToolGroup-handle {
-       min-width: 8em;
-}
-.oo-ui-toolbar-narrow .oo-ui-menuToolGroup .oo-ui-popupToolGroup-handle {
-       min-width: 6.5em;
-}
-.oo-ui-menuToolGroup .oo-ui-toolGroup-tools {
-       margin-left: -1px;
-       padding: 0.25em 0 0.25em 0;
-       border: 1px solid #aaaaaa;
-       border-radius: 0.2em;
-       border-top-left-radius: 0;
-       box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2), 0 0.1em 0 0 rgba(0, 0, 0, 0.1);
-}
-.oo-ui-menuToolGroup.oo-ui-widget-enabled:hover {
-       border-color: #aaaaaa;
-}
-.oo-ui-menuToolGroup.oo-ui-popupToolGroup-active {
-       border-color: #aaaaaa;
-}
-.oo-ui-menuToolGroup .oo-ui-tool {
-       padding: 0 1em 0 0.25em;
-}
-.oo-ui-menuToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
-       background-image: none;
-}
-.oo-ui-menuToolGroup .oo-ui-tool-active .oo-ui-tool-link .oo-ui-iconElement-icon {
-       background-image: url("themes/mediawiki/images/icons/check.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/check.png");
-}
-.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover {
-       background-color: #eeeeee;
-}
-.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-tool-title {
-       color: #cccccc;
-}
-.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconElement-icon {
-       opacity: 0.2;
-}
-.oo-ui-menuToolGroup.oo-ui-widget-disabled {
-       color: #cccccc;
-       border-color: #cccccc;
-}
-.oo-ui-menuToolGroup.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator,
-.oo-ui-menuToolGroup.oo-ui-widget-disabled .oo-ui-iconElement-icon {
-       opacity: 0.2;
-}
-.oo-ui-toolbar {
-       clear: both;
-}
-.oo-ui-toolbar-bar {
-       line-height: 1em;
-}
-.oo-ui-toolbar-actions {
-       float: right;
-}
-.oo-ui-toolbar-tools {
-       display: inline;
-       white-space: nowrap;
-}
-.oo-ui-toolbar-narrow .oo-ui-toolbar-tools {
-       white-space: normal;
-}
-.oo-ui-toolbar-tools .oo-ui-tool {
-       white-space: normal;
-}
-.oo-ui-toolbar-tools,
-.oo-ui-toolbar-actions,
-.oo-ui-toolbar-shadow {
-       -webkit-touch-callout: none;
-       -webkit-user-select: none;
-          -moz-user-select: none;
-           -ms-user-select: none;
-               user-select: none;
-}
-.oo-ui-toolbar-actions .oo-ui-popupWidget {
-       -webkit-touch-callout: default;
-       -webkit-user-select: all;
-          -moz-user-select: all;
-           -ms-user-select: all;
-               user-select: all;
-}
-.oo-ui-toolbar-shadow {
-       background-position: left top;
-       background-repeat: repeat-x;
-       position: absolute;
-       width: 100%;
-       pointer-events: none;
-}
-.oo-ui-toolbar-bar {
-       border-bottom: 2px solid rgba(0, 0, 0, 0.15);
-       background: #ffffff;
-}
-.oo-ui-toolbar-bar .oo-ui-toolbar-bar {
-       border: none;
-       background: none;
-}
-.oo-ui-toolbar-shadow {
-       display: none;
-}
-.oo-ui-selectWidget {
-       border-radius: 2px;
-}
-.oo-ui-selectWidget .oo-ui-buttonOptionWidget .oo-ui-buttonElement-button {
-       border-radius: 0;
-       margin-left: -1px;
-}
-.oo-ui-selectWidget .oo-ui-buttonOptionWidget:first-child .oo-ui-buttonElement-button {
-       border-bottom-left-radius: 2px;
-       border-top-left-radius: 2px;
-       margin-left: 0;
-}
-.oo-ui-selectWidget .oo-ui-buttonOptionWidget:last-child .oo-ui-buttonElement-button {
-       border-bottom-right-radius: 2px;
-       border-top-right-radius: 2px;
-}
-.oo-ui-optionWidget {
-       position: relative;
-       display: block;
-       cursor: pointer;
-       padding: 0.25em 0.5em;
-       border: none;
-}
-.oo-ui-optionWidget.oo-ui-widget-disabled {
-       cursor: default;
-}
-.oo-ui-optionWidget.oo-ui-labelElement .oo-ui-labelElement-label {
-       display: block;
-       white-space: nowrap;
-       text-overflow: ellipsis;
-       overflow: hidden;
-}
-.oo-ui-optionWidget-highlighted {
-       background-color: #eeeeee;
-}
-.oo-ui-optionWidget .oo-ui-labelElement-label {
-       line-height: 1.5em;
-}
-.oo-ui-selectWidget-depressed .oo-ui-optionWidget-selected,
-.oo-ui-selectWidget-pressed .oo-ui-optionWidget-pressed,
-.oo-ui-selectWidget-pressed .oo-ui-optionWidget-pressed.oo-ui-optionWidget-highlighted,
-.oo-ui-selectWidget-pressed .oo-ui-optionWidget-pressed.oo-ui-optionWidget-highlighted.oo-ui-optionWidget-selected {
-       background-color: #d0d0d0;
-}
-.oo-ui-optionWidget.oo-ui-widget-disabled {
-       color: #cccccc;
-}
-.oo-ui-decoratedOptionWidget {
-       padding: 0.5em 2em 0.5em 3em;
-}
-.oo-ui-decoratedOptionWidget .oo-ui-iconElement-icon,
-.oo-ui-decoratedOptionWidget .oo-ui-indicatorElement-indicator {
-       position: absolute;
-       background-repeat: no-repeat;
-       background-position: center center;
-}
-.oo-ui-decoratedOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon,
-.oo-ui-decoratedOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
-       top: 0;
-       height: 100%;
-}
-.oo-ui-decoratedOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
-       width: 1.875em;
-       left: 0.5em;
-}
-.oo-ui-decoratedOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
-       width: 0.9375em;
-       right: 0.5em;
-}
-.oo-ui-decoratedOptionWidget.oo-ui-widget-disabled .oo-ui-iconElement-icon,
-.oo-ui-decoratedOptionWidget.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator {
-       opacity: 0.2;
-}
-.oo-ui-buttonSelectWidget {
-       display: inline-block;
-       white-space: nowrap;
-       border-radius: 2px;
-       margin-right: 0.5em;
-}
-.oo-ui-buttonSelectWidget:last-child {
-       margin-right: 0;
-}
-.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget .oo-ui-buttonElement-button {
-       border-radius: 0;
-       margin-left: -1px;
-}
-.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget:first-child .oo-ui-buttonElement-button {
-       border-bottom-left-radius: 2px;
-       border-top-left-radius: 2px;
-       margin-left: 0;
-}
-.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget:last-child .oo-ui-buttonElement-button {
-       border-bottom-right-radius: 2px;
-       border-top-right-radius: 2px;
-}
-.oo-ui-buttonOptionWidget {
-       display: inline-block;
-       padding: 0;
-       background-color: transparent;
-}
-.oo-ui-buttonOptionWidget .oo-ui-buttonElement-button {
-       position: relative;
-}
-.oo-ui-buttonOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon,
-.oo-ui-buttonOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
-       position: static;
-       display: inline-block;
-       vertical-align: middle;
-}
-.oo-ui-buttonOptionWidget .oo-ui-buttonElement-button {
-       height: 1.875em;
-}
-.oo-ui-buttonOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
-       margin-top: 0;
-}
-.oo-ui-buttonOptionWidget.oo-ui-optionWidget-selected,
-.oo-ui-buttonOptionWidget.oo-ui-optionWidget-pressed,
-.oo-ui-buttonOptionWidget.oo-ui-optionWidget-highlighted {
-       background-color: transparent;
-}
-.oo-ui-buttonOptionWidget.oo-ui-widget-disabled .oo-ui-iconElement-icon,
-.oo-ui-buttonOptionWidget.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator {
-       opacity: 1;
-}
-.oo-ui-radioOptionWidget {
-       cursor: default;
-       padding: 0.25em 0;
-       background-color: transparent;
-}
-.oo-ui-radioOptionWidget .oo-ui-radioInputWidget,
-.oo-ui-radioOptionWidget.oo-ui-labelElement .oo-ui-labelElement-label {
-       display: inline-block;
-       vertical-align: middle;
-}
-.oo-ui-radioOptionWidget.oo-ui-optionWidget-selected,
-.oo-ui-radioOptionWidget.oo-ui-optionWidget-pressed,
-.oo-ui-radioOptionWidget.oo-ui-optionWidget-highlighted {
-       background-color: transparent;
-}
-.oo-ui-radioOptionWidget.oo-ui-labelElement .oo-ui-labelElement-label {
-       padding: 0.25em;
-       padding-left: 1em;
-}
-.oo-ui-radioOptionWidget .oo-ui-radioInputWidget {
-       margin-right: 0;
-}
-.oo-ui-labelWidget {
-       display: inline-block;
-}
-.oo-ui-iconWidget {
-       display: inline-block;
-       vertical-align: middle;
-       background-position: center center;
-       background-repeat: no-repeat;
-       line-height: 2.5em;
-       height: 1.875em;
-       width: 1.875em;
-}
-.oo-ui-iconWidget.oo-ui-widget-disabled {
-       opacity: 0.2;
-}
-.oo-ui-indicatorWidget {
-       display: inline-block;
-       vertical-align: middle;
-       background-position: center center;
-       background-repeat: no-repeat;
-       line-height: 2.5em;
-       height: 0.9375em;
-       width: 0.9375em;
-       margin: 0.46875em;
-}
-.oo-ui-indicatorWidget.oo-ui-widget-disabled {
-       opacity: 0.2;
-}
-.oo-ui-buttonWidget {
-       display: inline-block;
-       vertical-align: middle;
-       margin-right: 0.5em;
-}
-.oo-ui-buttonWidget:last-child {
-       margin-right: 0;
-}
-.oo-ui-buttonGroupWidget {
-       display: inline-block;
-       white-space: nowrap;
-       border-radius: 2px;
-       margin-right: 0.5em;
-}
-.oo-ui-buttonGroupWidget:last-child {
-       margin-right: 0;
-}
-.oo-ui-buttonGroupWidget .oo-ui-buttonWidget {
-       margin-right: 0;
-}
-.oo-ui-buttonGroupWidget .oo-ui-buttonWidget:last-child {
-       margin-right: 0;
-}
-.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed .oo-ui-buttonElement-button {
-       border-radius: 0;
-       margin-left: -1px;
-}
-.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed:first-child .oo-ui-buttonElement-button {
-       border-bottom-left-radius: 2px;
-       border-top-left-radius: 2px;
-       margin-left: 0;
-}
-.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed:last-child .oo-ui-buttonElement-button {
-       border-bottom-right-radius: 2px;
-       border-top-right-radius: 2px;
-}
-.oo-ui-toggleSwitchWidget {
-       position: relative;
-       display: inline-block;
-       vertical-align: middle;
-       overflow: hidden;
-       cursor: pointer;
-       -webkit-box-sizing: border-box;
-          -moz-box-sizing: border-box;
-               box-sizing: border-box;
-       -webkit-transform: translateZ(0px);
-          -moz-transform: translateZ(0px);
-           -ms-transform: translateZ(0px);
-            -o-transform: translateZ(0px);
-               transform: translateZ(0px);
-       height: 2em;
-       width: 4em;
-       border-radius: 1em;
-       border: 1px #dddddd solid;
-       margin-right: 0.5em;
-}
-.oo-ui-toggleSwitchWidget.oo-ui-widget-disabled {
-       cursor: default;
-}
-.oo-ui-toggleSwitchWidget-grip {
-       position: absolute;
-       display: block;
-       -webkit-box-sizing: border-box;
-          -moz-box-sizing: border-box;
-               box-sizing: border-box;
-}
-.oo-ui-toggleSwitchWidget .oo-ui-toggleSwitchWidget-glow {
-       position: absolute;
-       top: 0;
-       bottom: 0;
-       right: 0;
-       left: 0;
-       -webkit-touch-callout: none;
-       -webkit-user-select: none;
-          -moz-user-select: none;
-           -ms-user-select: none;
-               user-select: none;
-}
-.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow {
-       display: none;
-}
-.oo-ui-toggleSwitchWidget:last-child {
-       margin-right: 0;
-}
-.oo-ui-toggleSwitchWidget-grip {
-       top: 0.25em;
-       left: 0.25em;
-       width: 1.5em;
-       height: 1.5em;
-       margin-top: -1px;
-       border-radius: 1em;
-       border: 1px #dddddd solid;
-       background-color: #f7f7f7;
-       -webkit-transition: left 0.1s ease-in-out, margin-left 0.1s ease-in-out;
-          -moz-transition: left 0.1s ease-in-out, margin-left 0.1s ease-in-out;
-           -ms-transition: left 0.1s ease-in-out, margin-left 0.1s ease-in-out;
-            -o-transition: left 0.1s ease-in-out, margin-left 0.1s ease-in-out;
-               transition: left 0.1s ease-in-out, margin-left 0.1s ease-in-out;
-}
-.oo-ui-toggleSwitchWidget-glow {
-       border-radius: 1em;
-       background-color: #f7f7f7;
-       -webkit-transition: background-color 0.1s ease-in-out;
-          -moz-transition: background-color 0.1s ease-in-out;
-           -ms-transition: background-color 0.1s ease-in-out;
-            -o-transition: background-color 0.1s ease-in-out;
-               transition: background-color 0.1s ease-in-out;
-}
-.oo-ui-toggleSwitchWidget.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-grip {
-       left: 2.25em;
-       margin-left: -2px;
-}
-.oo-ui-toggleSwitchWidget.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow {
-       display: block;
-}
-.oo-ui-toggleSwitchWidget.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-grip {
-       left: 0.25em;
-       margin-left: 0;
-}
-.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled {
-       border: 1px #cccccc solid;
-}
-.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:hover {
-       border-color: #aaaaaa;
-}
-.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled .oo-ui-toggleSwitchWidget-grip {
-       background-color: #ffffff;
-       border-color: #aaaaaa;
-}
-.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-glow {
-       background-color: #d0d0d0;
-}
-.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow {
-       background-color: #ffffff;
-}
-.oo-ui-progressBarWidget {
-       max-width: 50em;
-       border: 1px solid #cccccc;
-       border-radius: 0.1em;
-       overflow: hidden;
-}
-.oo-ui-progressBarWidget-bar {
-       height: 1em;
-       background: #dddddd;
-       -webkit-transition: width 200ms, margin-left 200ms;
-          -moz-transition: width 200ms, margin-left 200ms;
-           -ms-transition: width 200ms, margin-left 200ms;
-            -o-transition: width 200ms, margin-left 200ms;
-               transition: width 200ms, margin-left 200ms;
-}
-.oo-ui-progressBarWidget-indeterminate .oo-ui-progressBarWidget-bar {
-       -webkit-animation: oo-ui-progressBarWidget-slide 2s infinite linear;
-          -moz-animation: oo-ui-progressBarWidget-slide 2s infinite linear;
-           -ms-animation: oo-ui-progressBarWidget-slide 2s infinite linear;
-            -o-animation: oo-ui-progressBarWidget-slide 2s infinite linear;
-               animation: oo-ui-progressBarWidget-slide 2s infinite linear;
-       width: 40%;
-       margin-left: -10%;
-       border-left-width: 1px;
-}
-.oo-ui-progressBarWidget.oo-ui-widget-disabled {
-       opacity: 0.6;
-}
-.oo-ui-actionWidget.oo-ui-pendingElement-pending {
-       background-image: /* @embed */ url(themes/mediawiki/images/textures/pending.gif);
-}
-.oo-ui-popupWidget {
-       position: absolute;
-       /* @noflip */
-       left: 0;
-}
-.oo-ui-popupWidget-popup {
-       position: relative;
-       overflow: hidden;
-       z-index: 1;
-}
-.oo-ui-popupWidget-anchor {
-       display: none;
-       z-index: 1;
-}
-.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor {
-       display: block;
-       position: absolute;
-       top: 0;
-       /* @noflip */
-       left: 0;
-       background-repeat: no-repeat;
-}
-.oo-ui-popupWidget-head {
-       -webkit-touch-callout: none;
-       -webkit-user-select: none;
-          -moz-user-select: none;
-           -ms-user-select: none;
-               user-select: none;
-}
-.oo-ui-popupWidget-head .oo-ui-buttonWidget {
-       float: right;
-}
-.oo-ui-popupWidget-head .oo-ui-labelElement-label {
-       float: left;
-       cursor: default;
-}
-.oo-ui-popupWidget-body {
-       clear: both;
-       overflow: hidden;
-}
-.oo-ui-popupWidget-popup {
-       border: 1px solid #aaaaaa;
-       border-radius: 0.2em;
-       background-color: #ffffff;
-       box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2);
-}
-.oo-ui-popupWidget-anchored .oo-ui-popupWidget-popup {
-       margin-top: 9px;
-}
-.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor:before,
-.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor:after {
-       content: "";
-       position: absolute;
-       width: 0;
-       height: 0;
-       border-style: solid;
-       border-color: transparent;
-       border-top: 0;
-}
-.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor:before {
-       bottom: -10px;
-       left: -9px;
-       border-bottom-color: #888888;
-       border-width: 10px;
-}
-.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor:after {
-       bottom: -10px;
-       left: -8px;
-       border-bottom-color: #ffffff;
-       border-width: 9px;
-}
-.oo-ui-popupWidget-transitioning .oo-ui-popupWidget-popup {
-       -webkit-transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
-          -moz-transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
-           -ms-transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
-            -o-transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
-               transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
-}
-.oo-ui-popupWidget-head {
-       height: 2.5em;
-}
-.oo-ui-popupWidget-head .oo-ui-buttonWidget {
-       margin: 0.25em;
-}
-.oo-ui-popupWidget-head .oo-ui-labelElement-label {
-       margin: 0.75em 1em;
-}
-.oo-ui-popupWidget-body-padded {
-       padding: 0 1em;
-}
-.oo-ui-popupButtonWidget {
-       position: relative;
-}
-.oo-ui-popupButtonWidget .oo-ui-popupWidget {
-       position: absolute;
-       cursor: auto;
-}
-.oo-ui-popupButtonWidget.oo-ui-buttonElement-frameless > .oo-ui-popupWidget {
-       /* @noflip */
-       left: 1em;
-}
-.oo-ui-popupButtonWidget.oo-ui-buttonElement-framed > .oo-ui-popupWidget {
-       /* @noflip */
-       left: 1.75em;
-}
-.oo-ui-inputWidget {
-       margin-right: 0.5em;
-}
-.oo-ui-inputWidget:last-child {
-       margin-right: 0;
-}
-.oo-ui-buttonInputWidget {
-       display: inline-block;
-       vertical-align: middle;
-}
-.oo-ui-checkboxInputWidget {
-       position: relative;
-       line-height: 1.6em;
-       white-space: nowrap;
-}
-.oo-ui-checkboxInputWidget * {
-       font: inherit;
-       vertical-align: middle;
-}
-.oo-ui-checkboxInputWidget input[type="checkbox"] {
-       opacity: 0;
-       z-index: 1;
-       position: relative;
-       margin: 0;
-       width: 1.6em;
-       height: 1.6em;
-       max-width: none;
-}
-.oo-ui-checkboxInputWidget input[type="checkbox"] + span {
-       cursor: pointer;
-       -webkit-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
-          -moz-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
-           -ms-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
-            -o-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
-               transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
-       -webkit-box-sizing: border-box;
-          -moz-box-sizing: border-box;
-               box-sizing: border-box;
-       position: absolute;
-       left: 0;
-       border-radius: 2px;
-       width: 1.6em;
-       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-repeat: no-repeat;
-       background-position: center center;
-       background-origin: border-box;
-       background-size: 0 0;
-}
-.oo-ui-checkboxInputWidget input[type="checkbox"]:checked + span {
-       background-size: 100% 100%;
-}
-.oo-ui-checkboxInputWidget input[type="checkbox"]:active + span {
-       background-color: #dddddd;
-       border-color: #dddddd;
-}
-.oo-ui-checkboxInputWidget input[type="checkbox"]:focus + span {
-       border-width: 2px;
-}
-.oo-ui-checkboxInputWidget input[type="checkbox"]:focus:hover + span,
-.oo-ui-checkboxInputWidget input[type="checkbox"]:hover + span {
-       border-bottom-width: 3px;
-}
-.oo-ui-checkboxInputWidget input[type="checkbox"]:disabled + span {
-       cursor: default;
-       background-color: #eeeeee;
-       border-color: #eeeeee;
-}
-.oo-ui-checkboxInputWidget input[type="checkbox"]:disabled:checked + span {
-       background-image: url("themes/mediawiki/images/icons/check-invert.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check-invert.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check-invert.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/check-invert.png");
-}
-.oo-ui-dropdownInputWidget {
-       position: relative;
-       vertical-align: middle;
-       -webkit-box-sizing: border-box;
-          -moz-box-sizing: border-box;
-               box-sizing: border-box;
-       width: 100%;
-       max-width: 50em;
-}
-.oo-ui-dropdownInputWidget select {
-       display: inline-block;
-       width: 100%;
-       resize: none;
-       -webkit-box-sizing: border-box;
-          -moz-box-sizing: border-box;
-               box-sizing: border-box;
-}
-.oo-ui-dropdownInputWidget select {
-       height: 2.5em;
-       padding: 0.5em;
-       font-size: inherit;
-       font-family: inherit;
-       -webkit-box-sizing: border-box;
-          -moz-box-sizing: border-box;
-               box-sizing: border-box;
-       border: 1px solid #cccccc;
-}
-.oo-ui-dropdownInputWidget.oo-ui-widget-enabled select:hover,
-.oo-ui-dropdownInputWidget.oo-ui-widget-enabled select:focus {
-       border-color: #aaaaaa;
-       outline: none;
-}
-.oo-ui-dropdownInputWidget.oo-ui-widget-disabled select {
-       color: #cccccc;
-       border-color: #dddddd;
-       background-color: #f3f3f3;
-}
-.oo-ui-radioInputWidget {
-       position: relative;
-       line-height: 1.6em;
-       white-space: nowrap;
-}
-.oo-ui-radioInputWidget * {
-       font: inherit;
-       vertical-align: middle;
-}
-.oo-ui-radioInputWidget input[type="radio"] {
-       opacity: 0;
-       z-index: 1;
-       position: relative;
-       margin: 0;
-       width: 1.6em;
-       height: 1.6em;
-       max-width: none;
-}
-.oo-ui-radioInputWidget input[type="radio"] + span {
-       cursor: pointer;
-       -webkit-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
-          -moz-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
-           -ms-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
-            -o-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
-               transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
-       -webkit-box-sizing: border-box;
-          -moz-box-sizing: border-box;
-               box-sizing: border-box;
-       position: absolute;
-       left: 0;
-       border-radius: 100%;
-       width: 1.6em;
-       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-repeat: no-repeat;
-       background-position: center center;
-       background-origin: border-box;
-       background-size: 0 0;
-}
-.oo-ui-radioInputWidget input[type="radio"]:checked + span {
-       background-size: 100% 100%;
-}
-.oo-ui-radioInputWidget input[type="radio"]:active + span {
-       background-color: #dddddd;
-       border-color: #dddddd;
-}
-.oo-ui-radioInputWidget input[type="radio"]:focus + span {
-       border-width: 2px;
-}
-.oo-ui-radioInputWidget input[type="radio"]:focus:hover + span,
-.oo-ui-radioInputWidget input[type="radio"]:hover + span {
-       border-bottom-width: 3px;
-}
-.oo-ui-radioInputWidget input[type="radio"]:disabled + span {
-       cursor: default;
-       background-color: #eeeeee;
-       border-color: #eeeeee;
-}
-.oo-ui-radioInputWidget input[type="radio"]:disabled:checked + span {
-       background-image: url("themes/mediawiki/images/icons/circle-invert.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/circle-invert.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/circle-invert.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/circle-invert.png");
-}
-.oo-ui-textInputWidget {
-       position: relative;
-       vertical-align: middle;
-       -webkit-box-sizing: border-box;
-          -moz-box-sizing: border-box;
-               box-sizing: border-box;
-       width: 100%;
-       max-width: 50em;
-}
-.oo-ui-textInputWidget input,
-.oo-ui-textInputWidget textarea {
-       display: inline-block;
-       width: 100%;
-       resize: none;
-       -webkit-box-sizing: border-box;
-          -moz-box-sizing: border-box;
-               box-sizing: border-box;
-}
-.oo-ui-textInputWidget > .oo-ui-iconElement-icon,
-.oo-ui-textInputWidget > .oo-ui-indicatorElement-indicator,
-.oo-ui-textInputWidget > .oo-ui-labelElement-label {
-       display: none;
-}
-.oo-ui-textInputWidget.oo-ui-iconElement > .oo-ui-iconElement-icon,
-.oo-ui-textInputWidget.oo-ui-indicatorElement > .oo-ui-indicatorElement-indicator {
-       display: block;
-       position: absolute;
-       top: 0;
-       height: 100%;
-       background-repeat: no-repeat;
-       -webkit-touch-callout: none;
-       -webkit-user-select: none;
-          -moz-user-select: none;
-           -ms-user-select: none;
-               user-select: none;
-}
-.oo-ui-textInputWidget.oo-ui-widget-enabled > .oo-ui-iconElement-icon,
-.oo-ui-textInputWidget.oo-ui-widget-enabled > .oo-ui-indicatorElement-indicator {
-       cursor: pointer;
-}
-.oo-ui-textInputWidget.oo-ui-labelElement > .oo-ui-labelElement-label {
-       display: block;
-}
-.oo-ui-textInputWidget > .oo-ui-iconElement-icon {
-       left: 0;
-}
-.oo-ui-textInputWidget > .oo-ui-indicatorElement-indicator {
-       right: 0;
-}
-.oo-ui-textInputWidget > .oo-ui-labelElement-label {
-       position: absolute;
-       top: 0;
-}
-.oo-ui-textInputWidget-labelPosition-after > .oo-ui-labelElement-label {
-       right: 0;
-}
-.oo-ui-textInputWidget-labelPosition-before > .oo-ui-labelElement-label {
-       left: 0;
-}
-.oo-ui-textInputWidget input,
-.oo-ui-textInputWidget textarea {
-       padding: 0.5em;
-       margin: 0;
-       font-size: inherit;
-       font-family: inherit;
-       background-color: #ffffff;
-       color: black;
-       border: solid 1px #cccccc;
-       box-shadow: inset 0 0 0 0 #347bff;
-       border-radius: 0.1em;
-       -webkit-transition: box-shadow 0.1s;
-          -moz-transition: box-shadow 0.1s;
-           -ms-transition: box-shadow 0.1s;
-            -o-transition: box-shadow 0.1s;
-               transition: box-shadow 0.1s;
-       -webkit-box-sizing: border-box;
-          -moz-box-sizing: border-box;
-               box-sizing: border-box;
-}
-.oo-ui-textInputWidget-decorated input,
-.oo-ui-textInputWidget-decorated textarea {
-       padding-left: 2em;
-}
-.oo-ui-textInputWidget-icon {
-       width: 2em;
-}
-.oo-ui-textInputWidget.oo-ui-widget-enabled input,
-.oo-ui-textInputWidget.oo-ui-widget-enabled textarea {
-       -webkit-transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1) box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1);
-          -moz-transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1) box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1);
-           -ms-transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1) box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1);
-            -o-transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1) box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1);
-               transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1) box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1);
-}
-.oo-ui-textInputWidget.oo-ui-widget-enabled input:focus,
-.oo-ui-textInputWidget.oo-ui-widget-enabled textarea:focus {
-       outline: none;
-       border-color: #347bff;
-       box-shadow: inset 0 0 0 0.1em #347bff;
-}
-.oo-ui-textInputWidget.oo-ui-widget-enabled input[readonly],
-.oo-ui-textInputWidget.oo-ui-widget-enabled textarea[readonly] {
-       color: #777777;
-       text-shadow: 0 1px 1px #ffffff;
-}
-.oo-ui-textInputWidget.oo-ui-widget-enabled input[readonly]:focus,
-.oo-ui-textInputWidget.oo-ui-widget-enabled textarea[readonly]:focus {
-       border-color: #cccccc;
-       box-shadow: inset 0 0 0 0.1em #cccccc;
-}
-.oo-ui-textInputWidget.oo-ui-widget-disabled input,
-.oo-ui-textInputWidget.oo-ui-widget-disabled textarea {
-       color: #cccccc;
-       text-shadow: 0 1px 1px #ffffff;
-       border-color: #dddddd;
-       background-color: #f3f3f3;
-}
-.oo-ui-textInputWidget.oo-ui-widget-disabled .oo-ui-iconElement-icon,
-.oo-ui-textInputWidget.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator {
-       opacity: 0.2;
-}
-.oo-ui-textInputWidget.oo-ui-widget-disabled .oo-ui-labelElement-label {
-       color: #dddddd;
-       text-shadow: 0 1px 1px #ffffff;
-}
-.oo-ui-textInputWidget.oo-ui-pendingElement-pending input,
-.oo-ui-textInputWidget.oo-ui-pendingElement-pending textarea {
-       background-color: transparent;
-       background-image: /* @embed */ url(themes/mediawiki/images/textures/pending.gif);
-}
-.oo-ui-textInputWidget.oo-ui-iconElement input,
-.oo-ui-textInputWidget.oo-ui-iconElement textarea {
-       padding-left: 2.75em;
-}
-.oo-ui-textInputWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
-       left: 0.4em;
-       width: 1.875em;
-       margin-left: 0.1em;
-       height: 100%;
-       background-position: right center;
-}
-.oo-ui-textInputWidget.oo-ui-indicatorElement input,
-.oo-ui-textInputWidget.oo-ui-indicatorElement textarea {
-       padding-right: 1.875em;
-}
-.oo-ui-textInputWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
-       width: 0.9375em;
-       margin: 0 0.775em;
-       height: 100%;
-}
-.oo-ui-textInputWidget > .oo-ui-labelElement-label {
-       padding: 0.4em;
-       line-height: 1.5em;
-       color: #888888;
-}
-.oo-ui-textInputWidget-labelPosition-after.oo-ui-indicatorElement > .oo-ui-labelElement-label {
-       margin-right: 2em;
-}
-.oo-ui-textInputWidget-labelPosition-before.oo-ui-iconElement > .oo-ui-labelElement-label {
-       margin-left: 2.5em;
-}
-.oo-ui-menuSelectWidget {
-       position: absolute;
-       background: #ffffff;
-       margin-top: -1px;
-       border: 1px solid #aaaaaa;
-       border-radius: 0 0 0.2em 0.2em;
-       padding-bottom: 0.25em;
-       box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2), 0 0.1em 0 0 rgba(0, 0, 0, 0.2);
-}
-.oo-ui-menuSelectWidget input {
-       position: absolute;
-       width: 0;
-       height: 0;
-       overflow: hidden;
-       opacity: 0;
-}
-.oo-ui-menuOptionWidget {
-       position: relative;
-       padding: 0.5em 1em;
-}
-.oo-ui-menuOptionWidget .oo-ui-iconElement-icon {
-       display: none;
-}
-.oo-ui-menuOptionWidget.oo-ui-optionWidget-selected {
-       background-color: transparent;
-}
-.oo-ui-menuOptionWidget.oo-ui-optionWidget-selected .oo-ui-iconElement-icon {
-       display: block;
-}
-.oo-ui-menuOptionWidget.oo-ui-optionWidget-selected {
-       background-color: #999999;
-       color: #ffffff;
-}
-.oo-ui-menuOptionWidget.oo-ui-optionWidget-selected .oo-ui-iconElement-icon {
-       display: none;
-}
-.oo-ui-menuOptionWidget.oo-ui-optionWidget-highlighted {
-       background-color: #eeeeee;
-       color: black;
-}
-.oo-ui-menuSectionOptionWidget {
-       cursor: default;
-       padding: 0.33em 0.75em;
-       color: #888888;
-}
-.oo-ui-dropdownWidget {
-       display: inline-block;
-       position: relative;
-       margin: 0.25em 0;
-       width: 100%;
-       max-width: 50em;
-       margin-right: 0.5em;
-}
-.oo-ui-dropdownWidget-handle {
-       width: 100%;
-       display: inline-block;
-       cursor: pointer;
-       -webkit-touch-callout: none;
-       -webkit-user-select: none;
-          -moz-user-select: none;
-           -ms-user-select: none;
-               user-select: none;
-       -webkit-box-sizing: border-box;
-          -moz-box-sizing: border-box;
-               box-sizing: border-box;
-}
-.oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator,
-.oo-ui-dropdownWidget-handle .oo-ui-iconElement-icon {
-       position: absolute;
-       background-position: center center;
-       background-repeat: no-repeat;
-}
-.oo-ui-dropdownWidget > .oo-ui-menuSelectWidget {
-       z-index: 1;
-       width: 100%;
-}
-.oo-ui-dropdownWidget.oo-ui-widget-disabled .oo-ui-dropdownWidget-handle {
-       cursor: default;
-}
-.oo-ui-dropdownWidget:last-child {
-       margin-right: 0;
-}
-.oo-ui-dropdownWidget-handle {
-       height: 2.5em;
-       border: 1px solid #cccccc;
-       border-radius: 0.1em;
-}
-.oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator {
-       right: 0;
-}
-.oo-ui-dropdownWidget-handle .oo-ui-iconElement-icon {
-       left: 0.25em;
-}
-.oo-ui-dropdownWidget-handle .oo-ui-labelElement-label {
-       line-height: 2.5em;
-       margin: 0 1em;
-}
-.oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator {
-       top: 0;
-       width: 0.9375em;
-       height: 0.9375em;
-       margin: 0.775em;
-}
-.oo-ui-dropdownWidget-handle .oo-ui-iconElement-icon {
-       top: 0;
-       width: 1.875em;
-       height: 1.875em;
-       margin: 0.3em;
-}
-.oo-ui-dropdownWidget:hover .oo-ui-dropdownWidget-handle {
-       border-color: #aaaaaa;
-}
-.oo-ui-dropdownWidget.oo-ui-widget-disabled .oo-ui-dropdownWidget-handle {
-       color: #cccccc;
-       text-shadow: 0 1px 1px #ffffff;
-       border-color: #dddddd;
-       background-color: #f3f3f3;
-}
-.oo-ui-dropdownWidget.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator {
-       opacity: 0.2;
-}
-.oo-ui-dropdownWidget.oo-ui-iconElement .oo-ui-dropdownWidget-handle .oo-ui-labelElement-label {
-       margin-left: 3em;
-}
-.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-outlineOptionWidget {
-       position: relative;
-       cursor: pointer;
-       -webkit-touch-callout: none;
-       -webkit-user-select: none;
-          -moz-user-select: none;
-           -ms-user-select: none;
-               user-select: none;
-       font-size: 1.1em;
-       padding: 0.75em;
-}
-.oo-ui-outlineOptionWidget.oo-ui-indicatorElement .oo-ui-labelElement-label {
-       padding-right: 1.5em;
-}
-.oo-ui-outlineOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
-       opacity: 0.5;
-}
-.oo-ui-outlineOptionWidget-level-0 {
-       padding-left: 3.5em;
-}
-.oo-ui-outlineOptionWidget-level-0 .oo-ui-iconElement-icon {
-       left: 1em;
-}
-.oo-ui-outlineOptionWidget-level-1 {
-       padding-left: 5em;
-}
-.oo-ui-outlineOptionWidget-level-1 .oo-ui-iconElement-icon {
-       left: 2.5em;
-}
-.oo-ui-outlineOptionWidget-level-2 {
-       padding-left: 6.5em;
-}
-.oo-ui-outlineOptionWidget-level-2 .oo-ui-iconElement-icon {
-       left: 4em;
-}
-.oo-ui-selectWidget-depressed .oo-ui-outlineOptionWidget.oo-ui-optionWidget-selected {
-       background-color: #d0d0d0;
-       text-shadow: 0 1px 1px #ffffff;
-}
-.oo-ui-outlineOptionWidget.oo-ui-flaggedElement-important {
-       font-weight: bold;
-}
-.oo-ui-outlineOptionWidget.oo-ui-flaggedElement-placeholder {
-       font-style: italic;
-}
-.oo-ui-outlineOptionWidget.oo-ui-flaggedElement-empty .oo-ui-iconElement-icon {
-       opacity: 0.5;
-}
-.oo-ui-outlineOptionWidget.oo-ui-flaggedElement-empty .oo-ui-labelElement-label {
-       color: #777777;
-}
-.oo-ui-outlineControlsWidget {
-       height: 3em;
-       background-color: #ffffff;
-}
-.oo-ui-outlineControlsWidget-items,
-.oo-ui-outlineControlsWidget-movers {
-       float: left;
-       -webkit-box-sizing: border-box;
-          -moz-box-sizing: border-box;
-               box-sizing: border-box;
-}
-.oo-ui-outlineControlsWidget > .oo-ui-iconElement-icon {
-       float: left;
-       background-position: right center;
-       background-repeat: no-repeat;
-}
-.oo-ui-outlineControlsWidget-items {
-       float: left;
-}
-.oo-ui-outlineControlsWidget-items .oo-ui-buttonWidget {
-       float: left;
-}
-.oo-ui-outlineControlsWidget-movers {
-       float: right;
-}
-.oo-ui-outlineControlsWidget-movers .oo-ui-buttonWidget {
-       float: right;
-}
-.oo-ui-outlineControlsWidget-items,
-.oo-ui-outlineControlsWidget-movers {
-       height: 2em;
-       margin: 0.5em 0.5em 0.5em 0;
-       padding: 0;
-}
-.oo-ui-outlineControlsWidget > .oo-ui-iconElement-icon {
-       width: 1.5em;
-       height: 2em;
-       margin: 0.5em 0 0.5em 0.5em;
-       opacity: 0.2;
-}
-.oo-ui-comboBoxWidget {
-       display: inline-block;
-       position: relative;
-       width: 100%;
-       max-width: 50em;
-       margin-right: 0.5em;
-}
-.oo-ui-comboBoxWidget > .oo-ui-menuSelectWidget {
-       z-index: 1;
-       width: 100%;
-}
-.oo-ui-comboBoxWidget:last-child {
-       margin-right: 0;
-}
-.oo-ui-comboBoxWidget .oo-ui-textInputWidget input,
-.oo-ui-comboBoxWidget .oo-ui-textInputWidget textarea {
-       height: 2.35em;
-}
-.oo-ui-searchWidget-query {
-       position: absolute;
-       top: 0;
-       left: 0;
-       right: 0;
-}
-.oo-ui-searchWidget-query .oo-ui-textInputWidget {
-       width: 100%;
-}
-.oo-ui-searchWidget-results {
-       position: absolute;
-       bottom: 0;
-       left: 0;
-       right: 0;
-       overflow-x: hidden;
-       overflow-y: auto;
-}
-.oo-ui-searchWidget-query {
-       height: 4em;
-       padding: 0 1em;
-       border-bottom: 1px solid #cccccc;
-}
-.oo-ui-searchWidget-query .oo-ui-textInputWidget {
-       margin: 0.75em 0;
-}
-.oo-ui-searchWidget-results {
-       top: 4em;
-       padding: 1em;
-       line-height: 0;
-}
-.oo-ui-window {
-       background: transparent;
-       font-size: 0.8em;
-}
-.oo-ui-window-frame {
-       -webkit-box-sizing: border-box;
-          -moz-box-sizing: border-box;
-               box-sizing: border-box;
-}
-.oo-ui-window-content:focus {
-       outline: none;
-}
-.oo-ui-window-head,
-.oo-ui-window-foot {
-       -webkit-touch-callout: none;
-       -webkit-user-select: none;
-          -moz-user-select: none;
-           -ms-user-select: none;
-               user-select: none;
-}
-.oo-ui-window-body {
-       margin: 0;
-       padding: 0;
-       background: none;
-}
-.oo-ui-window-overlay {
-       position: absolute;
-       top: 0;
-       /* @noflip */
-       left: 0;
-}
-.oo-ui-dialog-content > .oo-ui-window-head,
-.oo-ui-dialog-content > .oo-ui-window-body,
-.oo-ui-dialog-content > .oo-ui-window-foot {
-       position: absolute;
-       left: 0;
-       right: 0;
-       overflow: hidden;
-       -webkit-box-sizing: border-box;
-          -moz-box-sizing: border-box;
-               box-sizing: border-box;
-}
-.oo-ui-dialog-content > .oo-ui-window-head {
-       z-index: 1;
-       top: 0;
-}
-.oo-ui-dialog-content > .oo-ui-window-body {
-       z-index: 2;
-       top: 0;
-       bottom: 0;
-}
-.oo-ui-dialog-content > .oo-ui-window-foot {
-       z-index: 1;
-       bottom: 0;
-}
-.oo-ui-dialog-content > .oo-ui-window-body {
-       outline: 1px solid #aaaaaa;
-}
-.oo-ui-messageDialog-actions-horizontal {
-       display: table;
-       table-layout: fixed;
-       width: 100%;
-}
-.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget {
-       display: table-cell;
-       width: 1%;
-}
-.oo-ui-messageDialog-actions-vertical {
-       display: block;
-}
-.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget {
-       display: block;
-       overflow: hidden;
-       text-overflow: ellipsis;
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget {
-       position: relative;
-       text-align: center;
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-buttonElement-button {
-       display: block;
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-labelElement-label {
-       position: relative;
-       top: auto;
-       bottom: auto;
-       display: inline;
-       white-space: nowrap;
-}
-.oo-ui-messageDialog-title,
-.oo-ui-messageDialog-message {
-       display: block;
-       text-align: center;
-       padding-top: 0.5em;
-}
-.oo-ui-messageDialog-title {
-       font-size: 1.5em;
-       line-height: 1em;
-       color: #000000;
-}
-.oo-ui-messageDialog-message {
-       font-size: 0.9em;
-       line-height: 1.25em;
-       color: #666666;
-}
-.oo-ui-messageDialog-message-verbose {
-       font-size: 1.1em;
-       line-height: 1.5em;
-       text-align: left;
-}
-.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget {
-       border-right: 1px solid #e5e5e5;
-}
-.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget:last-child {
-       border-right-width: 0;
-}
-.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget {
-       border-bottom: 1px solid #e5e5e5;
-}
-.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget:last-child {
-       border-bottom-width: 0;
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget {
-       height: 3.4em;
-}
-.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);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget:active {
-       background-color: rgba(0, 0, 0, 0.1);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-progressive:hover {
-       background-color: rgba(8, 126, 204, 0.05);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-progressive:active {
-       background-color: rgba(8, 126, 204, 0.1);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-progressive .oo-ui-labelElement-label {
-       font-weight: bold;
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:hover {
-       background-color: rgba(118, 171, 54, 0.05);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:active {
-       background-color: rgba(118, 171, 54, 0.1);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:hover {
-       background-color: rgba(212, 83, 83, 0.05);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:active {
-       background-color: rgba(212, 83, 83, 0.1);
-}
-.oo-ui-processDialog-location {
-       overflow: hidden;
-       text-overflow: ellipsis;
-       white-space: nowrap;
-}
-.oo-ui-processDialog-title {
-       display: inline;
-       padding: 0;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget {
-       white-space: nowrap;
-}
-.oo-ui-processDialog-actions-safe,
-.oo-ui-processDialog-actions-primary {
-       position: absolute;
-       top: 0;
-       bottom: 0;
-}
-.oo-ui-processDialog-actions-safe {
-       left: 0;
-}
-.oo-ui-processDialog-actions-primary {
-       right: 0;
-}
-.oo-ui-processDialog-errors {
-       position: absolute;
-       top: 0;
-       left: 0;
-       right: 0;
-       bottom: 0;
-       z-index: 2;
-       overflow-x: hidden;
-       overflow-y: auto;
-}
-.oo-ui-processDialog-content .oo-ui-window-head {
-       height: 3.4em;
-}
-.oo-ui-processDialog-content .oo-ui-window-head.oo-ui-pendingElement-pending {
-       background-image: /* @embed */ url(themes/mediawiki/images/textures/pending.gif);
-}
-.oo-ui-processDialog-content .oo-ui-window-body {
-       top: 3.4em;
-       outline: 1px solid rgba(0, 0, 0, 0.2);
-}
-.oo-ui-processDialog-navigation {
-       position: relative;
-       height: 3.4em;
-       padding: 0 1em;
-}
-.oo-ui-processDialog-location {
-       padding: 0.75em 0;
-       height: 1.875em;
-       cursor: default;
-       text-align: center;
-}
-.oo-ui-processDialog-title {
-       font-weight: bold;
-       line-height: 1.875em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-buttonElement-button {
-       min-width: 1.875em;
-       min-height: 1.875em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-labelElement-label,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-labelElement-label,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-labelElement-label {
-       line-height: 1.875em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
-       margin-top: -0.125em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-framed,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonElement-framed {
-       margin: 0.75em 0 0.75em 0.75em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button {
-       padding: 0 1em;
-       vertical-align: middle;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget:hover,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget:hover {
-       background-color: rgba(0, 0, 0, 0.05);
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget:active,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget:active {
-       background-color: rgba(0, 0, 0, 0.1);
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-framed,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed {
-       margin: 0.75em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button {
-       /* Adjust for border so text aligns with title */
-       margin: -1px;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-progressive:hover,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-progressive:hover {
-       background-color: rgba(8, 126, 204, 0.05);
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-progressive:active,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-progressive:active {
-       background-color: rgba(8, 126, 204, 0.1);
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-progressive .oo-ui-labelElement-label,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-progressive .oo-ui-labelElement-label {
-       font-weight: bold;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:hover,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:hover {
-       background-color: rgba(118, 171, 54, 0.05);
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:active,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:active {
-       background-color: rgba(118, 171, 54, 0.1);
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:hover,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:hover {
-       background-color: rgba(212, 83, 83, 0.05);
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:active,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:active {
-       background-color: rgba(212, 83, 83, 0.1);
-}
-.oo-ui-processDialog > .oo-ui-window-frame {
-       min-height: 5em;
-}
-.oo-ui-processDialog-errors {
-       background-color: rgba(255, 255, 255, 0.9);
-       padding: 3em 3em 1.5em 3em;
-       text-align: center;
-}
-.oo-ui-processDialog-errors .oo-ui-buttonWidget {
-       margin: 2em 1em 2em 1em;
-}
-.oo-ui-processDialog-errors-title {
-       font-size: 1.5em;
-       color: #000000;
-       margin-bottom: 2em;
-}
-.oo-ui-processDialog-error {
-       text-align: left;
-       margin: 1em;
-       padding: 1em;
-       border: 1px solid #ff9e9e;
-       background-color: #fff7f7;
-       border-radius: 0.25em;
-}
-.oo-ui-windowManager-modal > .oo-ui-dialog {
-       position: fixed;
-       width: 0;
-       height: 0;
-       overflow: hidden;
-}
-.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-active {
-       width: auto;
-       height: auto;
-       top: 0;
-       right: 0;
-       bottom: 0;
-       left: 0;
-       padding: 1em;
-}
-.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-setup > .oo-ui-window-frame {
-       position: absolute;
-       right: 0;
-       left: 0;
-       margin: auto;
-       overflow: hidden;
-       max-width: 100%;
-       max-height: 100%;
-}
-.oo-ui-windowManager-fullscreen > .oo-ui-dialog > .oo-ui-window-frame {
-       width: 100%;
-       height: 100%;
-       top: 0;
-       bottom: 0;
-}
-.oo-ui-windowManager-modal > .oo-ui-dialog {
-       background-color: rgba(255, 255, 255, 0.5);
-       opacity: 0;
-       -webkit-transition: opacity 250ms ease-in-out;
-          -moz-transition: opacity 250ms ease-in-out;
-           -ms-transition: opacity 250ms ease-in-out;
-            -o-transition: opacity 250ms ease-in-out;
-               transition: opacity 250ms ease-in-out;
-}
-.oo-ui-windowManager-modal > .oo-ui-dialog > .oo-ui-window-frame {
-       top: 1em;
-       bottom: 1em;
-       background-color: #ffffff;
-       opacity: 0;
-       -webkit-transform: scale(0.5);
-          -moz-transform: scale(0.5);
-           -ms-transform: scale(0.5);
-            -o-transform: scale(0.5);
-               transform: scale(0.5);
-       -webkit-transition: all 250ms ease-in-out;
-          -moz-transition: all 250ms ease-in-out;
-           -ms-transition: all 250ms ease-in-out;
-            -o-transition: all 250ms ease-in-out;
-               transition: all 250ms ease-in-out;
-}
-.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready {
-       /* Fade window overlay */
-       opacity: 1;
-}
-.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready > .oo-ui-window-frame {
-       /* Fade frame */
-       opacity: 1;
-       -webkit-transform: scale(1);
-          -moz-transform: scale(1);
-           -ms-transform: scale(1);
-            -o-transform: scale(1);
-               transform: scale(1);
-}
-.oo-ui-windowManager-modal.oo-ui-windowManager-floating > .oo-ui-dialog > .oo-ui-window-frame {
-       border: 1px solid #aaaaaa;
-       border-radius: 0.2em;
-       box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2);
-}
-
-.oo-ui-icon-add {
-       background-image: url("themes/mediawiki/images/icons/add.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/add.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/add.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/add.png");
-}
-.oo-ui-image-constructive .oo-ui-icon-add,
-.oo-ui-image-constructive.oo-ui-icon-add {
-       background-image: url("themes/mediawiki/images/icons/add-constructive.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/add-constructive.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/add-constructive.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/add-constructive.png");
-}
-.oo-ui-image-invert .oo-ui-icon-add,
-.oo-ui-image-invert.oo-ui-icon-add {
-       background-image: url("themes/mediawiki/images/icons/add-invert.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/add-invert.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/add-invert.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/add-invert.png");
-}
-.oo-ui-icon-advanced {
-       background-image: url("themes/mediawiki/images/icons/advanced.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/advanced.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/advanced.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/advanced.png");
-}
-.oo-ui-image-invert .oo-ui-icon-advanced,
-.oo-ui-image-invert.oo-ui-icon-advanced {
-       background-image: url("themes/mediawiki/images/icons/advanced-invert.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/advanced-invert.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/advanced-invert.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/advanced-invert.png");
-}
-.oo-ui-icon-alert {
-       background-image: url("themes/mediawiki/images/icons/alert.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/alert.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/alert.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/alert.png");
-}
-.oo-ui-image-warning .oo-ui-icon-alert,
-.oo-ui-image-warning.oo-ui-icon-alert {
-       background-image: url("themes/mediawiki/images/icons/alert-warning.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/alert-warning.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/alert-warning.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/alert-warning.png");
-}
-.oo-ui-image-invert .oo-ui-icon-alert,
-.oo-ui-image-invert.oo-ui-icon-alert {
-       background-image: url("themes/mediawiki/images/icons/alert-invert.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/alert-invert.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/alert-invert.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/alert-invert.png");
-}
-.oo-ui-icon-check {
-       background-image: url("themes/mediawiki/images/icons/check.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/check.png");
-}
-.oo-ui-image-constructive .oo-ui-icon-check,
-.oo-ui-image-constructive.oo-ui-icon-check {
-       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");
-}
-.oo-ui-image-progressive .oo-ui-icon-check,
-.oo-ui-image-progressive.oo-ui-icon-check {
-       background-image: url("themes/mediawiki/images/icons/check-progressive.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check-progressive.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check-progressive.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/check-progressive.png");
-}
-.oo-ui-image-invert .oo-ui-icon-check,
-.oo-ui-image-invert.oo-ui-icon-check {
-       background-image: url("themes/mediawiki/images/icons/check-invert.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check-invert.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check-invert.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/check-invert.png");
-}
-.oo-ui-icon-circle {
-       background-image: url("themes/mediawiki/images/icons/circle.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/circle.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/circle.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/circle.png");
-}
-.oo-ui-image-constructive .oo-ui-icon-circle,
-.oo-ui-image-constructive.oo-ui-icon-circle {
-       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");
-}
-.oo-ui-image-invert .oo-ui-icon-circle,
-.oo-ui-image-invert.oo-ui-icon-circle {
-       background-image: url("themes/mediawiki/images/icons/circle-invert.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/circle-invert.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/circle-invert.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/circle-invert.png");
-}
-.oo-ui-icon-clear {
-       background-image: url("themes/mediawiki/images/icons/clear.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/clear.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/clear.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/clear.png");
-}
-.oo-ui-image-invert .oo-ui-icon-clear,
-.oo-ui-image-invert.oo-ui-icon-clear {
-       background-image: url("themes/mediawiki/images/icons/clear-invert.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/clear-invert.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/clear-invert.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/clear-invert.png");
-}
-.oo-ui-icon-close {
-       background-image: url("themes/mediawiki/images/icons/close-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/close-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/close-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/close-ltr.png");
-}
-.oo-ui-image-invert .oo-ui-icon-close,
-.oo-ui-image-invert.oo-ui-icon-close {
-       background-image: url("themes/mediawiki/images/icons/close-ltr-invert.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/close-ltr-invert.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/close-ltr-invert.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/close-ltr-invert.png");
-}
-.oo-ui-icon-code {
-       background-image: url("themes/mediawiki/images/icons/code.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/code.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/code.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/code.png");
-}
-.oo-ui-image-invert .oo-ui-icon-code,
-.oo-ui-image-invert.oo-ui-icon-code {
-       background-image: url("themes/mediawiki/images/icons/code-invert.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/code-invert.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/code-invert.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/code-invert.png");
-}
-.oo-ui-icon-collapse {
-       background-image: url("themes/mediawiki/images/icons/collapse.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/collapse.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/collapse.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/collapse.png");
-}
-.oo-ui-image-invert .oo-ui-icon-collapse,
-.oo-ui-image-invert.oo-ui-icon-collapse {
-       background-image: url("themes/mediawiki/images/icons/collapse-invert.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/collapse-invert.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/collapse-invert.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/collapse-invert.png");
-}
-.oo-ui-icon-comment {
-       background-image: url("themes/mediawiki/images/icons/comment.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/comment.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/comment.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/comment.png");
-}
-.oo-ui-image-invert .oo-ui-icon-comment,
-.oo-ui-image-invert.oo-ui-icon-comment {
-       background-image: url("themes/mediawiki/images/icons/comment-invert.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/comment-invert.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/comment-invert.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/comment-invert.png");
-}
-.oo-ui-icon-ellipsis {
-       background-image: url("themes/mediawiki/images/icons/ellipsis.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/ellipsis.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/ellipsis.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/ellipsis.png");
-}
-.oo-ui-image-invert .oo-ui-icon-ellipsis,
-.oo-ui-image-invert.oo-ui-icon-ellipsis {
-       background-image: url("themes/mediawiki/images/icons/ellipsis-invert.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/ellipsis-invert.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/ellipsis-invert.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/ellipsis-invert.png");
-}
-.oo-ui-icon-expand {
-       background-image: url("themes/mediawiki/images/icons/expand.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/expand.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/expand.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/expand.png");
-}
-.oo-ui-image-invert .oo-ui-icon-expand,
-.oo-ui-image-invert.oo-ui-icon-expand {
-       background-image: url("themes/mediawiki/images/icons/expand-invert.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/expand-invert.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/expand-invert.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/expand-invert.png");
-}
-.oo-ui-icon-help {
-       background-image: url("themes/mediawiki/images/icons/help-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/help-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/help-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/help-ltr.png");
-}
-/* @noflip */
-.oo-ui-icon-help:lang(he) {
-       background-image: url("themes/mediawiki/images/icons/help-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/help-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/help-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/help-ltr.png");
-}
-/* @noflip */
-.oo-ui-icon-help:lang(yi) {
-       background-image: url("themes/mediawiki/images/icons/help-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/help-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/help-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/help-ltr.png");
-}
-.oo-ui-image-invert .oo-ui-icon-help,
-.oo-ui-image-invert.oo-ui-icon-help {
-       background-image: url("themes/mediawiki/images/icons/help-ltr-invert.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/help-ltr-invert.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/help-ltr-invert.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/help-ltr-invert.png");
-}
-/* @noflip */
-.oo-ui-image-invert .oo-ui-icon-help:lang(he),
-.oo-ui-image-invert.oo-ui-icon-help:lang(he) {
-       background-image: url("themes/mediawiki/images/icons/help-ltr-invert.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/help-ltr-invert.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/help-ltr-invert.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/help-ltr-invert.png");
-}
-/* @noflip */
-.oo-ui-image-invert .oo-ui-icon-help:lang(yi),
-.oo-ui-image-invert.oo-ui-icon-help:lang(yi) {
-       background-image: url("themes/mediawiki/images/icons/help-ltr-invert.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/help-ltr-invert.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/help-ltr-invert.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/help-ltr-invert.png");
-}
-.oo-ui-icon-history {
-       background-image: url("themes/mediawiki/images/icons/history.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/history.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/history.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/history.png");
-}
-.oo-ui-image-invert .oo-ui-icon-history,
-.oo-ui-image-invert.oo-ui-icon-history {
-       background-image: url("themes/mediawiki/images/icons/history-invert.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/history-invert.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/history-invert.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/history-invert.png");
-}
-.oo-ui-icon-info {
-       background-image: url("themes/mediawiki/images/icons/info.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/info.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/info.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/info.png");
-}
-.oo-ui-image-invert .oo-ui-icon-info,
-.oo-ui-image-invert.oo-ui-icon-info {
-       background-image: url("themes/mediawiki/images/icons/info-invert.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/info-invert.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/info-invert.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/info-invert.png");
-}
-.oo-ui-icon-menu {
-       background-image: url("themes/mediawiki/images/icons/menu.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/menu.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/menu.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/menu.png");
-}
-.oo-ui-image-invert .oo-ui-icon-menu,
-.oo-ui-image-invert.oo-ui-icon-menu {
-       background-image: url("themes/mediawiki/images/icons/menu-invert.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/menu-invert.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/menu-invert.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/menu-invert.png");
-}
-.oo-ui-icon-next {
-       background-image: url("themes/mediawiki/images/icons/move-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/move-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/move-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/move-ltr.png");
-}
-.oo-ui-image-invert .oo-ui-icon-next,
-.oo-ui-image-invert.oo-ui-icon-next {
-       background-image: url("themes/mediawiki/images/icons/move-ltr-invert.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/move-ltr-invert.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/move-ltr-invert.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/move-ltr-invert.png");
-}
-.oo-ui-icon-picture {
-       background-image: url("themes/mediawiki/images/icons/picture.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/picture.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/picture.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/picture.png");
-}
-.oo-ui-image-invert .oo-ui-icon-picture,
-.oo-ui-image-invert.oo-ui-icon-picture {
-       background-image: url("themes/mediawiki/images/icons/picture-invert.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/picture-invert.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/picture-invert.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/picture-invert.png");
-}
-.oo-ui-icon-previous {
-       background-image: url("themes/mediawiki/images/icons/move-rtl.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/move-rtl.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/move-rtl.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/move-rtl.png");
-}
-.oo-ui-image-invert .oo-ui-icon-previous,
-.oo-ui-image-invert.oo-ui-icon-previous {
-       background-image: url("themes/mediawiki/images/icons/move-rtl-invert.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/move-rtl-invert.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/move-rtl-invert.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/move-rtl-invert.png");
-}
-.oo-ui-icon-redo {
-       background-image: url("themes/mediawiki/images/icons/arched-arrow-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/arched-arrow-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/arched-arrow-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/arched-arrow-ltr.png");
-}
-.oo-ui-image-invert .oo-ui-icon-redo,
-.oo-ui-image-invert.oo-ui-icon-redo {
-       background-image: url("themes/mediawiki/images/icons/arched-arrow-ltr-invert.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/arched-arrow-ltr-invert.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/arched-arrow-ltr-invert.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/arched-arrow-ltr-invert.png");
-}
-.oo-ui-icon-remove {
-       background-image: url("themes/mediawiki/images/icons/remove.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/remove.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/remove.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/remove.png");
-}
-.oo-ui-image-destructive .oo-ui-icon-remove,
-.oo-ui-image-destructive.oo-ui-icon-remove {
-       background-image: url("themes/mediawiki/images/icons/remove-destructive.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/remove-destructive.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/remove-destructive.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/remove-destructive.png");
-}
-.oo-ui-image-invert .oo-ui-icon-remove,
-.oo-ui-image-invert.oo-ui-icon-remove {
-       background-image: url("themes/mediawiki/images/icons/remove-invert.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/remove-invert.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/remove-invert.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/remove-invert.png");
-}
-.oo-ui-icon-search {
-       background-image: url("themes/mediawiki/images/icons/search.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/search.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/search.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/search.png");
-}
-.oo-ui-image-invert .oo-ui-icon-search,
-.oo-ui-image-invert.oo-ui-icon-search {
-       background-image: url("themes/mediawiki/images/icons/search-invert.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/search-invert.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/search-invert.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/search-invert.png");
-}
-.oo-ui-icon-settings {
-       background-image: url("themes/mediawiki/images/icons/settings.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/settings.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/settings.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/settings.png");
-}
-.oo-ui-image-invert .oo-ui-icon-settings,
-.oo-ui-image-invert.oo-ui-icon-settings {
-       background-image: url("themes/mediawiki/images/icons/settings-invert.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/settings-invert.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/settings-invert.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/settings-invert.png");
-}
-.oo-ui-icon-tag {
-       background-image: url("themes/mediawiki/images/icons/tag.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/tag.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/tag.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/tag.png");
-}
-.oo-ui-image-invert .oo-ui-icon-tag,
-.oo-ui-image-invert.oo-ui-icon-tag {
-       background-image: url("themes/mediawiki/images/icons/tag-invert.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/tag-invert.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/tag-invert.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/tag-invert.png");
-}
-.oo-ui-icon-undo {
-       background-image: url("themes/mediawiki/images/icons/arched-arrow-rtl.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/arched-arrow-rtl.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/arched-arrow-rtl.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/arched-arrow-rtl.png");
-}
-.oo-ui-image-invert .oo-ui-icon-undo,
-.oo-ui-image-invert.oo-ui-icon-undo {
-       background-image: url("themes/mediawiki/images/icons/arched-arrow-rtl-invert.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/arched-arrow-rtl-invert.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/arched-arrow-rtl-invert.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/arched-arrow-rtl-invert.png");
-}
-.oo-ui-icon-window {
-       background-image: url("themes/mediawiki/images/icons/window.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/window.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/window.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/window.png");
-}
-.oo-ui-image-invert .oo-ui-icon-window,
-.oo-ui-image-invert.oo-ui-icon-window {
-       background-image: url("themes/mediawiki/images/icons/window-invert.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/window-invert.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/window-invert.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/window-invert.png");
-}
-
-.oo-ui-indicator-alert {
-       background-image: url("themes/mediawiki/images/indicators/alert.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/alert.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/alert.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/indicators/alert.png");
-}
-.oo-ui-image-invert .oo-ui-indicator-alert,
-.oo-ui-image-invert.oo-ui-indicator-alert {
-       background-image: url("themes/mediawiki/images/indicators/alert-invert.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/alert-invert.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/alert-invert.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/indicators/alert-invert.png");
-}
-.oo-ui-indicator-up {
-       background-image: url("themes/mediawiki/images/indicators/arrow-up.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-up.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-up.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/indicators/arrow-up.png");
-}
-.oo-ui-image-invert .oo-ui-indicator-up,
-.oo-ui-image-invert.oo-ui-indicator-up {
-       background-image: url("themes/mediawiki/images/indicators/arrow-up-invert.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-up-invert.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-up-invert.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/indicators/arrow-up-invert.png");
-}
-.oo-ui-indicator-down {
-       background-image: url("themes/mediawiki/images/indicators/arrow-down.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-down.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-down.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/indicators/arrow-down.png");
-}
-.oo-ui-image-invert .oo-ui-indicator-down,
-.oo-ui-image-invert.oo-ui-indicator-down {
-       background-image: url("themes/mediawiki/images/indicators/arrow-down-invert.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-down-invert.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-down-invert.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/indicators/arrow-down-invert.png");
-}
-.oo-ui-indicator-next {
-       background-image: url("themes/mediawiki/images/indicators/arrow-ltr.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-ltr.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-ltr.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/indicators/arrow-ltr.png");
-}
-.oo-ui-image-invert .oo-ui-indicator-next,
-.oo-ui-image-invert.oo-ui-indicator-next {
-       background-image: url("themes/mediawiki/images/indicators/arrow-ltr-invert.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-ltr-invert.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-ltr-invert.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/indicators/arrow-ltr-invert.png");
-}
-.oo-ui-indicator-previous {
-       background-image: url("themes/mediawiki/images/indicators/arrow-rtl.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-rtl.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-rtl.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/indicators/arrow-rtl.png");
-}
-.oo-ui-image-invert .oo-ui-indicator-previous,
-.oo-ui-image-invert.oo-ui-indicator-previous {
-       background-image: url("themes/mediawiki/images/indicators/arrow-rtl-invert.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-rtl-invert.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-rtl-invert.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/indicators/arrow-rtl-invert.png");
-}
-.oo-ui-indicator-required {
-       background-image: url("themes/mediawiki/images/indicators/required.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/required.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/required.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/indicators/required.png");
-}
-.oo-ui-image-invert .oo-ui-indicator-required,
-.oo-ui-image-invert.oo-ui-indicator-required {
-       background-image: url("themes/mediawiki/images/indicators/required-invert.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/required-invert.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/required-invert.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/indicators/required-invert.png");
-}
-
-.oo-ui-texture-pending {
-       background-image: url("themes/mediawiki/images/textures/pending.gif");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/textures/pending.gif");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/textures/pending.gif");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/textures/pending.gif");
-}
-.oo-ui-texture-transparency {
-       background-image: url("themes/mediawiki/images/textures/transparency.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/textures/transparency.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/textures/transparency.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/textures/transparency.png");
-}
index 1a8d8b6..eaca1f1 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.9.8
+ * OOjs UI v0.11.3
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2015 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-04-12T17:19:06Z
+ * Date: 2015-05-12T12:15:37Z
  */
 /**
  * @class
index f46dd07..9692d5c 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.9.8
+ * OOjs UI v0.11.3
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2015 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-04-12T17:19:06Z
+ * Date: 2015-05-12T12:15:37Z
  */
 ( function ( OO ) {
 
@@ -44,6 +44,39 @@ OO.ui.Keys = {
        SPACE: 32
 };
 
+/**
+ * Check if an element is focusable.
+ * Inspired from :focusable in jQueryUI v1.11.4 - 2015-04-14
+ *
+ * @param {jQuery} element Element to test
+ * @return {Boolean} [description]
+ */
+OO.ui.isFocusableElement = function ( $element ) {
+       var node = $element[0],
+               nodeName = node.nodeName.toLowerCase(),
+               // Check if the element have tabindex set
+               isInElementGroup = /^(input|select|textarea|button|object)$/.test( nodeName ),
+               // Check if the element is a link with href or if it has tabindex
+               isOtherElement = (
+                       ( nodeName === 'a' && node.href ) ||
+                       !isNaN( $element.attr( 'tabindex' ) )
+               ),
+               // Check if the element is visible
+               isVisible = (
+                       // This is quicker than calling $element.is( ':visible' )
+                       $.expr.filters.visible( node ) &&
+                       // Check that all parents are visible
+                       !$element.parents().addBack().filter( function () {
+                               return $.css( this, 'visibility' ) === 'hidden';
+                       } ).length
+               );
+
+       return (
+               ( isInElementGroup ? !node.disabled : isOtherElement ) &&
+               isVisible
+       );
+};
+
 /**
  * Get the user's language and any fallback languages.
  *
@@ -117,6 +150,38 @@ OO.ui.contains = function ( containers, contained, matchContainers ) {
        return false;
 };
 
+/**
+ * Return a function, that, as long as it continues to be invoked, will not
+ * be triggered. The function will be called after it stops being called for
+ * N milliseconds. If `immediate` is passed, trigger the function on the
+ * leading edge, instead of the trailing.
+ *
+ * Ported from: http://underscorejs.org/underscore.js
+ *
+ * @param {Function} func
+ * @param {number} wait
+ * @param {boolean} immediate
+ * @return {Function}
+ */
+OO.ui.debounce = function ( func, wait, immediate ) {
+       var timeout;
+       return function () {
+               var context = this,
+                       args = arguments,
+                       later = function () {
+                               timeout = null;
+                               if ( !immediate ) {
+                                       func.apply( context, args );
+                               }
+                       };
+               if ( immediate && !timeout ) {
+                       func.apply( context, args );
+               }
+               clearTimeout( timeout );
+               timeout = setTimeout( later, wait );
+       };
+};
+
 /**
  * Reconstitute a JavaScript object corresponding to a widget created by
  * the PHP implementation.
@@ -1776,7 +1841,7 @@ OO.ui.Window = function OoUiWindow( config ) {
        this.$overlay.addClass( 'oo-ui-window-overlay' );
        this.$content
                .addClass( 'oo-ui-window-content' )
-               .attr( 'tabIndex', 0 );
+               .attr( 'tabindex', 0 );
        this.$frame
                .addClass( 'oo-ui-window-frame' )
                .append( this.$content );
@@ -4122,9 +4187,10 @@ OO.ui.ButtonElement.prototype.onMouseUp = function ( e ) {
  */
 OO.ui.ButtonElement.prototype.onClick = function ( e ) {
        if ( !this.isDisabled() && e.which === 1 ) {
-               this.emit( 'click' );
+               if ( this.emit( 'click' ) ) {
+                       return false;
+               }
        }
-       return false;
 };
 
 /**
@@ -4167,8 +4233,9 @@ OO.ui.ButtonElement.prototype.onKeyUp = function ( e ) {
  */
 OO.ui.ButtonElement.prototype.onKeyPress = function ( e ) {
        if ( !this.isDisabled() && ( e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER ) ) {
-               this.emit( 'click' );
-               return false;
+               if ( this.emit( 'click' ) ) {
+                       return false;
+               }
        }
 };
 
@@ -5305,9 +5372,9 @@ OO.ui.IndicatorElement.prototype.getIndicatorTitle = function () {
  * @param {Object} [config] Configuration options
  * @cfg {jQuery} [$label] The label element created by the class. If this
  *  configuration is omitted, the label element will use a generated `<span>`.
- * @cfg {jQuery|string|Function} [label] The label text. The label can be specified 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.
+ * @cfg {jQuery|string|Function|OO.ui.HtmlSnippet} [label] The label text. The label can be specified
+ *  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.
@@ -5674,16 +5741,15 @@ OO.ui.LookupElement.prototype.populateLookupMenu = function () {
 };
 
 /**
- * Select and highlight the first selectable item in the menu.
+ * Highlight the first selectable item in the menu.
  *
  * @private
  * @chainable
  */
 OO.ui.LookupElement.prototype.initializeLookupMenuSelection = function () {
        if ( !this.lookupMenu.getSelectedItem() ) {
-               this.lookupMenu.selectItem( this.lookupMenu.getFirstSelectableItem() );
+               this.lookupMenu.highlightItem( this.lookupMenu.getFirstSelectableItem() );
        }
-       this.lookupMenu.highlightItem( this.lookupMenu.getSelectedItem() );
 };
 
 /**
@@ -6366,6 +6432,7 @@ OO.ui.ClippableElement.prototype.clip = function () {
  * @extends OO.ui.Widget
  * @mixins OO.ui.IconElement
  * @mixins OO.ui.FlaggedElement
+ * @mixins OO.ui.TabIndexedElement
  *
  * @constructor
  * @param {OO.ui.ToolGroup} toolGroup
@@ -6385,10 +6452,6 @@ OO.ui.Tool = function OoUiTool( toolGroup, config ) {
        // Parent constructor
        OO.ui.Tool.super.call( this, config );
 
-       // Mixin constructors
-       OO.ui.IconElement.call( this, config );
-       OO.ui.FlaggedElement.call( this, config );
-
        // Properties
        this.toolGroup = toolGroup;
        this.toolbar = this.toolGroup.getToolbar();
@@ -6398,6 +6461,11 @@ OO.ui.Tool = function OoUiTool( toolGroup, config ) {
        this.$link = $( '<a>' );
        this.title = null;
 
+       // Mixin constructors
+       OO.ui.IconElement.call( this, config );
+       OO.ui.FlaggedElement.call( this, config );
+       OO.ui.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$link } ) );
+
        // Events
        this.toolbar.connect( this, { updateState: 'onUpdateState' } );
 
@@ -6414,7 +6482,6 @@ OO.ui.Tool = function OoUiTool( toolGroup, config ) {
        this.$link
                .addClass( 'oo-ui-tool-link' )
                .append( this.$icon, this.$title, this.$accel )
-               .prop( 'tabIndex', 0 )
                .attr( 'role', 'button' );
        this.$element
                .data( 'oo-ui-tool', this )
@@ -6422,6 +6489,7 @@ OO.ui.Tool = function OoUiTool( toolGroup, config ) {
                        'oo-ui-tool ' + 'oo-ui-tool-name-' +
                        this.constructor.static.name.replace( /^([^\/]+)\/([^\/]+).*$/, '$1-$2' )
                )
+               .toggleClass( 'oo-ui-tool-with-label', this.constructor.static.displayBothIconAndLabel )
                .append( this.$link );
        this.setTitle( config.title || this.constructor.static.title );
 };
@@ -6431,6 +6499,7 @@ OO.ui.Tool = function OoUiTool( toolGroup, config ) {
 OO.inheritClass( OO.ui.Tool, OO.ui.Widget );
 OO.mixinClass( OO.ui.Tool, OO.ui.IconElement );
 OO.mixinClass( OO.ui.Tool, OO.ui.FlaggedElement );
+OO.mixinClass( OO.ui.Tool, OO.ui.TabIndexedElement );
 
 /* Events */
 
@@ -6481,6 +6550,16 @@ OO.ui.Tool.static.group = '';
  */
 OO.ui.Tool.static.title = '';
 
+/**
+ * Whether this tool should be displayed with both title and label when used in a bar tool group.
+ * Normally only the icon is displayed, or only the label if no icon is given.
+ *
+ * @static
+ * @inheritable
+ * @property {boolean}
+ */
+OO.ui.Tool.static.displayBothIconAndLabel = false;
+
 /**
  * Tool can be automatically added to catch-all groups.
  *
@@ -6628,6 +6707,254 @@ OO.ui.Tool.prototype.destroy = function () {
 /**
  * Collection of tool groups.
  *
+ * The following is a minimal example using several tools and tool groups.
+ *
+ *     @example
+ *     // Create the toolbar
+ *     var toolFactory = new OO.ui.ToolFactory();
+ *     var toolGroupFactory = new OO.ui.ToolGroupFactory();
+ *     var toolbar = new OO.ui.Toolbar( toolFactory, toolGroupFactory );
+ *
+ *     // We will be placing status text in this element when tools are used
+ *     var $area = $( '<p>' ).text( 'Toolbar example' );
+ *
+ *     // Define the tools that we're going to place in our toolbar
+ *
+ *     // Create a class inheriting from OO.ui.Tool
+ *     function PictureTool() {
+ *         PictureTool.super.apply( this, arguments );
+ *     }
+ *     OO.inheritClass( PictureTool, OO.ui.Tool );
+ *     // Each tool must have a 'name' (used as an internal identifier, see later) and at least one
+ *     // of 'icon' and 'title' (displayed icon and text).
+ *     PictureTool.static.name = 'picture';
+ *     PictureTool.static.icon = 'picture';
+ *     PictureTool.static.title = 'Insert picture';
+ *     // Defines the action that will happen when this tool is selected (clicked).
+ *     PictureTool.prototype.onSelect = function () {
+ *         $area.text( 'Picture tool clicked!' );
+ *         // Never display this tool as "active" (selected).
+ *         this.setActive( false );
+ *     };
+ *     // Make this tool available in our toolFactory and thus our toolbar
+ *     toolFactory.register( PictureTool );
+ *
+ *     // Register two more tools, nothing interesting here
+ *     function SettingsTool() {
+ *         SettingsTool.super.apply( this, arguments );
+ *     }
+ *     OO.inheritClass( SettingsTool, OO.ui.Tool );
+ *     SettingsTool.static.name = 'settings';
+ *     SettingsTool.static.icon = 'settings';
+ *     SettingsTool.static.title = 'Change settings';
+ *     SettingsTool.prototype.onSelect = function () {
+ *         $area.text( 'Settings tool clicked!' );
+ *         this.setActive( false );
+ *     };
+ *     toolFactory.register( SettingsTool );
+ *
+ *     // Register two more tools, nothing interesting here
+ *     function StuffTool() {
+ *         StuffTool.super.apply( this, arguments );
+ *     }
+ *     OO.inheritClass( StuffTool, OO.ui.Tool );
+ *     StuffTool.static.name = 'stuff';
+ *     StuffTool.static.icon = 'ellipsis';
+ *     StuffTool.static.title = 'More stuff';
+ *     StuffTool.prototype.onSelect = function () {
+ *         $area.text( 'More stuff tool clicked!' );
+ *         this.setActive( false );
+ *     };
+ *     toolFactory.register( StuffTool );
+ *
+ *     // This is a PopupTool. Rather than having a custom 'onSelect' action, it will display a
+ *     // little popup window (a PopupWidget).
+ *     function HelpTool( toolGroup, config ) {
+ *         OO.ui.PopupTool.call( this, toolGroup, $.extend( { popup: {
+ *             padded: true,
+ *             label: 'Help',
+ *             head: true
+ *         } }, config ) );
+ *         this.popup.$body.append( '<p>I am helpful!</p>' );
+ *     }
+ *     OO.inheritClass( HelpTool, OO.ui.PopupTool );
+ *     HelpTool.static.name = 'help';
+ *     HelpTool.static.icon = 'help';
+ *     HelpTool.static.title = 'Help';
+ *     toolFactory.register( HelpTool );
+ *
+ *     // Finally define which tools and in what order appear in the toolbar. Each tool may only be
+ *     // used once (but not all defined tools must be used).
+ *     toolbar.setup( [
+ *         {
+ *             // 'bar' tool groups display tools' icons only, side-by-side.
+ *             type: 'bar',
+ *             include: [ 'picture', 'help' ]
+ *         },
+ *         {
+ *             // 'list' tool groups display both the titles and icons, in a dropdown list.
+ *             type: 'list',
+ *             indicator: 'down',
+ *             label: 'More',
+ *             include: [ 'settings', 'stuff' ]
+ *         }
+ *         // Note how the tools themselves are toolgroup-agnostic - the same tool can be displayed
+ *         // either in a 'list' or a 'bar'. There is a 'menu' tool group too, not showcased here,
+ *         // since it's more complicated to use. (See the next example snippet on this page.)
+ *     ] );
+ *
+ *     // Create some UI around the toolbar and place it in the document
+ *     var frame = new OO.ui.PanelLayout( {
+ *         expanded: false,
+ *         framed: true
+ *     } );
+ *     var contentFrame = new OO.ui.PanelLayout( {
+ *         expanded: false,
+ *         padded: true
+ *     } );
+ *     frame.$element.append(
+ *         toolbar.$element,
+ *         contentFrame.$element.append( $area )
+ *     );
+ *     $( 'body' ).append( frame.$element );
+ *
+ *     // Here is where the toolbar is actually built. This must be done after inserting it into the
+ *     // document.
+ *     toolbar.initialize();
+ *
+ * The following example extends the previous one to illustrate 'menu' tool groups and the usage of
+ * 'updateState' event.
+ *
+ *     @example
+ *     // Create the toolbar
+ *     var toolFactory = new OO.ui.ToolFactory();
+ *     var toolGroupFactory = new OO.ui.ToolGroupFactory();
+ *     var toolbar = new OO.ui.Toolbar( toolFactory, toolGroupFactory );
+ *
+ *     // We will be placing status text in this element when tools are used
+ *     var $area = $( '<p>' ).text( 'Toolbar example' );
+ *
+ *     // Define the tools that we're going to place in our toolbar
+ *
+ *     // Create a class inheriting from OO.ui.Tool
+ *     function PictureTool() {
+ *         PictureTool.super.apply( this, arguments );
+ *     }
+ *     OO.inheritClass( PictureTool, OO.ui.Tool );
+ *     // Each tool must have a 'name' (used as an internal identifier, see later) and at least one
+ *     // of 'icon' and 'title' (displayed icon and text).
+ *     PictureTool.static.name = 'picture';
+ *     PictureTool.static.icon = 'picture';
+ *     PictureTool.static.title = 'Insert picture';
+ *     // Defines the action that will happen when this tool is selected (clicked).
+ *     PictureTool.prototype.onSelect = function () {
+ *         $area.text( 'Picture tool clicked!' );
+ *         // Never display this tool as "active" (selected).
+ *         this.setActive( false );
+ *     };
+ *     // The toolbar can be synchronized with the state of some external stuff, like a text
+ *     // editor's editing area, highlighting the tools (e.g. a 'bold' tool would be shown as active
+ *     // when the text cursor was inside bolded text). Here we simply disable this feature.
+ *     PictureTool.prototype.onUpdateState = function () {
+ *     };
+ *     // Make this tool available in our toolFactory and thus our toolbar
+ *     toolFactory.register( PictureTool );
+ *
+ *     // Register two more tools, nothing interesting here
+ *     function SettingsTool() {
+ *         SettingsTool.super.apply( this, arguments );
+ *         this.reallyActive = false;
+ *     }
+ *     OO.inheritClass( SettingsTool, OO.ui.Tool );
+ *     SettingsTool.static.name = 'settings';
+ *     SettingsTool.static.icon = 'settings';
+ *     SettingsTool.static.title = 'Change settings';
+ *     SettingsTool.prototype.onSelect = function () {
+ *         $area.text( 'Settings tool clicked!' );
+ *         // Toggle the active state on each click
+ *         this.reallyActive = !this.reallyActive;
+ *         this.setActive( this.reallyActive );
+ *         // To update the menu label
+ *         this.toolbar.emit( 'updateState' );
+ *     };
+ *     SettingsTool.prototype.onUpdateState = function () {
+ *     };
+ *     toolFactory.register( SettingsTool );
+ *
+ *     // Register two more tools, nothing interesting here
+ *     function StuffTool() {
+ *         StuffTool.super.apply( this, arguments );
+ *         this.reallyActive = false;
+ *     }
+ *     OO.inheritClass( StuffTool, OO.ui.Tool );
+ *     StuffTool.static.name = 'stuff';
+ *     StuffTool.static.icon = 'ellipsis';
+ *     StuffTool.static.title = 'More stuff';
+ *     StuffTool.prototype.onSelect = function () {
+ *         $area.text( 'More stuff tool clicked!' );
+ *         // Toggle the active state on each click
+ *         this.reallyActive = !this.reallyActive;
+ *         this.setActive( this.reallyActive );
+ *         // To update the menu label
+ *         this.toolbar.emit( 'updateState' );
+ *     };
+ *     StuffTool.prototype.onUpdateState = function () {
+ *     };
+ *     toolFactory.register( StuffTool );
+ *
+ *     // This is a PopupTool. Rather than having a custom 'onSelect' action, it will display a
+ *     // little popup window (a PopupWidget). 'onUpdateState' is also already implemented.
+ *     function HelpTool( toolGroup, config ) {
+ *         OO.ui.PopupTool.call( this, toolGroup, $.extend( { popup: {
+ *             padded: true,
+ *             label: 'Help',
+ *             head: true
+ *         } }, config ) );
+ *         this.popup.$body.append( '<p>I am helpful!</p>' );
+ *     }
+ *     OO.inheritClass( HelpTool, OO.ui.PopupTool );
+ *     HelpTool.static.name = 'help';
+ *     HelpTool.static.icon = 'help';
+ *     HelpTool.static.title = 'Help';
+ *     toolFactory.register( HelpTool );
+ *
+ *     // Finally define which tools and in what order appear in the toolbar. Each tool may only be
+ *     // used once (but not all defined tools must be used).
+ *     toolbar.setup( [
+ *         {
+ *             // 'bar' tool groups display tools' icons only, side-by-side.
+ *             type: 'bar',
+ *             include: [ 'picture', 'help' ]
+ *         },
+ *         {
+ *             // 'menu' tool groups display both the titles and icons, in a dropdown menu.
+ *             // Menu label indicates which items are selected.
+ *             type: 'menu',
+ *             indicator: 'down',
+ *             include: [ 'settings', 'stuff' ]
+ *         }
+ *     ] );
+ *
+ *     // Create some UI around the toolbar and place it in the document
+ *     var frame = new OO.ui.PanelLayout( {
+ *         expanded: false,
+ *         framed: true
+ *     } );
+ *     var contentFrame = new OO.ui.PanelLayout( {
+ *         expanded: false,
+ *         padded: true
+ *     } );
+ *     frame.$element.append(
+ *         toolbar.$element,
+ *         contentFrame.$element.append( $area )
+ *     );
+ *     $( 'body' ).append( frame.$element );
+ *
+ *     // Here is where the toolbar is actually built. This must be done after inserting it into the
+ *     // document.
+ *     toolbar.initialize();
+ *     toolbar.emit( 'updateState' );
+ *
  * @class
  * @extends OO.ui.Element
  * @mixins OO.EventEmitter
@@ -6671,7 +6998,7 @@ OO.ui.Toolbar = function OoUiToolbar( toolFactory, toolGroupFactory, config ) {
        // Events
        this.$element
                .add( this.$bar ).add( this.$group ).add( this.$actions )
-               .on( 'mousedown', this.onPointerDown.bind( this ) );
+               .on( 'mousedown keydown', this.onPointerDown.bind( this ) );
 
        // Initialization
        this.$group.addClass( 'oo-ui-toolbar-tools' );
@@ -6906,14 +7233,18 @@ OO.ui.ToolGroup = function OoUiToolGroup( toolbar, config ) {
        this.exclude = config.exclude || [];
        this.promote = config.promote || [];
        this.demote = config.demote || [];
-       this.onCapturedMouseUpHandler = this.onCapturedMouseUp.bind( this );
+       this.onCapturedMouseKeyUpHandler = this.onCapturedMouseKeyUp.bind( this );
 
        // Events
        this.$element.on( {
-               mousedown: this.onPointerDown.bind( this ),
-               mouseup: this.onPointerUp.bind( this ),
-               mouseover: this.onMouseOver.bind( this ),
-               mouseout: this.onMouseOut.bind( this )
+               mousedown: this.onMouseKeyDown.bind( this ),
+               mouseup: this.onMouseKeyUp.bind( this ),
+               keydown: this.onMouseKeyDown.bind( this ),
+               keyup: this.onMouseKeyUp.bind( this ),
+               focus: this.onMouseOverFocus.bind( this ),
+               blur: this.onMouseOutBlur.bind( this ),
+               mouseover: this.onMouseOverFocus.bind( this ),
+               mouseout: this.onMouseOutBlur.bind( this )
        } );
        this.toolbar.getToolFactory().connect( this, { register: 'onToolFactoryRegister' } );
        this.aggregate( { disable: 'itemDisable' } );
@@ -6996,57 +7327,64 @@ OO.ui.ToolGroup.prototype.updateDisabled = function () {
 };
 
 /**
- * Handle mouse down events.
+ * Handle mouse down and key down events.
  *
- * @param {jQuery.Event} e Mouse down event
+ * @param {jQuery.Event} e Mouse down or key down event
  */
-OO.ui.ToolGroup.prototype.onPointerDown = function ( e ) {
-       if ( !this.isDisabled() && e.which === 1 ) {
+OO.ui.ToolGroup.prototype.onMouseKeyDown = function ( e ) {
+       if (
+               !this.isDisabled() &&
+               ( e.which === 1 || e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER )
+       ) {
                this.pressed = this.getTargetTool( e );
                if ( this.pressed ) {
                        this.pressed.setActive( true );
-                       this.getElementDocument().addEventListener(
-                               'mouseup', this.onCapturedMouseUpHandler, true
-                       );
+                       this.getElementDocument().addEventListener( 'mouseup', this.onCapturedMouseKeyUpHandler, true );
+                       this.getElementDocument().addEventListener( 'keyup', this.onCapturedMouseKeyUpHandler, true );
                }
+               return false;
        }
-       return false;
 };
 
 /**
- * Handle captured mouse up events.
+ * Handle captured mouse up and key up events.
  *
- * @param {Event} e Mouse up event
+ * @param {Event} e Mouse up or key up event
  */
-OO.ui.ToolGroup.prototype.onCapturedMouseUp = function ( e ) {
-       this.getElementDocument().removeEventListener( 'mouseup', this.onCapturedMouseUpHandler, true );
-       // onPointerUp may be called a second time, depending on where the mouse is when the button is
+OO.ui.ToolGroup.prototype.onCapturedMouseKeyUp = function ( e ) {
+       this.getElementDocument().removeEventListener( 'mouseup', this.onCapturedMouseKeyUpHandler, true );
+       this.getElementDocument().removeEventListener( 'keyup', this.onCapturedMouseKeyUpHandler, true );
+       // onMouseKeyUp may be called a second time, depending on where the mouse is when the button is
        // released, but since `this.pressed` will no longer be true, the second call will be ignored.
-       this.onPointerUp( e );
+       this.onMouseKeyUp( e );
 };
 
 /**
- * Handle mouse up events.
+ * Handle mouse up and key up events.
  *
- * @param {jQuery.Event} e Mouse up event
+ * @param {jQuery.Event} e Mouse up or key up event
  */
-OO.ui.ToolGroup.prototype.onPointerUp = function ( e ) {
+OO.ui.ToolGroup.prototype.onMouseKeyUp = function ( e ) {
        var tool = this.getTargetTool( e );
 
-       if ( !this.isDisabled() && e.which === 1 && this.pressed && this.pressed === tool ) {
+       if (
+               !this.isDisabled() && this.pressed && this.pressed === tool &&
+               ( e.which === 1 || e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER )
+       ) {
                this.pressed.onSelect();
+               this.pressed = null;
+               return false;
        }
 
        this.pressed = null;
-       return false;
 };
 
 /**
- * Handle mouse over events.
+ * Handle mouse over and focus events.
  *
- * @param {jQuery.Event} e Mouse over event
+ * @param {jQuery.Event} e Mouse over or focus event
  */
-OO.ui.ToolGroup.prototype.onMouseOver = function ( e ) {
+OO.ui.ToolGroup.prototype.onMouseOverFocus = function ( e ) {
        var tool = this.getTargetTool( e );
 
        if ( this.pressed && this.pressed === tool ) {
@@ -7055,11 +7393,11 @@ OO.ui.ToolGroup.prototype.onMouseOver = function ( e ) {
 };
 
 /**
- * Handle mouse out events.
+ * Handle mouse out and blur events.
  *
- * @param {jQuery.Event} e Mouse out event
+ * @param {jQuery.Event} e Mouse out or blur event
  */
-OO.ui.ToolGroup.prototype.onMouseOut = function ( e ) {
+OO.ui.ToolGroup.prototype.onMouseOutBlur = function ( e ) {
        var tool = this.getTargetTool( e );
 
        if ( this.pressed && this.pressed === tool ) {
@@ -8144,6 +8482,18 @@ OO.mixinClass( OO.ui.FieldsetLayout, OO.ui.GroupElement );
  * FormLayouts are used to wrap {@link OO.ui.FieldsetLayout FieldsetLayouts} when you intend to use browser-based
  * form submission for the fields instead of handling them in JavaScript. Form layouts can be configured with an
  * HTML form action, an encoding type, and a method using the #action, #enctype, and #method configs, respectively.
+ * See the [OOjs UI documentation on MediaWiki] [1] for more information and examples.
+ *
+ * Only widgets from the {@link OO.ui.InputWidget InputWidget} family support form submission. It
+ * includes standard form elements like {@link OO.ui.CheckboxInputWidget checkboxes}, {@link
+ * OO.ui.RadioInputWidget radio buttons} and {@link OO.ui.TextInputWidget text fields}, as well as
+ * some fancier controls. Some controls have both regular and InputWidget variants, for example
+ * OO.ui.DropdownWidget and OO.ui.DropdownInputWidget – only the latter support form submission and
+ * often have simplified APIs to match the capabilities of HTML forms.
+ * See the [OOjs UI Inputs documentation on MediaWiki] [2] for more information about InputWidgets.
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Layouts/Forms
+ * [2]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Inputs
  *
  *     @example
  *     // Example of a form layout that wraps a fieldset layout
@@ -8243,39 +8593,86 @@ OO.ui.FormLayout.static.tagName = 'form';
  * @fires submit
  */
 OO.ui.FormLayout.prototype.onFormSubmit = function () {
-       this.emit( 'submit' );
-       return false;
+       if ( this.emit( 'submit' ) ) {
+               return false;
+       }
 };
 
 /**
- * Layout with a content and menu area.
+ * MenuLayouts combine a menu and a content {@link OO.ui.PanelLayout panel}. The menu is positioned relative to the content (after, before, top, or bottom)
+ * and its size is customized with the #menuSize config. The content area will fill all remaining space.
+ *
+ *     @example
+ *     var menuLayout = new OO.ui.MenuLayout( {
+ *         position: 'top'
+ *     } ),
+ *         menuPanel = new OO.ui.PanelLayout( { padded: true, expanded: true, scrollable: true } ),
+ *         contentPanel = new OO.ui.PanelLayout( { padded: true, expanded: true, scrollable: true } ),
+ *         select = new OO.ui.SelectWidget( {
+ *             items: [
+ *                 new OO.ui.OptionWidget( {
+ *                     data: 'before',
+ *                     label: 'Before',
+ *                 } ),
+ *                 new OO.ui.OptionWidget( {
+ *                     data: 'after',
+ *                     label: 'After',
+ *                 } ),
+ *                 new OO.ui.OptionWidget( {
+ *                     data: 'top',
+ *                     label: 'Top',
+ *                 } ),
+ *                 new OO.ui.OptionWidget( {
+ *                     data: 'bottom',
+ *                     label: 'Bottom',
+ *                 } )
+ *              ]
+ *         } ).on( 'select', function ( item ) {
+ *            menuLayout.setMenuPosition( item.getData() );
+ *         } );
  *
- * The menu area can be positioned at the top, after, bottom or before. The content area will fill
- * all remaining space.
+ *     menuLayout.$menu.append(
+ *         menuPanel.$element.append( '<b>Menu panel</b>', select.$element )
+ *     );
+ *     menuLayout.$content.append(
+ *         contentPanel.$element.append( '<b>Content panel</b>', '<p>Note that the menu is positioned relative to the content panel: top, bottom, after, before.</p>')
+ *     );
+ *     $( 'body' ).append( menuLayout.$element );
+ *
+ * If menu size needs to be overridden, it can be accomplished using CSS similar to the snippet
+ * below. MenuLayout's CSS will override the appropriate values with 'auto' or '0' to display the
+ * menu correctly. If `menuPosition` is known beforehand, CSS rules corresponding to other positions
+ * may be omitted.
+ *
+ *     .oo-ui-menuLayout-menu {
+ *         height: 200px;
+ *         width: 200px;
+ *     }
+ *     .oo-ui-menuLayout-content {
+ *         top: 200px;
+ *         left: 200px;
+ *         right: 200px;
+ *         bottom: 200px;
+ *     }
  *
  * @class
  * @extends OO.ui.Layout
  *
  * @constructor
  * @param {Object} [config] Configuration options
- * @cfg {number|string} [menuSize='18em'] Size of menu in pixels or any CSS unit
  * @cfg {boolean} [showMenu=true] Show menu
  * @cfg {string} [menuPosition='before'] Position of menu: `top`, `after`, `bottom` or `before`
  */
 OO.ui.MenuLayout = function OoUiMenuLayout( config ) {
-       var positions = this.constructor.static.menuPositions;
-
        // Configuration initialization
-       config = config || {};
+       config = $.extend( {
+               showMenu: true,
+               menuPosition: 'before'
+       }, config );
 
        // Parent constructor
        OO.ui.MenuLayout.super.call( this, config );
 
-       // Properties
-       this.showMenu = config.showMenu !== false;
-       this.menuSize = config.menuSize || '18em';
-       this.menuPosition = positions[ config.menuPosition ] || positions.before;
-
        /**
         * Menu DOM node
         *
@@ -8290,42 +8687,20 @@ OO.ui.MenuLayout = function OoUiMenuLayout( config ) {
        this.$content = $( '<div>' );
 
        // Initialization
-       this.toggleMenu( this.showMenu );
-       this.updateSizes();
        this.$menu
-               .addClass( 'oo-ui-menuLayout-menu' )
-               .css( this.menuPosition.sizeProperty, this.menuSize );
+               .addClass( 'oo-ui-menuLayout-menu' );
        this.$content.addClass( 'oo-ui-menuLayout-content' );
        this.$element
-               .addClass( 'oo-ui-menuLayout ' + this.menuPosition.className )
+               .addClass( 'oo-ui-menuLayout' )
                .append( this.$content, this.$menu );
+       this.setMenuPosition( config.menuPosition );
+       this.toggleMenu( config.showMenu );
 };
 
 /* Setup */
 
 OO.inheritClass( OO.ui.MenuLayout, OO.ui.Layout );
 
-/* Static Properties */
-
-OO.ui.MenuLayout.static.menuPositions = {
-       top: {
-               sizeProperty: 'height',
-               className: 'oo-ui-menuLayout-top'
-       },
-       after: {
-               sizeProperty: 'width',
-               className: 'oo-ui-menuLayout-after'
-       },
-       bottom: {
-               sizeProperty: 'height',
-               className: 'oo-ui-menuLayout-bottom'
-       },
-       before: {
-               sizeProperty: 'width',
-               className: 'oo-ui-menuLayout-before'
-       }
-};
-
 /* Methods */
 
 /**
@@ -8339,7 +8714,9 @@ OO.ui.MenuLayout.prototype.toggleMenu = function ( showMenu ) {
 
        if ( this.showMenu !== showMenu ) {
                this.showMenu = showMenu;
-               this.updateSizes();
+               this.$element
+                       .toggleClass( 'oo-ui-menuLayout-showMenu', this.showMenu )
+                       .toggleClass( 'oo-ui-menuLayout-hideMenu', !this.showMenu );
        }
 
        return this;
@@ -8354,59 +8731,6 @@ OO.ui.MenuLayout.prototype.isMenuVisible = function () {
        return this.showMenu;
 };
 
-/**
- * Set menu size.
- *
- * @param {number|string} size Size of menu in pixels or any CSS unit
- * @chainable
- */
-OO.ui.MenuLayout.prototype.setMenuSize = function ( size ) {
-       this.menuSize = size;
-       this.updateSizes();
-
-       return this;
-};
-
-/**
- * Update menu and content CSS based on current menu size and visibility
- *
- * This method is called internally when size or position is changed.
- */
-OO.ui.MenuLayout.prototype.updateSizes = function () {
-       if ( this.showMenu ) {
-               this.$menu
-                       .css( this.menuPosition.sizeProperty, this.menuSize )
-                       .css( 'overflow', '' );
-               // Set offsets on all sides. CSS resets all but one with
-               // 'important' rules so directionality flips are supported
-               this.$content.css( {
-                       top: this.menuSize,
-                       right: this.menuSize,
-                       bottom: this.menuSize,
-                       left: this.menuSize
-               } );
-       } else {
-               this.$menu
-                       .css( this.menuPosition.sizeProperty, 0 )
-                       .css( 'overflow', 'hidden' );
-               this.$content.css( {
-                       top: 0,
-                       right: 0,
-                       bottom: 0,
-                       left: 0
-               } );
-       }
-};
-
-/**
- * Get menu size.
- *
- * @return {number|string} Menu size
- */
-OO.ui.MenuLayout.prototype.getMenuSize = function () {
-       return this.menuSize;
-};
-
 /**
  * Set menu position.
  *
@@ -8415,19 +8739,9 @@ OO.ui.MenuLayout.prototype.getMenuSize = function () {
  * @chainable
  */
 OO.ui.MenuLayout.prototype.setMenuPosition = function ( position ) {
-       var positions = this.constructor.static.menuPositions;
-
-       if ( !positions[ position ] ) {
-               throw new Error( 'Cannot set position; unsupported position value: ' + position );
-       }
-
-       this.$menu.css( this.menuPosition.sizeProperty, '' );
-       this.$element.removeClass( this.menuPosition.className );
-
-       this.menuPosition = positions[ position ];
-
-       this.updateSizes();
-       this.$element.addClass( this.menuPosition.className );
+       this.$element.removeClass( 'oo-ui-menuLayout-' + this.menuPosition );
+       this.menuPosition = position;
+       this.$element.addClass( 'oo-ui-menuLayout-' + position );
 
        return this;
 };
@@ -8647,6 +8961,35 @@ OO.ui.BookletLayout.prototype.focus = function ( itemIndex ) {
        }
 };
 
+/**
+ * Find the first focusable input in the booklet layout and focus
+ * on it.
+ */
+OO.ui.BookletLayout.prototype.focusFirstFocusable = function () {
+       var i, len,
+               found = false,
+               items = this.stackLayout.getItems(),
+               checkAndFocus = function () {
+                       if ( OO.ui.isFocusableElement( $( this ) ) ) {
+                               $( this ).focus();
+                               found = true;
+                               return false;
+                       }
+               };
+
+       for ( i = 0, len = items.length; i < len; i++ ) {
+               if ( found ) {
+                       break;
+               }
+               // Find all potentially focusable elements in the item
+               // and check if they are focusable
+               items[i].$element
+                       .find( 'input, select, textarea, button, object' )
+                       /* jshint loopfunc:true */
+                       .each( checkAndFocus );
+       }
+};
+
 /**
  * Handle outline widget select events.
  *
@@ -8918,7 +9261,7 @@ OO.ui.BookletLayout.prototype.setPage = function ( name ) {
                if ( this.outlined ) {
                        selectedItem = this.outlineSelectWidget.getSelectedItem();
                        if ( selectedItem && selectedItem.getData() !== name ) {
-                               this.outlineSelectWidget.selectItem( this.outlineSelectWidget.getItemFromData( name ) );
+                               this.outlineSelectWidget.selectItemByData( name );
                        }
                }
                if ( page ) {
@@ -8956,65 +9299,657 @@ OO.ui.BookletLayout.prototype.selectFirstSelectablePage = function () {
 };
 
 /**
- * PanelLayouts expand to cover the entire area of their parent. They can be configured with scrolling, padding,
- * and a frame, and are often used together with {@link OO.ui.StackLayout StackLayouts}.
+ * IndexLayouts contain {@link OO.ui.CardLayout card layouts} as well as
+ * {@link OO.ui.TabSelectWidget tabs} that allow users to easily navigate through the cards and
+ * select which one to display. By default, only one card is displayed at a time. When a user
+ * navigates to a new card, the index layout automatically focuses on the first focusable element,
+ * unless the default setting is changed.
+ *
+ * TODO: This class is similar to BookletLayout, we may want to refactor to reduce duplication
  *
  *     @example
- *     // Example of a panel layout
- *     var panel = new OO.ui.PanelLayout( {
- *         expanded: false,
- *         framed: true,
- *         padded: true,
- *         $content: $( '<p>A panel layout with padding and a frame.</p>' )
- *     } );
- *     $( 'body' ).append( panel.$element );
+ *     // Example of a IndexLayout that contains two CardLayouts.
+ *
+ *     function CardOneLayout( name, config ) {
+ *         CardOneLayout.super.call( this, name, config );
+ *         this.$element.append( '<p>First card</p>' );
+ *     }
+ *     OO.inheritClass( CardOneLayout, OO.ui.CardLayout );
+ *     CardOneLayout.prototype.setupTabItem = function () {
+ *         this.tabItem.setLabel( 'Card One' );
+ *     };
+ *
+ *     function CardTwoLayout( name, config ) {
+ *         CardTwoLayout.super.call( this, name, config );
+ *         this.$element.append( '<p>Second card</p>' );
+ *     }
+ *     OO.inheritClass( CardTwoLayout, OO.ui.CardLayout );
+ *     CardTwoLayout.prototype.setupTabItem = function () {
+ *         this.tabItem.setLabel( 'Card Two' );
+ *     };
+ *
+ *     var card1 = new CardOneLayout( 'one' ),
+ *         card2 = new CardTwoLayout( 'two' );
+ *
+ *     var index = new OO.ui.IndexLayout();
+ *
+ *     index.addCards ( [ card1, card2 ] );
+ *     $( 'body' ).append( index.$element );
  *
  * @class
- * @extends OO.ui.Layout
+ * @extends OO.ui.MenuLayout
  *
  * @constructor
  * @param {Object} [config] Configuration options
- * @cfg {boolean} [scrollable=false] Allow vertical scrolling
- * @cfg {boolean} [padded=false] Add padding between the content and the edges of the panel.
- * @cfg {boolean} [expanded=true] Expand the panel to fill the entire parent element.
- * @cfg {boolean} [framed=false] Render the panel with a frame to visually separate it from outside content.
+ * @cfg {boolean} [continuous=false] Show all cards, one after another
+ * @cfg {boolean} [autoFocus=true] Focus on the first focusable element when a new card is displayed.
  */
-OO.ui.PanelLayout = function OoUiPanelLayout( config ) {
+OO.ui.IndexLayout = function OoUiIndexLayout( config ) {
        // Configuration initialization
-       config = $.extend( {
-               scrollable: false,
-               padded: false,
-               expanded: true,
-               framed: false
-       }, config );
+       config = $.extend( {}, config, { menuPosition: 'top' } );
 
        // Parent constructor
-       OO.ui.PanelLayout.super.call( this, config );
+       OO.ui.IndexLayout.super.call( this, config );
 
-       // Initialization
-       this.$element.addClass( 'oo-ui-panelLayout' );
-       if ( config.scrollable ) {
-               this.$element.addClass( 'oo-ui-panelLayout-scrollable' );
-       }
-       if ( config.padded ) {
-               this.$element.addClass( 'oo-ui-panelLayout-padded' );
-       }
-       if ( config.expanded ) {
-               this.$element.addClass( 'oo-ui-panelLayout-expanded' );
-       }
-       if ( config.framed ) {
-               this.$element.addClass( 'oo-ui-panelLayout-framed' );
+       // Properties
+       this.currentCardName = null;
+       this.cards = {};
+       this.ignoreFocus = false;
+       this.stackLayout = new OO.ui.StackLayout( { continuous: !!config.continuous } );
+       this.$content.append( this.stackLayout.$element );
+       this.autoFocus = config.autoFocus === undefined || !!config.autoFocus;
+
+       this.tabSelectWidget = new OO.ui.TabSelectWidget();
+       this.tabPanel = new OO.ui.PanelLayout();
+       this.$menu.append( this.tabPanel.$element );
+
+       this.toggleMenu( true );
+
+       // Events
+       this.stackLayout.connect( this, { set: 'onStackLayoutSet' } );
+       this.tabSelectWidget.connect( this, { select: 'onTabSelectWidgetSelect' } );
+       if ( this.autoFocus ) {
+               // Event 'focus' does not bubble, but 'focusin' does
+               this.stackLayout.$element.on( 'focusin', this.onStackLayoutFocus.bind( this ) );
        }
+
+       // Initialization
+       this.$element.addClass( 'oo-ui-indexLayout' );
+       this.stackLayout.$element.addClass( 'oo-ui-indexLayout-stackLayout' );
+       this.tabPanel.$element
+               .addClass( 'oo-ui-indexLayout-tabPanel' )
+               .append( this.tabSelectWidget.$element );
 };
 
 /* Setup */
 
-OO.inheritClass( OO.ui.PanelLayout, OO.ui.Layout );
+OO.inheritClass( OO.ui.IndexLayout, OO.ui.MenuLayout );
+
+/* Events */
 
 /**
- * PageLayouts are used within {@link OO.ui.BookletLayout booklet layouts} to create pages that users can select and display
- * from the booklet's optional {@link OO.ui.OutlineSelectWidget outline} navigation. Pages are usually not instantiated directly,
- * rather extended to include the required content and functionality.
+ * A 'set' event is emitted when a card is {@link #setCard set} to be displayed by the index layout.
+ * @event set
+ * @param {OO.ui.CardLayout} card Current card
+ */
+
+/**
+ * An 'add' event is emitted when cards are {@link #addCards added} to the index layout.
+ *
+ * @event add
+ * @param {OO.ui.CardLayout[]} card Added cards
+ * @param {number} index Index cards were added at
+ */
+
+/**
+ * A 'remove' event is emitted when cards are {@link #clearCards cleared} or
+ * {@link #removeCards removed} from the index.
+ *
+ * @event remove
+ * @param {OO.ui.CardLayout[]} cards Removed cards
+ */
+
+/* Methods */
+
+/**
+ * Handle stack layout focus.
+ *
+ * @private
+ * @param {jQuery.Event} e Focusin event
+ */
+OO.ui.IndexLayout.prototype.onStackLayoutFocus = function ( e ) {
+       var name, $target;
+
+       // Find the card that an element was focused within
+       $target = $( e.target ).closest( '.oo-ui-cardLayout' );
+       for ( name in this.cards ) {
+               // Check for card match, exclude current card to find only card changes
+               if ( this.cards[ name ].$element[ 0 ] === $target[ 0 ] && name !== this.currentCardName ) {
+                       this.setCard( name );
+                       break;
+               }
+       }
+};
+
+/**
+ * Handle stack layout set events.
+ *
+ * @private
+ * @param {OO.ui.PanelLayout|null} card The card panel that is now the current panel
+ */
+OO.ui.IndexLayout.prototype.onStackLayoutSet = function ( card ) {
+       var layout = this;
+       if ( card ) {
+               card.scrollElementIntoView( { complete: function () {
+                       if ( layout.autoFocus ) {
+                               layout.focus();
+                       }
+               } } );
+       }
+};
+
+/**
+ * Focus the first input in the current 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 ) {
+       var $input, card,
+               items = this.stackLayout.getItems();
+
+       if ( itemIndex !== undefined && items[ itemIndex ] ) {
+               card = items[ itemIndex ];
+       } else {
+               card = this.stackLayout.getCurrentItem();
+       }
+
+       if ( !card ) {
+               this.selectFirstSelectableCard();
+               card = this.stackLayout.getCurrentItem();
+       }
+       if ( !card ) {
+               return;
+       }
+       // Only change the focus if is not already in the current card
+       if ( !card.$element.find( ':focus' ).length ) {
+               $input = card.$element.find( ':input:first' );
+               if ( $input.length ) {
+                       $input[ 0 ].focus();
+               }
+       }
+};
+
+/**
+ * Find the first focusable input in the index layout and focus
+ * on it.
+ */
+OO.ui.IndexLayout.prototype.focusFirstFocusable = function () {
+       var i, len,
+               found = false,
+               items = this.stackLayout.getItems(),
+               checkAndFocus = function () {
+                       if ( OO.ui.isFocusableElement( $( this ) ) ) {
+                               $( this ).focus();
+                               found = true;
+                               return false;
+                       }
+               };
+
+       for ( i = 0, len = items.length; i < len; i++ ) {
+               if ( found ) {
+                       break;
+               }
+               // Find all potentially focusable elements in the item
+               // and check if they are focusable
+               items[i].$element
+                       .find( 'input, select, textarea, button, object' )
+                       .each( checkAndFocus );
+       }
+};
+
+/**
+ * Handle tab widget select events.
+ *
+ * @private
+ * @param {OO.ui.OptionWidget|null} item Selected item
+ */
+OO.ui.IndexLayout.prototype.onTabSelectWidgetSelect = function ( item ) {
+       if ( item ) {
+               this.setCard( item.getData() );
+       }
+};
+
+/**
+ * Get the card closest to the specified card.
+ *
+ * @param {OO.ui.CardLayout} card Card to use as a reference point
+ * @return {OO.ui.CardLayout|null} Card closest to the specified card
+ */
+OO.ui.IndexLayout.prototype.getClosestCard = function ( card ) {
+       var next, prev, level,
+               cards = this.stackLayout.getItems(),
+               index = $.inArray( card, cards );
+
+       if ( index !== -1 ) {
+               next = cards[ index + 1 ];
+               prev = cards[ index - 1 ];
+               // Prefer adjacent cards at the same level
+               level = this.tabSelectWidget.getItemFromData( card.getName() ).getLevel();
+               if (
+                       prev &&
+                       level === this.tabSelectWidget.getItemFromData( prev.getName() ).getLevel()
+               ) {
+                       return prev;
+               }
+               if (
+                       next &&
+                       level === this.tabSelectWidget.getItemFromData( next.getName() ).getLevel()
+               ) {
+                       return next;
+               }
+       }
+       return prev || next || null;
+};
+
+/**
+ * Get the tabs widget.
+ *
+ * @return {OO.ui.TabSelectWidget} Tabs widget
+ */
+OO.ui.IndexLayout.prototype.getTabs = function () {
+       return this.tabSelectWidget;
+};
+
+/**
+ * Get a card by its symbolic name.
+ *
+ * @param {string} name Symbolic name of card
+ * @return {OO.ui.CardLayout|undefined} Card, if found
+ */
+OO.ui.IndexLayout.prototype.getCard = function ( name ) {
+       return this.cards[ name ];
+};
+
+/**
+ * Get the current card.
+ *
+ * @return {OO.ui.CardLayout|undefined} Current card, if found
+ */
+OO.ui.IndexLayout.prototype.getCurrentCard = function () {
+       var name = this.getCurrentCardName();
+       return name ? this.getCard( name ) : undefined;
+};
+
+/**
+ * Get the symbolic name of the current card.
+ *
+ * @return {string|null} Symbolic name of the current card
+ */
+OO.ui.IndexLayout.prototype.getCurrentCardName = function () {
+       return this.currentCardName;
+};
+
+/**
+ * Add cards to the index layout
+ *
+ * When cards are added with the same names as existing cards, the existing cards will be
+ * automatically removed before the new cards are added.
+ *
+ * @param {OO.ui.CardLayout[]} cards Cards to add
+ * @param {number} index Index of the insertion point
+ * @fires add
+ * @chainable
+ */
+OO.ui.IndexLayout.prototype.addCards = function ( cards, index ) {
+       var i, len, name, card, item, currentIndex,
+               stackLayoutCards = this.stackLayout.getItems(),
+               remove = [],
+               items = [];
+
+       // Remove cards with same names
+       for ( i = 0, len = cards.length; i < len; i++ ) {
+               card = cards[ i ];
+               name = card.getName();
+
+               if ( Object.prototype.hasOwnProperty.call( this.cards, name ) ) {
+                       // Correct the insertion index
+                       currentIndex = $.inArray( this.cards[ name ], stackLayoutCards );
+                       if ( currentIndex !== -1 && currentIndex + 1 < index ) {
+                               index--;
+                       }
+                       remove.push( this.cards[ name ] );
+               }
+       }
+       if ( remove.length ) {
+               this.removeCards( remove );
+       }
+
+       // Add new cards
+       for ( i = 0, len = cards.length; i < len; i++ ) {
+               card = cards[ i ];
+               name = card.getName();
+               this.cards[ card.getName() ] = card;
+               item = new OO.ui.TabOptionWidget( { data: name } );
+               card.setTabItem( item );
+               items.push( item );
+       }
+
+       if ( items.length ) {
+               this.tabSelectWidget.addItems( items, index );
+               this.selectFirstSelectableCard();
+       }
+       this.stackLayout.addItems( cards, index );
+       this.emit( 'add', cards, index );
+
+       return this;
+};
+
+/**
+ * Remove the specified cards from the index layout.
+ *
+ * To remove all cards from the index, you may wish to use the #clearCards method instead.
+ *
+ * @param {OO.ui.CardLayout[]} cards An array of cards to remove
+ * @fires remove
+ * @chainable
+ */
+OO.ui.IndexLayout.prototype.removeCards = function ( cards ) {
+       var i, len, name, card,
+               items = [];
+
+       for ( i = 0, len = cards.length; i < len; i++ ) {
+               card = cards[ i ];
+               name = card.getName();
+               delete this.cards[ name ];
+               items.push( this.tabSelectWidget.getItemFromData( name ) );
+               card.setTabItem( null );
+       }
+       if ( items.length ) {
+               this.tabSelectWidget.removeItems( items );
+               this.selectFirstSelectableCard();
+       }
+       this.stackLayout.removeItems( cards );
+       this.emit( 'remove', cards );
+
+       return this;
+};
+
+/**
+ * Clear all cards from the index layout.
+ *
+ * To remove only a subset of cards from the index, use the #removeCards method.
+ *
+ * @fires remove
+ * @chainable
+ */
+OO.ui.IndexLayout.prototype.clearCards = function () {
+       var i, len,
+               cards = this.stackLayout.getItems();
+
+       this.cards = {};
+       this.currentCardName = null;
+       this.tabSelectWidget.clearItems();
+       for ( i = 0, len = cards.length; i < len; i++ ) {
+               cards[ i ].setTabItem( null );
+       }
+       this.stackLayout.clearItems();
+
+       this.emit( 'remove', cards );
+
+       return this;
+};
+
+/**
+ * Set the current card by symbolic name.
+ *
+ * @fires set
+ * @param {string} name Symbolic name of card
+ */
+OO.ui.IndexLayout.prototype.setCard = function ( name ) {
+       var selectedItem,
+               $focused,
+               card = this.cards[ name ];
+
+       if ( name !== this.currentCardName ) {
+               selectedItem = this.tabSelectWidget.getSelectedItem();
+               if ( selectedItem && selectedItem.getData() !== name ) {
+                       this.tabSelectWidget.selectItemByData( name );
+               }
+               if ( card ) {
+                       if ( this.currentCardName && this.cards[ this.currentCardName ] ) {
+                               this.cards[ this.currentCardName ].setActive( false );
+                               // Blur anything focused if the next card doesn't have anything focusable - this
+                               // is not needed if the next card has something focusable because once it is focused
+                               // this blur happens automatically
+                               if ( this.autoFocus && !card.$element.find( ':input' ).length ) {
+                                       $focused = this.cards[ this.currentCardName ].$element.find( ':focus' );
+                                       if ( $focused.length ) {
+                                               $focused[ 0 ].blur();
+                                       }
+                               }
+                       }
+                       this.currentCardName = name;
+                       this.stackLayout.setItem( card );
+                       card.setActive( true );
+                       this.emit( 'set', card );
+               }
+       }
+};
+
+/**
+ * Select the first selectable card.
+ *
+ * @chainable
+ */
+OO.ui.IndexLayout.prototype.selectFirstSelectableCard = function () {
+       if ( !this.tabSelectWidget.getSelectedItem() ) {
+               this.tabSelectWidget.selectItem( this.tabSelectWidget.getFirstSelectableItem() );
+       }
+
+       return this;
+};
+
+/**
+ * PanelLayouts expand to cover the entire area of their parent. They can be configured with scrolling, padding,
+ * and a frame, and are often used together with {@link OO.ui.StackLayout StackLayouts}.
+ *
+ *     @example
+ *     // Example of a panel layout
+ *     var panel = new OO.ui.PanelLayout( {
+ *         expanded: false,
+ *         framed: true,
+ *         padded: true,
+ *         $content: $( '<p>A panel layout with padding and a frame.</p>' )
+ *     } );
+ *     $( 'body' ).append( panel.$element );
+ *
+ * @class
+ * @extends OO.ui.Layout
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {boolean} [scrollable=false] Allow vertical scrolling
+ * @cfg {boolean} [padded=false] Add padding between the content and the edges of the panel.
+ * @cfg {boolean} [expanded=true] Expand the panel to fill the entire parent element.
+ * @cfg {boolean} [framed=false] Render the panel with a frame to visually separate it from outside content.
+ */
+OO.ui.PanelLayout = function OoUiPanelLayout( config ) {
+       // Configuration initialization
+       config = $.extend( {
+               scrollable: false,
+               padded: false,
+               expanded: true,
+               framed: false
+       }, config );
+
+       // Parent constructor
+       OO.ui.PanelLayout.super.call( this, config );
+
+       // Initialization
+       this.$element.addClass( 'oo-ui-panelLayout' );
+       if ( config.scrollable ) {
+               this.$element.addClass( 'oo-ui-panelLayout-scrollable' );
+       }
+       if ( config.padded ) {
+               this.$element.addClass( 'oo-ui-panelLayout-padded' );
+       }
+       if ( config.expanded ) {
+               this.$element.addClass( 'oo-ui-panelLayout-expanded' );
+       }
+       if ( config.framed ) {
+               this.$element.addClass( 'oo-ui-panelLayout-framed' );
+       }
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.PanelLayout, OO.ui.Layout );
+
+/**
+ * CardLayouts are used within {@link OO.ui.IndexLayout index layouts} to create cards that users can select and display
+ * from the index's optional {@link OO.ui.TabSelectWidget tab} navigation. Cards are usually not instantiated directly,
+ * rather extended to include the required content and functionality.
+ *
+ * Each card must have a unique symbolic name, which is passed to the constructor. In addition, the card's tab
+ * item is customized (with a label) using the #setupTabItem method. See
+ * {@link OO.ui.IndexLayout IndexLayout} for an example.
+ *
+ * @class
+ * @extends OO.ui.PanelLayout
+ *
+ * @constructor
+ * @param {string} name Unique symbolic name of card
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.CardLayout = function OoUiCardLayout( name, config ) {
+       // Allow passing positional parameters inside the config object
+       if ( OO.isPlainObject( name ) && config === undefined ) {
+               config = name;
+               name = config.name;
+       }
+
+       // Configuration initialization
+       config = $.extend( { scrollable: true }, config );
+
+       // Parent constructor
+       OO.ui.CardLayout.super.call( this, config );
+
+       // Properties
+       this.name = name;
+       this.tabItem = null;
+       this.active = false;
+
+       // Initialization
+       this.$element.addClass( 'oo-ui-cardLayout' );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.CardLayout, OO.ui.PanelLayout );
+
+/* Events */
+
+/**
+ * An 'active' event is emitted when the card becomes active. Cards become active when they are
+ * shown in a index layout that is configured to display only one card at a time.
+ *
+ * @event active
+ * @param {boolean} active Card is active
+ */
+
+/* Methods */
+
+/**
+ * Get the symbolic name of the card.
+ *
+ * @return {string} Symbolic name of card
+ */
+OO.ui.CardLayout.prototype.getName = function () {
+       return this.name;
+};
+
+/**
+ * Check if card is active.
+ *
+ * Cards become active when they are shown in a {@link OO.ui.IndexLayout index layout} that is configured to display
+ * only one card at a time. Additional CSS is applied to the card's tab item to reflect the active state.
+ *
+ * @return {boolean} Card is active
+ */
+OO.ui.CardLayout.prototype.isActive = function () {
+       return this.active;
+};
+
+/**
+ * Get tab item.
+ *
+ * The tab item allows users to access the card from the index's tab
+ * navigation. The tab item itself can be customized (with a label, level, etc.) using the #setupTabItem method.
+ *
+ * @return {OO.ui.TabOptionWidget|null} Tab option widget
+ */
+OO.ui.CardLayout.prototype.getTabItem = function () {
+       return this.tabItem;
+};
+
+/**
+ * Set or unset the tab item.
+ *
+ * Specify a {@link OO.ui.TabOptionWidget tab option} to set it,
+ * or `null` to clear the tab item. To customize the tab item itself (e.g., to set a label or tab
+ * level), use #setupTabItem instead of this method.
+ *
+ * @param {OO.ui.TabOptionWidget|null} tabItem Tab option widget, null to clear
+ * @chainable
+ */
+OO.ui.CardLayout.prototype.setTabItem = function ( tabItem ) {
+       this.tabItem = tabItem || null;
+       if ( tabItem ) {
+               this.setupTabItem();
+       }
+       return this;
+};
+
+/**
+ * Set up the tab item.
+ *
+ * Use this method to customize the tab item (e.g., to add a label or tab level). To set or unset
+ * the tab item itself (with a {@link OO.ui.TabOptionWidget tab option} or `null`), use
+ * the #setTabItem method instead.
+ *
+ * @param {OO.ui.TabOptionWidget} tabItem Tab option widget to set up
+ * @chainable
+ */
+OO.ui.CardLayout.prototype.setupTabItem = function () {
+       return this;
+};
+
+/**
+ * Set the card to its 'active' state.
+ *
+ * Cards become active when they are shown in a index layout that is configured to display only one card at a time. Additional
+ * 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
+ * @fires active
+ */
+OO.ui.CardLayout.prototype.setActive = function ( active ) {
+       active = !!active;
+
+       if ( active !== this.active ) {
+               this.active = active;
+               this.$element.toggleClass( 'oo-ui-cardLayout-active', this.active );
+               this.emit( 'active', this.active );
+       }
+};
+
+/**
+ * PageLayouts are used within {@link OO.ui.BookletLayout booklet layouts} to create pages that users can select and display
+ * from the booklet's optional {@link OO.ui.OutlineSelectWidget outline} navigation. Pages are usually not instantiated directly,
+ * rather extended to include the required content and functionality.
  *
  * Each page must have a unique symbolic name, which is passed to the constructor. In addition, the page's outline
  * item is customized (with a label, outline level, etc.) using the #setupOutlineItem method. See
@@ -9412,6 +10347,7 @@ OO.ui.BarToolGroup.static.name = 'bar';
  * @mixins OO.ui.LabelElement
  * @mixins OO.ui.TitledElement
  * @mixins OO.ui.ClippableElement
+ * @mixins OO.ui.TabIndexedElement
  *
  * @constructor
  * @param {OO.ui.Toolbar} toolbar
@@ -9431,23 +10367,26 @@ OO.ui.PopupToolGroup = function OoUiPopupToolGroup( toolbar, config ) {
        // Parent constructor
        OO.ui.PopupToolGroup.super.call( this, toolbar, config );
 
+       // Properties
+       this.active = false;
+       this.dragging = false;
+       this.onBlurHandler = this.onBlur.bind( this );
+       this.$handle = $( '<span>' );
+
        // Mixin constructors
        OO.ui.IconElement.call( this, config );
        OO.ui.IndicatorElement.call( this, config );
        OO.ui.LabelElement.call( this, config );
        OO.ui.TitledElement.call( this, config );
        OO.ui.ClippableElement.call( this, $.extend( {}, config, { $clippable: this.$group } ) );
-
-       // Properties
-       this.active = false;
-       this.dragging = false;
-       this.onBlurHandler = this.onBlur.bind( this );
-       this.$handle = $( '<span>' );
+       OO.ui.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$handle } ) );
 
        // Events
        this.$handle.on( {
-               mousedown: this.onHandlePointerDown.bind( this ),
-               mouseup: this.onHandlePointerUp.bind( this )
+               keydown: this.onHandleMouseKeyDown.bind( this ),
+               keyup: this.onHandleMouseKeyUp.bind( this ),
+               mousedown: this.onHandleMouseKeyDown.bind( this ),
+               mouseup: this.onHandleMouseKeyUp.bind( this )
        } );
 
        // Initialization
@@ -9477,8 +10416,7 @@ OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.IndicatorElement );
 OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.LabelElement );
 OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.TitledElement );
 OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.ClippableElement );
-
-/* Static Properties */
+OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.TabIndexedElement );
 
 /* Methods */
 
@@ -9497,9 +10435,9 @@ OO.ui.PopupToolGroup.prototype.setDisabled = function () {
 /**
  * Handle focus being lost.
  *
- * The event is actually generated from a mouseup, so it is not a normal blur event object.
+ * The event is actually generated from a mouseup/keyup, so it is not a normal blur event object.
  *
- * @param {jQuery.Event} e Mouse up event
+ * @param {jQuery.Event} e Mouse up or key up event
  */
 OO.ui.PopupToolGroup.prototype.onBlur = function ( e ) {
        // Only deactivate when clicking outside the dropdown element
@@ -9511,33 +10449,44 @@ OO.ui.PopupToolGroup.prototype.onBlur = function ( e ) {
 /**
  * @inheritdoc
  */
-OO.ui.PopupToolGroup.prototype.onPointerUp = function ( e ) {
+OO.ui.PopupToolGroup.prototype.onMouseKeyUp = function ( e ) {
        // Only close toolgroup when a tool was actually selected
-       if ( !this.isDisabled() && e.which === 1 && this.pressed && this.pressed === this.getTargetTool( e ) ) {
+       if (
+               !this.isDisabled() && this.pressed && this.pressed === this.getTargetTool( e ) &&
+               ( e.which === 1 || e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER )
+       ) {
                this.setActive( false );
        }
-       return OO.ui.PopupToolGroup.super.prototype.onPointerUp.call( this, e );
+       return OO.ui.PopupToolGroup.super.prototype.onMouseKeyUp.call( this, e );
 };
 
 /**
- * Handle mouse up events.
+ * Handle mouse up and key up events.
  *
- * @param {jQuery.Event} e Mouse up event
+ * @param {jQuery.Event} e Mouse up or key up event
  */
-OO.ui.PopupToolGroup.prototype.onHandlePointerUp = function () {
-       return false;
+OO.ui.PopupToolGroup.prototype.onHandleMouseKeyUp = function ( e ) {
+       if (
+               !this.isDisabled() &&
+               ( e.which === 1 || e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER )
+       ) {
+               return false;
+       }
 };
 
 /**
- * Handle mouse down events.
+ * Handle mouse down and key down events.
  *
- * @param {jQuery.Event} e Mouse down event
+ * @param {jQuery.Event} e Mouse down or key down event
  */
-OO.ui.PopupToolGroup.prototype.onHandlePointerDown = function ( e ) {
-       if ( !this.isDisabled() && e.which === 1 ) {
+OO.ui.PopupToolGroup.prototype.onHandleMouseKeyDown = function ( e ) {
+       if (
+               !this.isDisabled() &&
+               ( e.which === 1 || e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER )
+       ) {
                this.setActive( !this.active );
+               return false;
        }
-       return false;
 };
 
 /**
@@ -9551,6 +10500,7 @@ OO.ui.PopupToolGroup.prototype.setActive = function ( value ) {
                this.active = value;
                if ( value ) {
                        this.getElementDocument().addEventListener( 'mouseup', this.onBlurHandler, true );
+                       this.getElementDocument().addEventListener( 'keyup', this.onBlurHandler, true );
 
                        // Try anchoring the popup to the left first
                        this.$element.addClass( 'oo-ui-popupToolGroup-active oo-ui-popupToolGroup-left' );
@@ -9565,6 +10515,7 @@ OO.ui.PopupToolGroup.prototype.setActive = function ( value ) {
                        }
                } else {
                        this.getElementDocument().removeEventListener( 'mouseup', this.onBlurHandler, true );
+                       this.getElementDocument().removeEventListener( 'keyup', this.onBlurHandler, true );
                        this.$element.removeClass(
                                'oo-ui-popupToolGroup-active oo-ui-popupToolGroup-left  oo-ui-popupToolGroup-right'
                        );
@@ -9621,8 +10572,6 @@ OO.inheritClass( OO.ui.ListToolGroup, OO.ui.PopupToolGroup );
 
 /* Static Properties */
 
-OO.ui.ListToolGroup.static.accelTooltips = true;
-
 OO.ui.ListToolGroup.static.name = 'list';
 
 /* Methods */
@@ -9683,16 +10632,18 @@ OO.ui.ListToolGroup.prototype.getExpandCollapseTool = function () {
 /**
  * @inheritdoc
  */
-OO.ui.ListToolGroup.prototype.onPointerUp = function ( e ) {
-       var ret = OO.ui.ListToolGroup.super.prototype.onPointerUp.call( this, e );
-
+OO.ui.ListToolGroup.prototype.onMouseKeyUp = function ( e ) {
        // Do not close the popup when the user wants to show more/fewer tools
-       if ( $( e.target ).closest( '.oo-ui-tool-name-more-fewer' ).length ) {
-               // Prevent the popup list from being hidden
-               this.setActive( true );
+       if (
+               $( e.target ).closest( '.oo-ui-tool-name-more-fewer' ).length &&
+               ( e.which === 1 || e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER )
+       ) {
+               // HACK: Prevent the popup list from being hidden. Skip the PopupToolGroup implementation (which
+               // hides the popup list when a tool is selected) and call ToolGroup's implementation directly.
+               return OO.ui.ListToolGroup.super.super.prototype.onMouseKeyUp.call( this, e );
+       } else {
+               return OO.ui.ListToolGroup.super.prototype.onMouseKeyUp.call( this, e );
        }
-
-       return ret;
 };
 
 OO.ui.ListToolGroup.prototype.updateCollapsibleState = function () {
@@ -9743,8 +10694,6 @@ OO.inheritClass( OO.ui.MenuToolGroup, OO.ui.PopupToolGroup );
 
 /* Static Properties */
 
-OO.ui.MenuToolGroup.static.accelTooltips = true;
-
 OO.ui.MenuToolGroup.static.name = 'menu';
 
 /* Methods */
@@ -9853,6 +10802,9 @@ OO.ui.ToolGroupTool = function OoUiToolGroupTool( toolGroup, config ) {
        // Properties
        this.innerToolGroup = this.createGroup( this.constructor.static.groupConfig );
 
+       // Events
+       this.innerToolGroup.connect( this, { disable: 'onToolGroupDisable' } );
+
        // Initialization
        this.$link.remove();
        this.$element
@@ -9885,6 +10837,16 @@ OO.ui.ToolGroupTool.prototype.onSelect = function () {
        return false;
 };
 
+/**
+ * Synchronize disabledness state of the tool with the inner toolgroup.
+ *
+ * @private
+ * @param {boolean} disabled Element is disabled
+ */
+OO.ui.ToolGroupTool.prototype.onToolGroupDisable = function ( disabled ) {
+       this.setDisabled( disabled );
+};
+
 /**
  * Handle the toolbar state being updated.
  *
@@ -10013,7 +10975,7 @@ OO.ui.ItemWidget.prototype.setElementGroup = function ( group ) {
 /**
  * OutlineControlsWidget is a set of controls for an {@link OO.ui.OutlineSelectWidget outline select widget}.
  * Controls include moving items up and down, removing items, and adding different kinds of items.
- * ####Currently, this class is only used by {@link OO.ui.BookletLayout BookletLayouts}.####
+ * ####Currently, this class is only used by {@link OO.ui.BookletLayout booklet layouts}.####
  *
  * @class
  * @extends OO.ui.Widget
@@ -10157,11 +11119,12 @@ OO.ui.OutlineControlsWidget.prototype.onOutlineChange = function () {
 };
 
 /**
- * ToggleWidget is mixed into other classes to create widgets with an on/off state.
+ * ToggleWidget implements basic behavior of widgets with an on/off state.
  * Please see OO.ui.ToggleButtonWidget and OO.ui.ToggleSwitchWidget for examples.
  *
  * @abstract
  * @class
+ * @extends OO.ui.Widget
  *
  * @constructor
  * @param {Object} [config] Configuration options
@@ -10172,6 +11135,9 @@ OO.ui.ToggleWidget = function OoUiToggleWidget( config ) {
        // Configuration initialization
        config = config || {};
 
+       // Parent constructor
+       OO.ui.ToggleWidget.super.call( this, config );
+
        // Properties
        this.value = null;
 
@@ -10180,6 +11146,10 @@ OO.ui.ToggleWidget = function OoUiToggleWidget( config ) {
        this.setValue( !!config.value );
 };
 
+/* Setup */
+
+OO.inheritClass( OO.ui.ToggleWidget, OO.ui.Widget );
+
 /* Events */
 
 /**
@@ -10311,8 +11281,7 @@ OO.mixinClass( OO.ui.ButtonGroupWidget, OO.ui.GroupElement );
  */
 OO.ui.ButtonWidget = function OoUiButtonWidget( config ) {
        // Configuration initialization
-       // FIXME: The `nofollow` alias is deprecated and will be removed (T89767)
-       config = $.extend( { noFollow: config && config.nofollow }, config );
+       config = config || {};
 
        // Parent constructor
        OO.ui.ButtonWidget.super.call( this, config );
@@ -10330,7 +11299,9 @@ OO.ui.ButtonWidget = function OoUiButtonWidget( config ) {
        this.href = null;
        this.target = null;
        this.noFollow = false;
-       this.isHyperlink = false;
+
+       // Events
+       this.connect( this, { disable: 'onDisable' } );
 
        // Initialization
        this.$button.append( this.$icon, this.$label, this.$indicator );
@@ -10379,28 +11350,6 @@ OO.ui.ButtonWidget.prototype.onMouseUp = function ( e ) {
        return OO.ui.ButtonElement.prototype.onMouseUp.call( this, e );
 };
 
-/**
- * @inheritdoc
- */
-OO.ui.ButtonWidget.prototype.onClick = function ( e ) {
-       var ret = OO.ui.ButtonElement.prototype.onClick.call( this, e );
-       if ( this.isHyperlink ) {
-               return true;
-       }
-       return ret;
-};
-
-/**
- * @inheritdoc
- */
-OO.ui.ButtonWidget.prototype.onKeyPress = function ( e ) {
-       var ret = OO.ui.ButtonElement.prototype.onKeyPress.call( this, e );
-       if ( this.isHyperlink ) {
-               return true;
-       }
-       return ret;
-};
-
 /**
  * Get hyperlink location.
  *
@@ -10438,18 +11387,39 @@ OO.ui.ButtonWidget.prototype.setHref = function ( href ) {
 
        if ( href !== this.href ) {
                this.href = href;
-               if ( href !== null ) {
-                       this.$button.attr( 'href', href );
-                       this.isHyperlink = true;
-               } else {
-                       this.$button.removeAttr( 'href' );
-                       this.isHyperlink = false;
-               }
+               this.updateHref();
+       }
+
+       return this;
+};
+
+/**
+ * Update the `href` attribute, in case of changes to href or
+ * disabled state.
+ *
+ * @private
+ * @chainable
+ */
+OO.ui.ButtonWidget.prototype.updateHref = function () {
+       if ( this.href !== null && !this.isDisabled() ) {
+               this.$button.attr( 'href', this.href );
+       } else {
+               this.$button.removeAttr( 'href' );
        }
 
        return this;
 };
 
+/**
+ * Handle disable events.
+ *
+ * @private
+ * @param {boolean} disabled Element is disabled
+ */
+OO.ui.ButtonWidget.prototype.onDisable = function () {
+       this.updateHref();
+};
+
 /**
  * Set hyperlink target.
  *
@@ -10673,7 +11643,7 @@ OO.ui.ActionWidget.prototype.toggle = function () {
  *         popup: {
  *             $content: $( '<p>Additional options here.</p>' ),
  *             padded: true,
- *             align: 'left'
+ *             align: 'force-left'
  *         }
  *     } );
  *     // Append the button to the DOM.
@@ -10742,8 +11712,14 @@ OO.ui.PopupButtonWidget.prototype.onAction = function () {
  * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Buttons_and_Switches#Toggle_buttons
  *
  * @class
- * @extends OO.ui.ButtonWidget
- * @mixins OO.ui.ToggleWidget
+ * @extends OO.ui.ToggleWidget
+ * @mixins OO.ui.ButtonElement
+ * @mixins OO.ui.IconElement
+ * @mixins OO.ui.IndicatorElement
+ * @mixins OO.ui.LabelElement
+ * @mixins OO.ui.TitledElement
+ * @mixins OO.ui.FlaggedElement
+ * @mixins OO.ui.TabIndexedElement
  *
  * @constructor
  * @param {Object} [config] Configuration options
@@ -10758,26 +11734,41 @@ OO.ui.ToggleButtonWidget = function OoUiToggleButtonWidget( config ) {
        OO.ui.ToggleButtonWidget.super.call( this, config );
 
        // Mixin constructors
-       OO.ui.ToggleWidget.call( this, config );
+       OO.ui.ButtonElement.call( this, config );
+       OO.ui.IconElement.call( this, config );
+       OO.ui.IndicatorElement.call( this, config );
+       OO.ui.LabelElement.call( this, config );
+       OO.ui.TitledElement.call( this, $.extend( {}, config, { $titled: this.$button } ) );
+       OO.ui.FlaggedElement.call( this, config );
+       OO.ui.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$button } ) );
 
        // Events
        this.connect( this, { click: 'onAction' } );
 
        // Initialization
-       this.$element.addClass( 'oo-ui-toggleButtonWidget' );
+       this.$button.append( this.$icon, this.$label, this.$indicator );
+       this.$element
+               .addClass( 'oo-ui-toggleButtonWidget' )
+               .append( this.$button );
 };
 
 /* Setup */
 
-OO.inheritClass( OO.ui.ToggleButtonWidget, OO.ui.ButtonWidget );
-OO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.ToggleWidget );
+OO.inheritClass( OO.ui.ToggleButtonWidget, OO.ui.ToggleWidget );
+OO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.ButtonElement );
+OO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.IconElement );
+OO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.IndicatorElement );
+OO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.LabelElement );
+OO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.TitledElement );
+OO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.FlaggedElement );
+OO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.TabIndexedElement );
 
 /* Methods */
 
 /**
+ * Handle the button action being triggered.
  *
  * @private
- * Handle the button action being triggered.
  */
 OO.ui.ToggleButtonWidget.prototype.onAction = function () {
        this.setValue( !this.value );
@@ -10789,16 +11780,30 @@ OO.ui.ToggleButtonWidget.prototype.onAction = function () {
 OO.ui.ToggleButtonWidget.prototype.setValue = function ( value ) {
        value = !!value;
        if ( value !== this.value ) {
-               this.$button.attr( 'aria-pressed', value.toString() );
+               // Might be called from parent constructor before ButtonElement constructor
+               if ( this.$button ) {
+                       this.$button.attr( 'aria-pressed', value.toString() );
+               }
                this.setActive( value );
        }
 
-       // Parent method (from mixin)
-       OO.ui.ToggleWidget.prototype.setValue.call( this, value );
+       // Parent method
+       OO.ui.ToggleButtonWidget.super.prototype.setValue.call( this, value );
 
        return this;
 };
 
+/**
+ * @inheritdoc
+ */
+OO.ui.ToggleButtonWidget.prototype.setButtonElement = function ( $button ) {
+       if ( this.$button ) {
+               this.$button.removeAttr( 'aria-pressed' );
+       }
+       OO.ui.ButtonElement.prototype.setButtonElement.call( this, $button );
+       this.$button.attr( 'aria-pressed', this.value.toString() );
+};
+
 /**
  * DropdownWidgets are not menus themselves, rather they contain a menu of options created with
  * OO.ui.MenuOptionWidget. The DropdownWidget takes care of opening and displaying the menu so that
@@ -11290,7 +12295,6 @@ OO.ui.InputWidget.prototype.blur = function () {
  * @mixins OO.ui.IndicatorElement
  * @mixins OO.ui.LabelElement
  * @mixins OO.ui.TitledElement
- * @mixins OO.ui.FlaggedElement
  *
  * @constructor
  * @param {Object} [config] Configuration options
@@ -11316,7 +12320,6 @@ OO.ui.ButtonInputWidget = function OoUiButtonInputWidget( config ) {
        OO.ui.IndicatorElement.call( this, config );
        OO.ui.LabelElement.call( this, config );
        OO.ui.TitledElement.call( this, $.extend( {}, config, { $titled: this.$input } ) );
-       OO.ui.FlaggedElement.call( this, config );
 
        // Initialization
        if ( !config.useInputTag ) {
@@ -11333,7 +12336,6 @@ OO.mixinClass( OO.ui.ButtonInputWidget, OO.ui.IconElement );
 OO.mixinClass( OO.ui.ButtonInputWidget, OO.ui.IndicatorElement );
 OO.mixinClass( OO.ui.ButtonInputWidget, OO.ui.LabelElement );
 OO.mixinClass( OO.ui.ButtonInputWidget, OO.ui.TitledElement );
-OO.mixinClass( OO.ui.ButtonInputWidget, OO.ui.FlaggedElement );
 
 /* Methods */
 
@@ -11392,10 +12394,12 @@ OO.ui.ButtonInputWidget.prototype.setValue = function ( value ) {
 
 /**
  * CheckboxInputWidgets, like HTML checkboxes, can be selected and/or configured with a value.
- *  Note that these {@link OO.ui.InputWidget input widgets} are best laid out
+ * Note that these {@link OO.ui.InputWidget input widgets} are best laid out
  * in {@link OO.ui.FieldLayout field layouts} that use the {@link OO.ui.FieldLayout#align inline}
  * alignment. For more information, please see the [OOjs UI documentation on MediaWiki][1].
  *
+ * This widget can be used inside a HTML form, such as a OO.ui.FormLayout.
+ *
  *     @example
  *     // An example of selected, unselected, and disabled checkbox inputs
  *     var checkbox1=new OO.ui.CheckboxInputWidget( {
@@ -11501,8 +12505,8 @@ OO.ui.CheckboxInputWidget.prototype.isSelected = function () {
 
 /**
  * DropdownInputWidget is a {@link OO.ui.DropdownWidget DropdownWidget} intended to be used
- * within a {@link OO.ui.FormLayout form}. The selected value is synchronized with the value
- * of  a hidden HTML `input` tag. Please see the [OOjs UI documentation on MediaWiki][1] for
+ * within a HTML form, such as a OO.ui.FormLayout. The selected value is synchronized with the value
+ * of a hidden HTML `input` tag. Please see the [OOjs UI documentation on MediaWiki][1] for
  * more information about input widgets.
  *
  *     @example
@@ -11574,10 +12578,7 @@ OO.ui.DropdownInputWidget.prototype.onMenuSelect = function ( item ) {
  * @inheritdoc
  */
 OO.ui.DropdownInputWidget.prototype.setValue = function ( value ) {
-       var item = this.dropdownWidget.getMenu().getItemFromData( value );
-       if ( item ) {
-               this.dropdownWidget.getMenu().selectItem( item );
-       }
+       this.dropdownWidget.getMenu().selectItemByData( value );
        OO.ui.DropdownInputWidget.super.prototype.setValue.call( this, value );
        return this;
 };
@@ -11646,6 +12647,8 @@ OO.ui.DropdownInputWidget.prototype.blur = function () {
  * with {@link OO.ui.RadioOptionWidget radio options} instead of this class. For more information,
  * please see the [OOjs UI documentation on MediaWiki][1].
  *
+ * This widget can be used inside a HTML form, such as a OO.ui.FormLayout.
+ *
  *     @example
  *     // An example of selected, unselected, and disabled radio inputs
  *     var radio1 = new OO.ui.RadioInputWidget( {
@@ -11741,6 +12744,8 @@ OO.ui.RadioInputWidget.prototype.isSelected = function () {
  * which modifies incoming values rather than validating them.
  * Please see the [OOjs UI documentation on MediaWiki] [1] for more information and examples.
  *
+ * This widget can be used inside a HTML form, such as a OO.ui.FormLayout.
+ *
  *     @example
  *     // Example of a text input widget
  *     var textInput = new OO.ui.TextInputWidget( {
@@ -11772,9 +12777,11 @@ OO.ui.RadioInputWidget.prototype.isSelected = function () {
  * @cfg {string} [labelPosition='after'] The position of the inline label relative to that of
  *  the value or placeholder text: `'before'` or `'after'`
  * @cfg {boolean} [required=false] Mark the field as required
- * @cfg {RegExp|string} [validate] Validation pattern, either a regular expression or the
- *  symbolic name of a pattern defined by the class: 'non-empty' (the value cannot be an empty string)
- *  or 'integer' (the value must contain only numbers).
+ * @cfg {RegExp|Function|string} [validate] Validation pattern: when string, a symbolic name of a
+ *  pattern defined by the class: 'non-empty' (the value cannot be an empty string) or 'integer'
+ *  (the value must contain only numbers); when RegExp, a regular expression that must match the
+ *  value for it to be considered valid; when Function, a function receiving the value as parameter
+ *  that must return true, or promise resolving to true, for it to be considered valid.
  */
 OO.ui.TextInputWidget = function OoUiTextInputWidget( config ) {
        // Configuration initialization
@@ -11815,7 +12822,7 @@ OO.ui.TextInputWidget = function OoUiTextInputWidget( config ) {
        // Events
        this.$input.on( {
                keypress: this.onKeyPress.bind( this ),
-               blur: this.setValidityFlag.bind( this )
+               blur: this.onBlur.bind( this )
        } );
        this.$input.one( {
                focus: this.onElementAttach.bind( this )
@@ -11823,6 +12830,7 @@ OO.ui.TextInputWidget = function OoUiTextInputWidget( config ) {
        this.$icon.on( 'mousedown', this.onIconMouseDown.bind( this ) );
        this.$indicator.on( 'mousedown', this.onIndicatorMouseDown.bind( this ) );
        this.on( 'labelChange', this.updatePosition.bind( this ) );
+       this.connect( this, { change: 'onChange' } );
 
        // Initialization
        this.$element
@@ -11839,7 +12847,8 @@ OO.ui.TextInputWidget = function OoUiTextInputWidget( config ) {
                this.$input.attr( 'autofocus', 'autofocus' );
        }
        if ( config.required ) {
-               this.$input.attr( 'required', 'true' );
+               this.$input.attr( 'required', 'required' );
+               this.$input.attr( 'aria-required', 'true' );
        }
        if ( this.label || config.autosize ) {
                this.installParentChangeDetector();
@@ -11914,6 +12923,16 @@ OO.ui.TextInputWidget.prototype.onKeyPress = function ( e ) {
        }
 };
 
+/**
+ * Handle blur events.
+ *
+ * @private
+ * @param {jQuery.Event} e Blur event
+ */
+OO.ui.TextInputWidget.prototype.onBlur = function () {
+       this.setValidityFlag();
+};
+
 /**
  * Handle element attach events.
  *
@@ -11928,25 +12947,14 @@ OO.ui.TextInputWidget.prototype.onElementAttach = function () {
 };
 
 /**
- * @inheritdoc
- */
-OO.ui.TextInputWidget.prototype.onEdit = function () {
-       this.adjustSize();
-
-       // Parent method
-       return OO.ui.TextInputWidget.super.prototype.onEdit.call( this );
-};
-
-/**
- * @inheritdoc
+ * Handle change events.
+ *
+ * @param {string} value
+ * @private
  */
-OO.ui.TextInputWidget.prototype.setValue = function ( value ) {
-       // Parent method
-       OO.ui.TextInputWidget.super.prototype.setValue.call( this, value );
-
+OO.ui.TextInputWidget.prototype.onChange = function () {
        this.setValidityFlag();
        this.adjustSize();
-       return this;
 };
 
 /**
@@ -12131,15 +13139,15 @@ OO.ui.TextInputWidget.prototype.select = function () {
 /**
  * Set the validation pattern.
  *
- * The validation pattern is either a regular expression or the symbolic name of a pattern
- * defined by the class: 'non-empty' (the value cannot be an empty string) or 'integer' (the
+ * The validation pattern is either a regular expression, a function, or the symbolic name of a
+ * pattern defined by the class: 'non-empty' (the value cannot be an empty string) or 'integer' (the
  * value must contain only numbers).
  *
- * @param {RegExp|string|null} validate Regular expression or the symbolic name of a
- *  pattern (either ‘integer’ or ‘non-empty’) defined by the class.
+ * @param {RegExp|Function|string|null} validate Regular expression, function, or the symbolic name
+ *  of a pattern (either ‘integer’ or ‘non-empty’) defined by the class.
  */
 OO.ui.TextInputWidget.prototype.setValidation = function ( validate ) {
-       if ( validate instanceof RegExp ) {
+       if ( validate instanceof RegExp || validate instanceof Function ) {
                this.validate = validate;
        } else {
                this.validate = this.constructor.static.validationPatterns[ validate ] || /.*/;
@@ -12148,12 +13156,25 @@ OO.ui.TextInputWidget.prototype.setValidation = function ( validate ) {
 
 /**
  * Sets the 'invalid' flag appropriately.
+ *
+ * @param {boolean} [isValid] Optionally override validation result
  */
-OO.ui.TextInputWidget.prototype.setValidityFlag = function () {
-       var widget = this;
-       this.isValid().done( function ( valid ) {
-               widget.setFlags( { invalid: !valid } );
-       } );
+OO.ui.TextInputWidget.prototype.setValidityFlag = function ( isValid ) {
+       var widget = this,
+               setFlag = function ( valid ) {
+                       if ( !valid ) {
+                               widget.$input.attr( 'aria-invalid', 'true' );
+                       } else {
+                               widget.$input.removeAttr( 'aria-invalid' );
+                       }
+                       widget.setFlags( { invalid: !valid } );
+               };
+
+       if ( isValid !== undefined ) {
+               setFlag( isValid );
+       } else {
+               this.isValid().done( setFlag );
+       }
 };
 
 /**
@@ -12162,10 +13183,19 @@ OO.ui.TextInputWidget.prototype.setValidityFlag = function () {
  * 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}.
  *
- * @return {jQuery.Deferred} A promise that resolves to a boolean `true` if the value is valid.
+ * @return {jQuery.Promise} A promise that resolves to a boolean `true` if the value is valid.
  */
 OO.ui.TextInputWidget.prototype.isValid = function () {
-       return $.Deferred().resolve( !!this.getValue().match( this.validate ) ).promise();
+       if ( this.validate instanceof Function ) {
+               var result = this.validate( this.getValue() );
+               if ( $.isFunction( result.promise ) ) {
+                       return result.promise();
+               } else {
+                       return $.Deferred().resolve( !!result ).promise();
+               }
+       } else {
+               return $.Deferred().resolve( !!this.getValue().match( this.validate ) ).promise();
+       }
 };
 
 /**
@@ -13141,6 +14171,38 @@ OO.ui.OutlineOptionWidget.prototype.setLevel = function ( level ) {
        return this;
 };
 
+/**
+ * TabOptionWidget is an item in a {@link OO.ui.TabSelectWidget TabSelectWidget}.
+ *
+ * Currently, this class is only used by {@link OO.ui.IndexLayout index layouts}, which contain
+ * {@link OO.ui.CardLayout card layouts}. See {@link OO.ui.IndexLayout IndexLayout}
+ * for an example.
+ *
+ * @class
+ * @extends OO.ui.OptionWidget
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.TabOptionWidget = function OoUiTabOptionWidget( config ) {
+       // Configuration initialization
+       config = config || {};
+
+       // Parent constructor
+       OO.ui.TabOptionWidget.super.call( this, config );
+
+       // Initialization
+       this.$element.addClass( 'oo-ui-tabOptionWidget' );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.TabOptionWidget, OO.ui.OptionWidget );
+
+/* Static Properties */
+
+OO.ui.TabOptionWidget.static.highlightable = false;
+
 /**
  * PopupWidget is a container for content. The popup is overlaid and positioned absolutely.
  * By default, each popup has an anchor that points toward its origin.
@@ -13169,9 +14231,13 @@ OO.ui.OutlineOptionWidget.prototype.setLevel = function ( level ) {
  * @cfg {number} [width=320] Width of popup in pixels
  * @cfg {number} [height] Height of popup in pixels. Omit to use the automatic height.
  * @cfg {boolean} [anchor=true] Show anchor pointing to origin of popup
- * @cfg {string} [align='center'] Alignment of the popup: `center`, `left`, or `right`.
- *  If the popup is right-aligned, the right edge of the popup is aligned to the anchor.
- *  For left-aligned popups, the left edge is aligned to the anchor.
+ * @cfg {string} [align='center'] Alignment of the popup: `center`, `force-left`, `force-right`, `backwards` or `forwards`.
+ *  If the popup is forced-left the popup body is leaning towards the left. For force-right alignment, the body of the
+ *  popup is leaning towards the right of the screen.
+ *  Using 'backwards' is a logical direction which will result in the popup leaning towards the beginning of the sentence
+ *  in the given language, which means it will flip to the correct positioning in right-to-left languages.
+ *  Using 'forward' will also result in a logical alignment where the body of the popup leans towards the end of the
+ *  sentence in the given language.
  * @cfg {jQuery} [$container] Constrain the popup to the boundaries of the specified container.
  *  See the [OOjs UI docs on MediaWiki][3] for an example.
  *  [3]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Popups#containerExample
@@ -13213,7 +14279,7 @@ OO.ui.PopupWidget = function OoUiPopupWidget( config ) {
        this.anchor = null;
        this.width = config.width !== undefined ? config.width : 320;
        this.height = config.height !== undefined ? config.height : null;
-       this.align = config.align || 'center';
+       this.setAlignment( config.align );
        this.closeButton = new OO.ui.ButtonWidget( { framed: false, icon: 'close' } );
        this.onMouseDownHandler = this.onMouseDown.bind( this );
        this.onDocumentKeyDownHandler = this.onDocumentKeyDown.bind( this );
@@ -13429,6 +14495,7 @@ OO.ui.PopupWidget.prototype.setSize = function ( width, height, transition ) {
 OO.ui.PopupWidget.prototype.updateDimensions = function ( transition ) {
        var popupOffset, originOffset, containerLeft, containerWidth, containerRight,
                popupLeft, popupRight, overlapLeft, overlapRight, anchorWidth,
+               align = this.align,
                widget = this;
 
        if ( !this.$container ) {
@@ -13443,8 +14510,18 @@ OO.ui.PopupWidget.prototype.updateDimensions = function ( transition ) {
                height: this.height !== null ? this.height : 'auto'
        } );
 
+       // If we are in RTL, we need to flip the alignment, unless it is center
+       if ( align === 'forwards' || align === 'backwards' ) {
+               if ( this.$container.css( 'direction' ) === 'rtl' ) {
+                       align = ( { forwards: 'force-left', backwards: 'force-right' } )[ this.align ];
+               } else {
+                       align = ( { forwards: 'force-right', backwards: 'force-left' } )[ this.align ];
+               }
+
+       }
+
        // Compute initial popupOffset based on alignment
-       popupOffset = this.width * ( { left: 0, center: -0.5, right: -1 } )[ this.align ];
+       popupOffset = this.width * ( { 'force-left': -1, center: -0.5, 'force-right': 0 } )[ align ];
 
        // Figure out if this will cause the popup to go beyond the edge of the container
        originOffset = this.$element.offset().left;
@@ -13499,6 +14576,29 @@ OO.ui.PopupWidget.prototype.updateDimensions = function ( transition ) {
        return this;
 };
 
+/**
+ * Set popup alignment
+ * @param {string} align Alignment of the popup, `center`, `force-left`, `force-right`,
+ *  `backwards` or `forwards`.
+ */
+OO.ui.PopupWidget.prototype.setAlignment = function ( align ) {
+       // Validate alignment and transform deprecated values
+       if ( [ 'left', 'right', 'force-left', 'force-right', 'backwards', 'forwards', 'center' ].indexOf( align ) > -1 ) {
+               this.align = { left: 'force-right', right: 'force-left' }[ align ] || align;
+       } else {
+               this.align = 'center';
+       }
+};
+
+/**
+ * Get popup alignment
+ * @return {string} align Alignment of the popup, `center`, `force-left`, `force-right`,
+ *  `backwards` or `forwards`.
+ */
+OO.ui.PopupWidget.prototype.getAlignment = function () {
+       return this.align;
+};
+
 /**
  * Progress bars visually display the status of an operation, such as a download,
  * and can be either determinate or indeterminate:
@@ -13804,6 +14904,7 @@ OO.ui.SearchWidget.prototype.getResults = function () {
  *
  * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options
  *
+ * @abstract
  * @class
  * @extends OO.ui.Widget
  * @mixins OO.ui.GroupElement
@@ -14107,11 +15208,7 @@ OO.ui.SelectWidget.prototype.unbindKeyDownListener = function () {
  * @return {OO.ui.OptionWidget|null} Outline item widget, `null` if none was found
  */
 OO.ui.SelectWidget.prototype.getTargetItem = function ( e ) {
-       var $item = $( e.target ).closest( '.oo-ui-optionWidget' );
-       if ( $item.length ) {
-               return $item.data( 'oo-ui-optionWidget' );
-       }
-       return null;
+       return $( e.target ).closest( '.oo-ui-optionWidget' ).data( 'oo-ui-optionWidget' ) || null;
 };
 
 /**
@@ -14193,6 +15290,22 @@ OO.ui.SelectWidget.prototype.highlightItem = function ( item ) {
        return this;
 };
 
+/**
+ * Programmatically select an option by its data. If the `data` parameter is omitted,
+ * or if the item does not exist, all options will be deselected.
+ *
+ * @param {Object|string} [data] Value of the item to select, omit to deselect all
+ * @fires select
+ * @chainable
+ */
+OO.ui.SelectWidget.prototype.selectItemByData = function ( data ) {
+       var itemFromData = this.getItemFromData( data );
+       if ( data === undefined || !itemFromData ) {
+               return this.selectItem();
+       }
+       return this.selectItem( itemFromData );
+};
+
 /**
  * Programmatically select an option by its reference. If the `item` parameter is omitted,
  * all options will be deselected.
@@ -14876,7 +15989,7 @@ OO.ui.TextInputMenuSelectWidget.prototype.position = function () {
  * OutlineSelectWidget is a structured list that contains {@link OO.ui.OutlineOptionWidget outline options}
  * A set of controls can be provided with an {@link OO.ui.OutlineControlsWidget outline controls} widget.
  *
- * ####Currently, this class is only used by {@link OO.ui.BookletLayout BookletLayouts}.####
+ * ####Currently, this class is only used by {@link OO.ui.BookletLayout booklet layouts}.####
  *
  * @class
  * @extends OO.ui.SelectWidget
@@ -14907,6 +16020,40 @@ OO.ui.OutlineSelectWidget = function OoUiOutlineSelectWidget( config ) {
 OO.inheritClass( OO.ui.OutlineSelectWidget, OO.ui.SelectWidget );
 OO.mixinClass( OO.ui.OutlineSelectWidget, OO.ui.TabIndexedElement );
 
+/**
+ * TabSelectWidget is a list that contains {@link OO.ui.TabOptionWidget tab options}
+ *
+ * ####Currently, this class is only used by {@link OO.ui.IndexLayout index layouts}.####
+ *
+ * @class
+ * @extends OO.ui.SelectWidget
+ * @mixins OO.ui.TabIndexedElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.TabSelectWidget = function OoUiTabSelectWidget( config ) {
+       // Parent constructor
+       OO.ui.TabSelectWidget.super.call( this, config );
+
+       // Mixin constructors
+       OO.ui.TabIndexedElement.call( this, config );
+
+       // Events
+       this.$element.on( {
+               focus: this.bindKeyDownListener.bind( this ),
+               blur: this.unbindKeyDownListener.bind( this )
+       } );
+
+       // Initialization
+       this.$element.addClass( 'oo-ui-tabSelectWidget' );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.TabSelectWidget, OO.ui.SelectWidget );
+OO.mixinClass( OO.ui.TabSelectWidget, OO.ui.TabIndexedElement );
+
 /**
  * ToggleSwitches are switches that slide on and off. Their state is represented by a Boolean
  * value (`true` for ‘on’, and `false` otherwise, the default). The ‘off’ state is represented
@@ -14930,8 +16077,7 @@ OO.mixinClass( OO.ui.OutlineSelectWidget, OO.ui.TabIndexedElement );
  *     $( 'body' ).append( fieldset.$element );
  *
  * @class
- * @extends OO.ui.Widget
- * @mixins OO.ui.ToggleWidget
+ * @extends OO.ui.ToggleWidget
  * @mixins OO.ui.TabIndexedElement
  *
  * @constructor
@@ -14944,7 +16090,6 @@ OO.ui.ToggleSwitchWidget = function OoUiToggleSwitchWidget( config ) {
        OO.ui.ToggleSwitchWidget.super.call( this, config );
 
        // Mixin constructors
-       OO.ui.ToggleWidget.call( this, config );
        OO.ui.TabIndexedElement.call( this, config );
 
        // Properties
@@ -14971,8 +16116,7 @@ OO.ui.ToggleSwitchWidget = function OoUiToggleSwitchWidget( config ) {
 
 /* Setup */
 
-OO.inheritClass( OO.ui.ToggleSwitchWidget, OO.ui.Widget );
-OO.mixinClass( OO.ui.ToggleSwitchWidget, OO.ui.ToggleWidget );
+OO.inheritClass( OO.ui.ToggleSwitchWidget, OO.ui.ToggleWidget );
 OO.mixinClass( OO.ui.ToggleSwitchWidget, OO.ui.TabIndexedElement );
 
 /* Methods */
diff --git a/resources/lib/oojs-ui/themes/mediawiki/icons-alerts.json b/resources/lib/oojs-ui/themes/mediawiki/icons-alerts.json
new file mode 100644 (file)
index 0000000..5fbf34d
--- /dev/null
@@ -0,0 +1,33 @@
+{
+       "prefix": "oo-ui-icon",
+       "intro": "@import '../../../../src/styles/common';",
+       "images": {
+               "bell": { "file": "images/icons/bell.svg" },
+               "bellOn": { "file": {
+                       "ltr": "images/icons/bellOn-ltr.svg",
+                       "rtl": "images/icons/bellOn-rtl.svg"
+               } },
+               "eye": { "file": "images/icons/eye.svg" },
+               "eyeClosed": { "file": "images/icons/eyeClosed.svg" },
+               "message": { "file": {
+                       "ltr": "images/icons/message-ltr.svg",
+                       "rtl": "images/icons/message-rtl.svg"
+               } },
+               "signature": { "file": {
+                       "ltr": "images/icons/signature-ltr.svg",
+                       "rtl": "images/icons/signature-rtl.svg"
+               } },
+               "speechBubble": { "file": {
+                       "ltr": "images/icons/speechBubble-ltr.svg",
+                       "rtl": "images/icons/speechBubble-rtl.svg"
+               } },
+               "speechBubbleAdd": { "file": {
+                       "ltr": "images/icons/speechBubbleAdd-ltr.svg",
+                       "rtl": "images/icons/speechBubbleAdd-rtl.svg"
+               } },
+               "speechBubbles": { "file": {
+                       "ltr": "images/icons/speechBubbles-ltr.svg",
+                       "rtl": "images/icons/speechBubbles-rtl.svg"
+               } }
+       }
+}
diff --git a/resources/lib/oojs-ui/themes/mediawiki/icons-content.json b/resources/lib/oojs-ui/themes/mediawiki/icons-content.json
new file mode 100644 (file)
index 0000000..29681c0
--- /dev/null
@@ -0,0 +1,50 @@
+{
+       "prefix": "oo-ui-icon",
+       "intro": "@import '../../../../src/styles/common';",
+       "images": {
+               "article": { "file": {
+                       "ltr": "images/icons/article-ltr.svg",
+                       "rtl": "images/icons/article-rtl.svg"
+               } },
+               "articleCheck": { "file": {
+                       "ltr": "images/icons/articleCheck-ltr.svg",
+                       "rtl": "images/icons/articleCheck-rtl.svg"
+               } },
+               "articleSearch": { "file": {
+                       "ltr": "images/icons/articleSearch-ltr.svg",
+                       "rtl": "images/icons/articleSearch-rtl.svg"
+               } },
+               "book": { "file": {
+                       "ltr": "images/icons/book-ltr.svg",
+                       "rtl": "images/icons/book-rtl.svg"
+               } },
+               "citeArticle": { "file": {
+                       "ltr": "images/icons/citeArticle-ltr.svg",
+                       "rtl": "images/icons/citeArticle-rtl.svg"
+               } },
+               "die": { "file": {
+                       "ltr": "images/icons/die-ltr.svg",
+                       "rtl": "images/icons/die-rtl.svg"
+               } },
+               "download": { "file": {
+                       "ltr": "images/icons/download-ltr.svg",
+                       "rtl": "images/icons/download-rtl.svg"
+               } },
+               "folderPlaceholder": { "file": {
+                       "ltr": "images/icons/folderPlaceholder-ltr.svg",
+                       "rtl": "images/icons/folderPlaceholder-rtl.svg"
+               } },
+               "journal": { "file": {
+                       "ltr": "images/icons/journal-ltr.svg",
+                       "rtl": "images/icons/journal-rtl.svg"
+               } },
+               "newspaper": { "file": {
+                       "ltr": "images/icons/newspaper-ltr.svg",
+                       "rtl": "images/icons/newspaper-rtl.svg"
+               } },
+               "upload": { "file": {
+                       "ltr": "images/icons/upload-ltr.svg",
+                       "rtl": "images/icons/upload-rtl.svg"
+               } }
+       }
+}
diff --git a/resources/lib/oojs-ui/themes/mediawiki/icons-editing-advanced.json b/resources/lib/oojs-ui/themes/mediawiki/icons-editing-advanced.json
new file mode 100644 (file)
index 0000000..8fdc505
--- /dev/null
@@ -0,0 +1,75 @@
+{
+       "prefix": "oo-ui-icon",
+       "intro": "@import '../../../../src/styles/common';",
+       "images": {
+               "alignCentre": { "file": "images/icons/align-center.svg" },
+               "alignLeft": { "file": "images/icons/align-float-left.svg" },
+               "alignRight": { "file": "images/icons/align-float-right.svg" },
+               "find": { "file": {
+                       "ltr": "images/icons/find-ltr.svg",
+                       "rtl": "images/icons/find-rtl.svg"
+               } },
+               "insert": { "file": "images/icons/insert.svg" },
+               "layout": { "file": {
+                       "ltr": "images/icons/layout-ltr.svg",
+                       "rtl": "images/icons/layout-rtl.svg"
+               } },
+               "newline": { "file": {
+                       "ltr": "images/icons/newline-ltr.svg",
+                       "rtl": "images/icons/newline-rtl.svg"
+               } },
+               "redirect": { "file": {
+                       "ltr": "images/icons/redirect-ltr.svg",
+                       "rtl": "images/icons/redirect-rtl.svg"
+               } },
+               "noWikiText": { "file": {
+                       "ltr": "images/icons/noWikiText-ltr.svg",
+                       "rtl": "images/icons/noWikiText-rtl.svg"
+               } },
+               "outline": { "file": {
+                       "ltr": "images/icons/outline-ltr.svg",
+                       "rtl": "images/icons/outline-rtl.svg"
+               } },
+               "puzzle": { "file": {
+                       "ltr": "images/icons/puzzle-ltr.svg",
+                       "rtl": "images/icons/puzzle-rtl.svg"
+               } },
+               "quotes": { "file": {
+                       "ltr": "images/icons/quotes-ltr.svg",
+                       "rtl": "images/icons/quotes-rtl.svg"
+               } },
+               "quotesAdd": { "file": {
+                       "ltr": "images/icons/quotesAdd-ltr.svg",
+                       "rtl": "images/icons/quotesAdd-rtl.svg"
+               } },
+               "redirect": { "file": {
+                       "ltr": "images/icons/redirect-ltr.svg",
+                       "rtl": "images/icons/redirect-rtl.svg"
+               } },
+               "searchCaseSensitive": { "file": "images/icons/case-sensitive.svg" },
+               "searchRegularExpression": { "file": "images/icons/regular-expression.svg" },
+               "specialCharacter": { "file": "images/icons/specialCharacter.svg" },
+               "table": { "file": "images/icons/table.svg" },
+               "tableAddColumnAfter": { "file": {
+                       "ltr": "images/icons/table-insert-column-rtl.svg",
+                       "rtl": "images/icons/table-insert-column-ltr.svg"
+               } },
+               "tableAddColumnBefore": { "file": {
+                       "ltr": "images/icons/table-insert-column-ltr.svg",
+                       "rtl": "images/icons/table-insert-column-rtl.svg"
+               } },
+               "tableAddRowAfter": { "file": "images/icons/table-insert-row-after.svg" },
+               "tableAddRowBefore": { "file": "images/icons/table-insert-row-before.svg" },
+               "tableCaption": { "file": "images/icons/table-caption.svg" },
+               "tableMergeCells": { "file": "images/icons/table-merge-cells.svg" },
+               "templateAdd": { "file": {
+                       "ltr": "images/icons/templateAdd-ltr.svg",
+                       "rtl": "images/icons/templateAdd-rtl.svg"
+               } },
+               "translation": { "file": {
+                       "ltr": "images/icons/translation-ltr.svg",
+                       "rtl": "images/icons/translation-rtl.svg"
+               } },
+               "wikiText": { "file": "images/icons/wikiText.svg" }
+       }
+}
diff --git a/resources/lib/oojs-ui/themes/mediawiki/icons-editing-core.json b/resources/lib/oojs-ui/themes/mediawiki/icons-editing-core.json
new file mode 100644 (file)
index 0000000..3bacb60
--- /dev/null
@@ -0,0 +1,45 @@
+{
+       "prefix": "oo-ui-icon",
+       "intro": "@import '../../../../src/styles/common';",
+       "variants": {
+               "invert": {
+                       "color": "#FFFFFF",
+                       "global": true
+               },
+               "progressive": {
+                       "color": "#347BFF"
+               },
+               "constructive": {
+                       "color": "#00AF89"
+               },
+               "destructive": {
+                       "color": "#D11D13"
+               },
+               "warning": {
+                       "color": "#FF5D00"
+               }
+       },
+       "images": {
+               "edit": { "file": {
+                       "ltr": "images/icons/edit-ltr.svg",
+                       "rtl": "images/icons/edit-rtl.svg"
+               }, "variants": [ "progressive" ] },
+               "editLock": { "file": {
+                       "ltr": "images/icons/editLock-ltr.svg",
+                       "rtl": "images/icons/editLock-rtl.svg"
+               } },
+               "editUndo": { "file": {
+                       "ltr": "images/icons/editUndo-ltr.svg",
+                       "rtl": "images/icons/editUndo-rtl.svg"
+               } },
+               "link": { "file": {
+                       "ltr": "images/icons/link-ltr.svg",
+                       "rtl": "images/icons/link-rtl.svg"
+               } },
+               "linkExternal": { "file": {
+                       "ltr": "images/icons/external-link-ltr.svg",
+                       "rtl":  "images/icons/external-link-rtl.svg"
+               } },
+               "linkSecure": { "file": "images/icons/secure-link.svg" }
+       }
+}
diff --git a/resources/lib/oojs-ui/themes/mediawiki/icons-editing-list.json b/resources/lib/oojs-ui/themes/mediawiki/icons-editing-list.json
new file mode 100644 (file)
index 0000000..490f8fa
--- /dev/null
@@ -0,0 +1,22 @@
+{
+       "prefix": "oo-ui-icon",
+       "intro": "@import '../../../../src/styles/common';",
+       "images": {
+               "indent": { "file": {
+                       "ltr": "images/icons/indent-ltr.svg",
+                       "rtl": "images/icons/indent-rtl.svg"
+               } },
+               "listBullet": { "file": {
+                       "ltr": "images/icons/listBullet-ltr.svg",
+                       "rtl": "images/icons/listBullet-rtl.svg"
+               } },
+               "listNumbered": { "file": {
+                       "ltr": "images/icons/listNumbered-ltr.svg",
+                       "rtl": "images/icons/listNumbered-rtl.svg"
+               } },
+               "outdent": { "file": {
+                       "ltr": "images/icons/outdent-ltr.svg",
+                       "rtl": "images/icons/outdent-rtl.svg"
+               } }
+       }
+}
diff --git a/resources/lib/oojs-ui/themes/mediawiki/icons-editing-styling.json b/resources/lib/oojs-ui/themes/mediawiki/icons-editing-styling.json
new file mode 100644 (file)
index 0000000..65fbc21
--- /dev/null
@@ -0,0 +1,72 @@
+{
+       "prefix": "oo-ui-icon",
+       "intro": "@import '../../../../src/styles/common';",
+       "images": {
+               "bigger": { "file": {
+                       "ltr": "images/icons/bigger-ltr.svg",
+                       "rtl": "images/icons/bigger-rtl.svg"
+               } },
+               "smaller": { "file": {
+                       "ltr": "images/icons/smaller-ltr.svg",
+                       "rtl": "images/icons/smaller-rtl.svg"
+               } },
+               "subscript": { "file": {
+                       "ltr": "images/icons/subscript-ltr.svg",
+                       "rtl": "images/icons/subscript-rtl.svg"
+               } },
+               "superscript": { "file": {
+                       "ltr": "images/icons/superscript-ltr.svg",
+                       "rtl": "images/icons/superscript-rtl.svg"
+               } },
+               "bold": { "file": {
+                       "default": "images/icons/bold-a.svg",
+                       "lang": {
+                               "ar": "images/icons/bold-arab-ain.svg",
+                               "be": "images/icons/bold-cyrl-te.svg",
+                               "cs,en,he,ml,pl": "images/icons/bold-b.svg",
+                               "da,de,hu,ksh,nn,no,sv": "images/icons/bold-f.svg",
+                               "es,gl,pt": "images/icons/bold-n.svg",
+                               "eu,fi": "images/icons/bold-l.svg",
+                               "fa": "images/icons/bold-arab-dad.svg",
+                               "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",
+                               "nl": "images/icons/bold-v.svg",
+                               "os": "images/icons/bold-cyrl-be.svg"
+                       }
+               } },
+               "italic": { "file": {
+                       "default": "images/icons/italic-a.svg",
+                       "lang": {
+                                       "ar": "images/icons/italic-arab-meem.svg",
+                                       "cs,en,fr,he,ml,pl,pt": "images/icons/italic-i.svg",
+                                       "be,da,de,fi,ky,nn,no,os,sv,ru": "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",
+                                       "hu": "images/icons/italic-d.svg",
+                                       "hy": "images/icons/italic-armn-sha.svg",
+                                       "ksh": "images/icons/italic-s.svg",
+                                       "ka": "images/icons/italic-geor-kan.svg"
+                               }
+               } },
+               "strikethrough": { "file": {
+                       "default": "images/icons/strikethrough-a.svg",
+                       "lang": {
+                               "en": "images/icons/strikethrough-s.svg",
+                               "fi": "images/icons/strikethrough-y.svg"
+                       }
+               } },
+               "underline": { "file": {
+                       "default": "images/icons/underline-a.svg",
+                       "lang": {
+                               "en": "images/icons/underline-u.svg"
+                       }
+               } },
+               "textLanguage": { "file": "images/icons/language.svg" },
+               "textDirLTR": { "file": "images/icons/text-dir-lefttoright.svg" },
+               "textDirRTL": { "file": "images/icons/text-dir-righttoleft.svg" },
+               "textStyle": { "file": "images/icons/text-style.svg" }
+       }
+}
diff --git a/resources/lib/oojs-ui/themes/mediawiki/icons-interactions.json b/resources/lib/oojs-ui/themes/mediawiki/icons-interactions.json
new file mode 100644 (file)
index 0000000..497a301
--- /dev/null
@@ -0,0 +1,52 @@
+{
+       "prefix": "oo-ui-icon",
+       "intro": "@import '../../../../src/styles/common';",
+       "images": {
+               "beta": { "file": "images/icons/beta.svg" },
+               "betaLaunch": { "file": "images/icons/betaLaunch.svg" },
+               "bookmark": { "file": {
+                       "ltr": "images/icons/bookmark-ltr.svg",
+                       "rtl": "images/icons/bookmark-rtl.svg"
+               } },
+               "browser": { "file": {
+                       "ltr": "images/icons/browser-ltr.svg",
+                       "rtl": "images/icons/browser-rtl.svg"
+               } },
+               "clear": { "file": "images/icons/clear.svg" },
+               "clock": { "file": "images/icons/clock.svg" },
+               "funnel": { "file": {
+                       "ltr": "images/icons/funnel-ltr.svg",
+                       "rtl": "images/icons/funnel-rtl.svg"
+               } },
+               "heart": { "file": "images/icons/heart.svg" },
+               "key": { "file": {
+                       "ltr": "images/icons/key-ltr.svg",
+                       "rtl": "images/icons/key-rtl.svg"
+               } },
+               "keyboard": { "file": {
+                       "ltr": "images/icons/keyboard-ltr.svg",
+                       "rtl": "images/icons/keyboard-rtl.svg"
+               } },
+               "logOut": { "file": {
+                       "ltr": "images/icons/logOut-ltr.svg",
+                       "rtl": "images/icons/logOut-rtl.svg"
+               } },
+               "newWindow": { "file": {
+                       "ltr": "images/icons/newWindow-ltr.svg",
+                       "rtl": "images/icons/newWindow-rtl.svg"
+               } },
+               "printer": { "file": {
+                       "ltr": "images/icons/printer-ltr.svg",
+                       "rtl": "images/icons/printer-rtl.svg"
+               } },
+               "ribbonPrize": { "file": "images/icons/ribbonPrize.svg" },
+               "sun": { "file": {
+                       "ltr": "images/icons/sun-ltr.svg",
+                       "rtl": "images/icons/sun-rtl.svg"
+               } },
+               "watchlist": { "file": {
+                       "ltr": "images/icons/watchlist-ltr.svg",
+                       "rtl": "images/icons/watchlist-rtl.svg"
+               } }
+       }
+}
diff --git a/resources/lib/oojs-ui/themes/mediawiki/icons-layout.json b/resources/lib/oojs-ui/themes/mediawiki/icons-layout.json
new file mode 100644 (file)
index 0000000..ae6b09d
--- /dev/null
@@ -0,0 +1,43 @@
+{
+       "prefix": "oo-ui-icon",
+       "intro": "@import '../../../../src/styles/common';",
+       "variants": {
+               "invert": {
+                       "color": "#FFFFFF",
+                       "global": true
+               },
+               "progressive": {
+                       "color": "#347BFF"
+               },
+               "constructive": {
+                       "color": "#00AF89"
+               },
+               "destructive": {
+                       "color": "#D11D13"
+               },
+               "warning": {
+                       "color": "#FF5D00"
+               }
+       },
+       "images": {
+               "stripeFlow": { "file": {
+                       "ltr": "images/icons/stripeFlow-ltr.svg",
+                       "rtl": "images/icons/stripeFlow-rtl.svg"
+               } },
+               "stripeSideMenu": { "file": "images/icons/stripeSideMenu.svg" },
+               "stripeSummary": { "file": {
+                       "ltr": "images/icons/stripeSummary-ltr.svg",
+                       "rtl": "images/icons/stripeSummary-rtl.svg"
+               } },
+               "stripeToC": { "file": {
+                       "ltr": "images/icons/stripeToC-ltr.svg",
+                       "rtl": "images/icons/stripeToC-rtl.svg"
+               }, "variants": [ "progressive" ] },
+               "viewCompact": { "file": "images/icons/viewCompact.svg" },
+               "viewDetails": { "file": {
+                       "ltr": "images/icons/viewDetails-ltr.svg",
+                       "rtl": "images/icons/viewDetails-rtl.svg"
+               } },
+               "visionSimulator": { "file": "images/icons/visionSimulator.svg" }
+       }
+}
diff --git a/resources/lib/oojs-ui/themes/mediawiki/icons-location.json b/resources/lib/oojs-ui/themes/mediawiki/icons-location.json
new file mode 100644 (file)
index 0000000..9eec19b
--- /dev/null
@@ -0,0 +1,19 @@
+{
+       "prefix": "oo-ui-icon",
+       "intro": "@import '../../../../src/styles/common';",
+       "images": {
+               "map": { "file": {
+                       "ltr": "images/icons/map-ltr.svg",
+                       "rtl": "images/icons/map-rtl.svg"
+               } },
+               "mapPin": { "file": "images/icons/mapPin.svg" },
+               "mapPinAdd": { "file": {
+                       "ltr": "images/icons/mapPinAdd-ltr.svg",
+                       "rtl": "images/icons/mapPinAdd-rtl.svg"
+               } },
+               "wikitrail": { "file": {
+                       "ltr": "images/icons/wikitrail-ltr.svg",
+                       "rtl": "images/icons/wikitrail-rtl.svg"
+               } }
+       }
+}
diff --git a/resources/lib/oojs-ui/themes/mediawiki/icons-media.json b/resources/lib/oojs-ui/themes/mediawiki/icons-media.json
new file mode 100644 (file)
index 0000000..960079b
--- /dev/null
@@ -0,0 +1,27 @@
+{
+       "prefix": "oo-ui-icon",
+       "intro": "@import '../../../../src/styles/common';",
+       "images": {
+               "image": { "file": {
+                       "ltr": "images/icons/image-ltr.svg",
+                       "rtl": "images/icons/image-rtl.svg"
+               } },
+               "imageAdd": { "file": {
+                       "ltr": "images/icons/imageAdd-ltr.svg",
+                       "rtl": "images/icons/imageAdd-rtl.svg"
+               } },
+               "imageLock": { "file": {
+                       "ltr": "images/icons/imageLock-ltr.svg",
+                       "rtl": "images/icons/imageLock-rtl.svg"
+               } },
+               "photoGallery": { "file": {
+                       "ltr": "images/icons/photoGallery-ltr.svg",
+                       "rtl": "images/icons/photoGallery-rtl.svg"
+               } },
+               "play": { "file": {
+                       "ltr": "images/icons/play-ltr.svg",
+                       "rtl": "images/icons/play-rtl.svg"
+               } },
+               "stop": { "file": "images/icons/stop.svg" }
+       }
+}
diff --git a/resources/lib/oojs-ui/themes/mediawiki/icons-moderation.json b/resources/lib/oojs-ui/themes/mediawiki/icons-moderation.json
new file mode 100644 (file)
index 0000000..1f12f2a
--- /dev/null
@@ -0,0 +1,52 @@
+{
+       "prefix": "oo-ui-icon",
+       "intro": "@import '../../../../src/styles/common';",
+       "variants": {
+               "invert": {
+                       "color": "#FFFFFF",
+                       "global": true
+               },
+               "progressive": {
+                       "color": "#347BFF"
+               },
+               "constructive": {
+                       "color": "#00AF89"
+               },
+               "destructive": {
+                       "color": "#D11D13"
+               },
+               "warning": {
+                       "color": "#FF5D00"
+               }
+       },
+       "images": {
+               "block": { "file": "images/icons/block.svg", "variants": [ "destructive" ] },
+               "blockUndo": { "file": {
+                       "ltr": "images/icons/blockUndo-ltr.svg",
+                       "rtl": "images/icons/blockUndo-rtl.svg"
+               } },
+               "flag": { "file": {
+                       "ltr": "images/icons/flag-ltr.svg",
+                       "rtl": "images/icons/flag-rtl.svg"
+               } },
+               "flagUndo": { "file": {
+                       "ltr": "images/icons/flagUndo-ltr.svg",
+                       "rtl": "images/icons/flagUndo-rtl.svg"
+               } },
+               "lock": { "file": {
+                       "ltr": "images/icons/lock-ltr.svg",
+                       "rtl": "images/icons/lock-rtl.svg"
+               }, "variants": [ "destructive" ] },
+               "star": { "file": "images/icons/star.svg" },
+               "trash": { "file": "images/icons/trash.svg" },
+               "trashUndo": { "file": {
+                       "ltr": "images/icons/trashUndo-ltr.svg",
+                       "rtl": "images/icons/trashUndo-rtl.svg"
+               } },
+               "unLock": { "file": {
+                       "ltr": "images/icons/unLock-ltr.svg",
+                       "rtl": "images/icons/unLock-rtl.svg"
+               }, "variants": [ "destructive" ] },
+               "unStar": { "file": "images/icons/unStar.svg" }
+       }
+}
diff --git a/resources/lib/oojs-ui/themes/mediawiki/icons-movement.json b/resources/lib/oojs-ui/themes/mediawiki/icons-movement.json
new file mode 100644 (file)
index 0000000..9aa1b80
--- /dev/null
@@ -0,0 +1,27 @@
+{
+       "prefix": "oo-ui-icon",
+       "intro": "@import '../../../../src/styles/common';",
+       "images": {
+               "arrowNext": { "file": {
+                       "ltr": "images/icons/arrow-ltr.svg",
+                       "rtl": "images/icons/arrow-rtl.svg"
+               } },
+               "arrowLast": { "file": {
+                       "ltr": "images/icons/arrow-rtl.svg",
+                       "rtl": "images/icons/arrow-ltr.svg"
+               } },
+               "caretNext": { "file": {
+                       "ltr": "images/icons/caret-rtl.svg",
+                       "rtl": "images/icons/caret-ltr.svg"
+               } },
+               "caretLast": { "file": {
+                       "ltr": "images/icons/caret-ltr.svg",
+                       "rtl": "images/icons/caret-rtl.svg"
+               } },
+               "caretDown": { "file": "images/icons/caretDown.svg" },
+               "caretUp": { "file": "images/icons/caretUp.svg" },
+               "downTriangle": { "file": "images/icons/downTriangle.svg" },
+               "move": { "file": "images/icons/move.svg" },
+               "upTriangle": { "file": "images/icons/upTriangle.svg" }
+       }
+}
diff --git a/resources/lib/oojs-ui/themes/mediawiki/icons-user.json b/resources/lib/oojs-ui/themes/mediawiki/icons-user.json
new file mode 100644 (file)
index 0000000..2bda575
--- /dev/null
@@ -0,0 +1,19 @@
+{
+       "prefix": "oo-ui-icon",
+       "intro": "@import '../../../../src/styles/common';",
+       "images": {
+               "userActive": { "file": {
+                       "ltr": "images/icons/userActive-ltr.svg",
+                       "rtl": "images/icons/userActive-rtl.svg"
+               } },
+               "userAvatar": { "file": "images/icons/userAvatar.svg" },
+               "userInactive": { "file": {
+                       "ltr": "images/icons/userInactive-ltr.svg",
+                       "rtl": "images/icons/userInactive-rtl.svg"
+               } },
+               "userTalk": { "file": {
+                       "ltr": "images/icons/userTalk-ltr.svg",
+                       "rtl": "images/icons/userTalk-rtl.svg"
+               } }
+       }
+}
diff --git a/resources/lib/oojs-ui/themes/mediawiki/icons-wikimedia.json b/resources/lib/oojs-ui/themes/mediawiki/icons-wikimedia.json
new file mode 100644 (file)
index 0000000..fd13c95
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "prefix": "oo-ui-icon",
+       "intro": "@import '../../../../src/styles/common';",
+       "images": {
+               "logoCC": { "file": "images/icons/logo-cc.svg" },
+               "logoWikimediaCommons": { "file": "images/icons/logo-wikimediaCommons.svg" },
+               "logoWikipedia": { "file": "images/icons/logo-wikipedia.svg" }
+       }
+}
diff --git a/resources/lib/oojs-ui/themes/mediawiki/icons.json b/resources/lib/oojs-ui/themes/mediawiki/icons.json
new file mode 100644 (file)
index 0000000..d385eb1
--- /dev/null
@@ -0,0 +1,75 @@
+{
+       "selectorWithoutVariant": ".oo-ui-icon-{name}",
+       "selectorWithVariant": ".oo-ui-image-{variant} .oo-ui-icon-{name}, .oo-ui-image-{variant}.oo-ui-icon-{name}",
+       "intro": "@import '../../../../src/styles/common';",
+       "variants": {
+               "invert": {
+                       "color": "#FFFFFF",
+                       "global": true
+               },
+               "progressive": {
+                       "color": "#347BFF"
+               },
+               "constructive": {
+                       "color": "#00AF89"
+               },
+               "destructive": {
+                       "color": "#D11D13"
+               },
+               "warning": {
+                       "color": "#FF5D00"
+               }
+       },
+       "images": {
+               "add": { "file": "images/icons/add.svg", "variants": [ "constructive" ] },
+               "advanced": { "file": "images/icons/advanced.svg" },
+               "alert": { "file": "images/icons/alert.svg", "variants": [ "warning" ] },
+               "cancel": { "file": "images/icons/cancel.svg" },
+               "check": { "file": "images/icons/check.svg", "variants": [ "constructive", "progressive" ] },
+               "circle": { "file": "images/icons/circle.svg", "variants": [ "constructive" ] },
+               "close": { "file": {
+                       "ltr": "images/icons/close-ltr.svg",
+                       "rtl": "images/icons/close-rtl.svg"
+               } },
+               "code": { "file": "images/icons/code.svg" },
+               "collapse": { "file": "images/icons/collapse.svg" },
+               "comment": { "file": "images/icons/comment.svg" },
+               "ellipsis": { "file": "images/icons/ellipsis.svg" },
+               "expand": { "file": "images/icons/expand.svg" },
+               "help": { "file": {
+                       "ltr": "images/icons/help-ltr.svg",
+                       "rtl": "images/icons/help-rtl.svg",
+                       "lang": {
+                               "he,yi": "images/icons/help-ltr.svg"
+                       }
+               } },
+               "history": { "file": "images/icons/history.svg" },
+               "info": { "file": "images/icons/info.svg" },
+               "menu": { "file": "images/icons/menu.svg" },
+               "next": { "file": {
+                       "ltr": "images/icons/move-ltr.svg",
+                       "rtl": "images/icons/move-rtl.svg"
+               } },
+               "picture": { "file": "images/icons/picture.svg" },
+               "previous": { "file": {
+                       "ltr": "images/icons/move-rtl.svg",
+                       "rtl": "images/icons/move-ltr.svg"
+               } },
+               "redo": { "file": {
+                       "ltr": "images/icons/arched-arrow-ltr.svg",
+                       "rtl": "images/icons/arched-arrow-rtl.svg"
+               } },
+               "remove": { "file": "images/icons/remove.svg", "variants": [ "destructive" ] },
+               "search": { "file": {
+                       "ltr": "images/icons/search-ltr.svg",
+                       "rtl": "images/icons/search-rtl.svg"
+               } },
+               "settings": { "file": "images/icons/settings.svg" },
+               "tag": { "file": "images/icons/tag.svg", "variants": [ "destructive", "warning", "constructive", "progressive" ] },
+               "undo": { "file": {
+                       "ltr": "images/icons/arched-arrow-rtl.svg",
+                       "rtl": "images/icons/arched-arrow-ltr.svg"
+               } },
+               "window": { "file": "images/icons/window.svg" }
+       }
+}
index 8a07140..37b57fe 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 1874597..9aca415 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="arched-arrow-ltr">
-        <path id="arrow" d="M19.925 14.937l-2.391-6.901-1.48 2.329c-.964-.845-2.699-1.85-5.513-1.823-4.887.046-6.524 4.244-6.524 4.244s2.753-2.639 6.925-1.949c1.729.286 3.007 1.206 3.675 1.791l-1.474 2.319 6.782-.01z"/>
-    </g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>\r
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->\r
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"\r
+        viewBox="-487 489 24 24" enable-background="new -487 489 24 24" xml:space="preserve"><style>* { fill: #FFFFFF }</style>\r
+<path d="M-472.8,494.7l6.3,5.7l-6.3,5.7v-3.8h-1.3c-3.2,0-6.3,1.3-7.6,3.8c0-4.7,2.8-7.6,7.9-7.6h0.9V494.7z"/>\r
+</svg>\r
index 88db108..7d2113f 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 8a670ef..049f21e 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="arched-arrow-ltr">
-        <path id="arrow" d="M19.925 14.937l-2.391-6.901-1.48 2.329c-.964-.845-2.699-1.85-5.513-1.823-4.887.046-6.524 4.244-6.524 4.244s2.753-2.639 6.925-1.949c1.729.286 3.007 1.206 3.675 1.791l-1.474 2.319 6.782-.01z"/>
-    </g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>\r
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->\r
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"\r
+        viewBox="-487 489 24 24" enable-background="new -487 489 24 24" xml:space="preserve">\r
+<path d="M-472.8,494.7l6.3,5.7l-6.3,5.7v-3.8h-1.3c-3.2,0-6.3,1.3-7.6,3.8c0-4.7,2.8-7.6,7.9-7.6h0.9V494.7z"/>\r
+</svg>\r
index c6cbec1..a50b306 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 75b23b4..11fffcb 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="arched-arrow-rtl">
-        <path id="arrow" d="M13.401 8.542c-2.814-.027-4.549.978-5.513 1.823l-1.48-2.329-2.391 6.901 6.782.009-1.474-2.319c.668-.584 1.945-1.504 3.675-1.791 4.172-.69 6.925 1.949 6.925 1.949s-1.637-4.197-6.524-4.243z"/>
-    </g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>\r
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->\r
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"\r
+        viewBox="-487 489 24 24" enable-background="new -487 489 24 24" xml:space="preserve"><style>* { fill: #FFFFFF }</style>\r
+<path d="M-476.3,494.7l-6.3,5.7l6.3,5.7v-3.8h1.3c3.2,0,6.3,1.3,7.6,3.8c0-4.7-2.8-7.6-7.9-7.6h-0.9V494.7z"/>\r
+</svg>\r
index 0afcbfa..ed69a01 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 01fc216..20875f3 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="arched-arrow-rtl">
-        <path id="arrow" d="M13.401 8.542c-2.814-.027-4.549.978-5.513 1.823l-1.48-2.329-2.391 6.901 6.782.009-1.474-2.319c.668-.584 1.945-1.504 3.675-1.791 4.172-.69 6.925 1.949 6.925 1.949s-1.637-4.197-6.524-4.243z"/>
-    </g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>\r
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->\r
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"\r
+        viewBox="-487 489 24 24" enable-background="new -487 489 24 24" xml:space="preserve">\r
+<path d="M-476.3,494.7l-6.3,5.7l6.3,5.7v-3.8h1.3c3.2,0,6.3,1.3,7.6,3.8c0-4.7-2.8-7.6-7.9-7.6h-0.9V494.7z"/>\r
+</svg>\r
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/block-destructive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/block-destructive.png
new file mode 100644 (file)
index 0000000..3e91997
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/block-destructive.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/block-destructive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/block-destructive.svg
new file mode 100644 (file)
index 0000000..c850e65
--- /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: #D11D13 }</style>
+    <path d="M12 4c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm5 9h-10v-2h10v2z" id="path4"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/block-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/block-invert.png
new file mode 100644 (file)
index 0000000..9529e5b
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/block-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/block-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/block-invert.svg
new file mode 100644 (file)
index 0000000..289ef4f
--- /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: #FFFFFF }</style>
+    <path d="M12 4c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm5 9h-10v-2h10v2z" id="path4"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-ltr-invert.png
new file mode 100644 (file)
index 0000000..aeee727
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-ltr-invert.svg
new file mode 100644 (file)
index 0000000..9408937
--- /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: #FFFFFF }</style>
+    <g id="g66">
+        <path d="M17 11v2h-2l3.6 3.6c.9-1.3 1.4-2.9 1.4-4.6 0-4.4-3.6-8-8-8-1.7 0-3.3.5-4.6 1.4l5.6 5.6h4zm-13-7l-1 1 2.4 2.4c-.9 1.3-1.4 2.9-1.4 4.6 0 4.4 3.6 8 8 8 1.7 0 3.3-.5 4.6-1.4l2.4 2.4 1-1-16-16zm3 9v-2h2l2 2h-4z" id="path68"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-rtl-invert.png
new file mode 100644 (file)
index 0000000..46b680c
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-rtl-invert.svg
new file mode 100644 (file)
index 0000000..ba48235
--- /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: #FFFFFF }</style>
+    <g id="g66">
+        <path d="M7 11v2h2l-3.6 3.6c-.9-1.3-1.4-2.9-1.4-4.6 0-4.4 3.6-8 8-8 1.7 0 3.3.5 4.6 1.4l-5.6 5.6h-4zm13-7l1 1-2.4 2.4c.9 1.3 1.4 2.9 1.4 4.6 0 4.4-3.6 8-8 8-1.7 0-3.3-.5-4.6-1.4l-2.4 2.4-1-1 16-16zm-3 9v-2h-2l-2 2h4z" id="path68"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel-invert.png
new file mode 100644 (file)
index 0000000..5668e12
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel-invert.svg
new file mode 100644 (file)
index 0000000..8a9d3d4
--- /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: #FFFFFF }</style>
+    <g id="cancel">
+        <path id="circle-with-strike" d="M11.999 5.022c-3.853 0-6.977 3.124-6.977 6.978 0 3.853 3.124 6.978 6.977 6.978 3.854 0 6.979-3.125 6.979-6.978 0-3.854-3.125-6.978-6.979-6.978zm-5.113 6.978c0-1.092.572-3.25.93-2.929l7.113 7.113c.488.525-1.837.931-2.93.931-2.825-.001-5.113-2.291-5.113-5.115zm9.298 2.929l-7.114-7.113c-.445-.483 1.837-.931 2.929-.931 2.827 0 5.115 2.289 5.115 5.114 0 1.093-.364 3.543-.93 2.93z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel.png
new file mode 100644 (file)
index 0000000..51a33ff
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel.svg
new file mode 100644 (file)
index 0000000..bfc1b44
--- /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">
+    <g id="cancel">
+        <path id="circle-with-strike" d="M11.999 5.022c-3.853 0-6.977 3.124-6.977 6.978 0 3.853 3.124 6.978 6.977 6.978 3.854 0 6.979-3.125 6.979-6.978 0-3.854-3.125-6.978-6.979-6.978zm-5.113 6.978c0-1.092.572-3.25.93-2.929l7.113 7.113c.488.525-1.837.931-2.93.931-2.825-.001-5.113-2.291-5.113-5.115zm9.298 2.929l-7.114-7.113c-.445-.483 1.837-.931 2.929-.931 2.827 0 5.115 2.289 5.115 5.114 0 1.093-.364 3.543-.93 2.93z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/clear-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/clear-invert.png
deleted file mode 100644 (file)
index 5668e12..0000000
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/clear-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/clear-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/clear-invert.svg
deleted file mode 100644 (file)
index 6d3bc58..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<?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="clear">
-        <path id="circle-with-strike" d="M11.999 5.022c-3.853 0-6.977 3.124-6.977 6.978 0 3.853 3.124 6.978 6.977 6.978 3.854 0 6.979-3.125 6.979-6.978 0-3.854-3.125-6.978-6.979-6.978zm-5.113 6.978c0-1.092.572-3.25.93-2.929l7.113 7.113c.488.525-1.837.931-2.93.931-2.825-.001-5.113-2.291-5.113-5.115zm9.298 2.929l-7.114-7.113c-.445-.483 1.837-.931 2.929-.931 2.827 0 5.115 2.289 5.115 5.114 0 1.093-.364 3.543-.93 2.93z"/>
-    </g>
-</svg>
index 51a33ff..b18e2e6 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 0dcde9d..55a26c9 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="clear">
-        <path id="circle-with-strike" d="M11.999 5.022c-3.853 0-6.977 3.124-6.977 6.978 0 3.853 3.124 6.978 6.977 6.978 3.854 0 6.979-3.125 6.979-6.978 0-3.854-3.125-6.978-6.979-6.978zm-5.113 6.978c0-1.092.572-3.25.93-2.929l7.113 7.113c.488.525-1.837.931-2.93.931-2.825-.001-5.113-2.291-5.113-5.115zm9.298 2.929l-7.114-7.113c-.445-.483 1.837-.931 2.929-.931 2.827 0 5.115 2.289 5.115 5.114 0 1.093-.364 3.543-.93 2.93z"/>
-    </g>
+  <g id="clear">
+    <path id="circle-with-cross" d="M12 5c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm4 11l-1 1-3-3-3 3-1-1 3-3-3-3 1-1 3 3 3-3 1 1-3 3 3 3z"/>
+  </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/closeInput.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/closeInput.png
deleted file mode 100644 (file)
index b18e2e6..0000000
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/closeInput.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/closeInput.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/closeInput.svg
deleted file mode 100644 (file)
index 5d29e3c..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<?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 5c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm4 11l-1 1-3-3-3 3-1-1 3-3-3-3 1-1 3 3 3-3 1 1-3 3 3 3z"/>
-</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-ltr-invert.png
new file mode 100644 (file)
index 0000000..65b4c65
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-ltr-invert.svg
new file mode 100644 (file)
index 0000000..add25a4
--- /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: #FFFFFF }</style>
+    <g id="Layer_3">
+        <path d="M17 2l-12 12-1 5 5-1 12-12c0-2-2-4-4-4zm-9.8 13.5c-.3-.3-.7-.6-1-.8 2.3-2.3 11.3-11.4 11.3-11.4.4.1.7.3 1 .7l-11.3 11.5z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-ltr-progressive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-ltr-progressive.png
new file mode 100644 (file)
index 0000000..ee2be2d
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-ltr-progressive.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-ltr-progressive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-ltr-progressive.svg
new file mode 100644 (file)
index 0000000..bceb7c1
--- /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="Layer_3">
+        <path d="M17 2l-12 12-1 5 5-1 12-12c0-2-2-4-4-4zm-9.8 13.5c-.3-.3-.7-.6-1-.8 2.3-2.3 11.3-11.4 11.3-11.4.4.1.7.3 1 .7l-11.3 11.5z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl-invert.png
new file mode 100644 (file)
index 0000000..2b311a9
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl-invert.svg
new file mode 100644 (file)
index 0000000..339c830
--- /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: #FFFFFF }</style>
+    <g id="Layer_3">
+        <path d="M8 2l12 12 1 5-5-1-12-12c0-2 2-4 4-4zm9.8 13.5c.3-.3.7-.6 1-.8-2.3-2.3-11.3-11.4-11.3-11.4-.4.1-.7.3-1 .7l11.3 11.5z" id="path173"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl-progressive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl-progressive.png
new file mode 100644 (file)
index 0000000..8d36fa8
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl-progressive.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl-progressive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl-progressive.svg
new file mode 100644 (file)
index 0000000..d526fb4
--- /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="Layer_3">
+        <path d="M8 2l12 12 1 5-5-1-12-12c0-2 2-4 4-4zm9.8 13.5c.3-.3.7-.6 1-.8-2.3-2.3-11.3-11.4-11.3-11.4-.4.1-.7.3-1 .7l11.3 11.5z" id="path173"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-ltr-invert.png
new file mode 100644 (file)
index 0000000..fe07392
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-ltr-invert.svg
new file mode 100644 (file)
index 0000000..30d1021
--- /dev/null
@@ -0,0 +1,8 @@
+<?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="Layer_2">
+        <g id="g184">
+            <path d="M21 4v-1s0-3-3-3-3 3-3 3v1h-1v6h8v-6zm-1.5 0h-3v-1s0-1.5 1.5-1.5c1.48.06 1.5 1.5 1.5 1.5zm-6.5 5.6l-6.8 6.9c-.3-.3-.7-.6-1-.8 1.4-1.4 5-5 7.8-7.9v-1.8l-9 9-1 5 5-1 8-8h-3z" id="path186"/>
+        </g>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-rtl-invert.png
new file mode 100644 (file)
index 0000000..ff54699
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-rtl-invert.svg
new file mode 100644 (file)
index 0000000..0e975b5
--- /dev/null
@@ -0,0 +1,8 @@
+<?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="Layer_2">
+        <g id="g184">
+            <path d="M4 4v-1s0-3 3-3 3 3 3 3v1h1v6h-8v-6zm1.5 0h3v-1s0-1.5-1.5-1.5c-1.48.06-1.5 1.5-1.5 1.5zm6.5 5.6l6.8 6.9c.3-.3.7-.6 1-.8-1.4-1.4-5-5-7.8-7.9v-1.8l9 9 1 5-5-1-8-8h3z" id="path186"/>
+        </g>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-ltr-invert.png
new file mode 100644 (file)
index 0000000..3952442
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-ltr-invert.svg
new file mode 100644 (file)
index 0000000..cc8b61f
--- /dev/null
@@ -0,0 +1,11 @@
+<?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="g196">
+        <g id="g198">
+            <path d="M14.9 2.8c.9 0 1.8.2 2.7.6.9.4 1.6.9 1.9 1.6-2.8.1-5 1.1-6.6 3.1l1.3 2-6.7-.3.5-6.8 1.7 2c1.8-1.5 3.5-2.2 5.2-2.2z" id="path200"/>
+        </g>
+    </g>
+    <g id="g204">
+        <path d="M15.2 11.1l-2.6-.1-5.4 5.5c-.3-.3-.7-.6-1-.8.9-.9 2.8-2.8 4.7-4.8h-1.8l-4.1 4.1-1 5 5-1 7.8-7.8-1.6-.1zm5.4-5.1c-1.7 0-3.2.5-4.4 1.4l-.9.9.8 1.3.9 1.4 4-4c0-.3-.1-.7-.2-1h-.2z" id="path206"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-rtl-invert.png
new file mode 100644 (file)
index 0000000..53469ce
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-rtl-invert.svg
new file mode 100644 (file)
index 0000000..82018f0
--- /dev/null
@@ -0,0 +1,11 @@
+<?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="g196">
+        <g id="g198">
+            <path d="M10.1 2.8c-.9 0-1.8.2-2.7.6-.9.4-1.6.9-1.9 1.6 2.8.1 5 1.1 6.6 3.1l-1.3 2 6.7-.3-.5-6.8-1.7 2c-1.8-1.5-3.5-2.2-5.2-2.2z" id="path200"/>
+        </g>
+    </g>
+    <g id="g204">
+        <path d="M9.8 11.1l2.6-.1 5.4 5.5c.3-.3.7-.6 1-.8-.9-.9-2.8-2.8-4.7-4.8h1.8l4.1 4.1 1 5-5-1-7.8-7.8 1.6-.1zm-5.4-5.1c1.7 0 3.2.5 4.4 1.4l.9.9-.8 1.3-.9 1.4-4-4c0-.3.1-.7.2-1h.2z" id="path206"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr-invert.png
new file mode 100644 (file)
index 0000000..3be50ba
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr-invert.svg
new file mode 100644 (file)
index 0000000..c1bad9e
--- /dev/null
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><style>* { fill: #FFFFFF }</style>
+    <g id="external">
+        <path id="box" d="M2 2h3v1h-2v6h6v-2h1v3h-8z"/>
+        <path id="arrow" d="M6.211 2h3.789v3.789l-1.421-1.421-2.132 2.132-.947-.947 2.132-2.132z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl-invert.png
new file mode 100644 (file)
index 0000000..eaeaf6e
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl-invert.svg
new file mode 100644 (file)
index 0000000..f448c87
--- /dev/null
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><style>* { fill: #FFFFFF }</style>
+    <g id="external">
+        <path id="box" d="M7 3h2v6h-6v-2h-1v3h8v-8h-3z"/>
+        <path id="arrow" d="M2 5.789l1.421-1.421 2.132 2.132.947-.947-2.132-2.132 1.421-1.421h-3.789z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-ltr-invert.png
new file mode 100644 (file)
index 0000000..b9ad2b8
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-ltr-invert.svg
new file mode 100644 (file)
index 0000000..37ddb24
--- /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: #FFFFFF }</style>
+    <path d="M14 6.5v-1.5c-1.4-1.5-5.2-1.2-6 0v-1h-1v15h1v-7c.8-.8 3.4-.9 5-.5v1.5c1.2 1.5 4.3 1.2 5 0v-7c-.7.7-2.7.9-4 .5z" id="path216"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-rtl-invert.png
new file mode 100644 (file)
index 0000000..da059cf
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-rtl-invert.svg
new file mode 100644 (file)
index 0000000..4875a44
--- /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: #FFFFFF }</style>
+    <path d="M11 6.5v-1.5c1.4-1.5 5.2-1.2 6 0v-1h1v15h-1v-7c-.8-.8-3.4-.9-5-.5v1.5c-1.2 1.5-4.3 1.2-5 0v-7c.7.7 2.7.9 4 .5z" id="path216"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-ltr-invert.png
new file mode 100644 (file)
index 0000000..fd7f2ae
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-ltr-invert.svg
new file mode 100644 (file)
index 0000000..dcea1eb
--- /dev/null
@@ -0,0 +1,16 @@
+<?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="g2990">
+        <g id="Layer_1">
+            <path id="path227" d="M14 6.5v-1.5c-1.4-1.5-5.2-1.2-6 0v-1h-1v15h1v-7c.8-.8 3.4-.9 5-.5v1.5c1.2 1.5 4.3 1.2 5 0v-7c-.7.7-2.7.9-4 .5z"/>
+        </g>
+        <g id="Layer_2">
+            <g id="g230">
+                <path id="path232" d="M17.997 1.989l.99.99-15.98 15.98-.99-.99z"/>
+            </g>
+            <g id="g234">
+                <path id="path236" d="M16.999 1.016l.99.99-15.98 15.98-.99-.99z" fill="#fff"/>
+            </g>
+        </g>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-rtl-invert.png
new file mode 100644 (file)
index 0000000..1ae130d
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-rtl-invert.svg
new file mode 100644 (file)
index 0000000..d6ffcea
--- /dev/null
@@ -0,0 +1,16 @@
+<?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="g2990">
+        <g id="Layer_1">
+            <path id="path227" d="M11 6.5v-1.5c1.4-1.5 5.2-1.2 6 0v-1h1v15h-1v-7c-.8-.8-3.4-.9-5-.5v1.5c-1.2 1.5-4.3 1.2-5 0v-7c.7.7 2.7.9 4 .5z"/>
+        </g>
+        <g id="Layer_2">
+            <g id="g230">
+                <path id="path232" d="M7.003 1.989l-.99.99 15.98 15.98.99-.99z"/>
+            </g>
+            <g id="g234">
+                <path id="path236" d="M8.001 1.016l-.99.99 15.98 15.98.99-.99z" fill="#fff"/>
+            </g>
+        </g>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr-invert.png
new file mode 100644 (file)
index 0000000..1b1e2ed
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr-invert.svg
new file mode 100644 (file)
index 0000000..c98df5c
--- /dev/null
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->\r
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"\r
+        viewBox="-487 489 24 24" enable-background="new -487 489 24 24" xml:space="preserve"><style>* { fill: #FFFFFF }</style>\r
+<g>\r
+       <path d="M-471.2,493.6c-2.1,0-3.6,1.9-5.1,3.3c0.2,0,0.5-0.1,0.8-0.1c0.5,0,1,0.1,1.5,0.3c0.8-0.8,1.6-1.7,2.8-1.7\r
+               c0.6,0,1.3,0.3,1.8,0.7c1,1,1,2.6,0,3.6l-2.6,2.6c-0.4,0.4-1.2,0.7-1.8,0.7c-1.4,0-2.1-0.9-2.6-2l-1.3,1.3c0.8,1.5,2,2.6,3.8,2.6\r
+               c1.2,0,2.3-0.5,3-1.3l2.6-2.6c0.9-0.9,1.5-2,1.5-3.3C-467,495.5-469,493.6-471.2,493.6z M-475.5,505.7l-0.9,0.9\r
+               c-0.4,0.4-1.2,0.7-1.8,0.7c-0.6,0-1.3-0.3-1.8-0.7c-1-1-1-2.7,0-3.6l2.6-2.6c0.4-0.4,1.2-0.7,1.8-0.7c1.4,0,2.1,1,2.6,2l1.3-1.3\r
+               c-0.8-1.5-2-2.6-3.8-2.6c-1.2,0-2.3,0.5-3,1.3l-2.6,2.6c-1.7,1.7-1.7,4.4,0,6c1.6,1.6,4.4,1.7,5.9,0l1.9-1.9\r
+               c-0.3,0.1-0.6,0.1-0.9,0.1C-474.7,505.9-475.1,505.9-475.5,505.7z"/>\r
+</g>\r
+</svg>\r
index 3b60a11..1fe66f1 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 1b332ce..841ba7d 100644 (file)
@@ -1,6 +1,13 @@
-<?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>
-        <path d="M15.8 3.6c-2.1 0-3.6 1.9-5.1 3.3.2 0 .5-.1.8-.1.5 0 1 .1 1.5.3.8-.8 1.6-1.7 2.8-1.7.6 0 1.3.3 1.8.7 1 1 1 2.6 0 3.6l-2.6 2.6c-.4.4-1.2.7-1.8.7-1.4 0-2.1-.9-2.6-2l-1.3 1.3c.8 1.5 2 2.6 3.8 2.6 1.2 0 2.3-.5 3-1.3l2.6-2.6c.9-.9 1.5-2 1.5-3.3-.2-2.2-2.2-4.1-4.4-4.1zm-4.3 12.1l-.9.9c-.4.4-1.2.7-1.8.7-.6 0-1.3-.3-1.8-.7-1-1-1-2.7 0-3.6l2.6-2.6c.4-.4 1.2-.7 1.8-.7 1.4 0 2.1 1 2.6 2l1.3-1.3c-.8-1.5-2-2.6-3.8-2.6-1.2 0-2.3.5-3 1.3l-2.6 2.6c-1.7 1.7-1.7 4.4 0 6 1.6 1.6 4.4 1.7 5.9 0l1.9-1.9c-.3.1-.6.1-.9.1-.5 0-.9 0-1.3-.2z"/>
-    </g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>\r
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->\r
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"\r
+        viewBox="-487 489 24 24" enable-background="new -487 489 24 24" xml:space="preserve">\r
+<g>\r
+       <path d="M-471.2,493.6c-2.1,0-3.6,1.9-5.1,3.3c0.2,0,0.5-0.1,0.8-0.1c0.5,0,1,0.1,1.5,0.3c0.8-0.8,1.6-1.7,2.8-1.7\r
+               c0.6,0,1.3,0.3,1.8,0.7c1,1,1,2.6,0,3.6l-2.6,2.6c-0.4,0.4-1.2,0.7-1.8,0.7c-1.4,0-2.1-0.9-2.6-2l-1.3,1.3c0.8,1.5,2,2.6,3.8,2.6\r
+               c1.2,0,2.3-0.5,3-1.3l2.6-2.6c0.9-0.9,1.5-2,1.5-3.3C-467,495.5-469,493.6-471.2,493.6z M-475.5,505.7l-0.9,0.9\r
+               c-0.4,0.4-1.2,0.7-1.8,0.7c-0.6,0-1.3-0.3-1.8-0.7c-1-1-1-2.7,0-3.6l2.6-2.6c0.4-0.4,1.2-0.7,1.8-0.7c1.4,0,2.1,1,2.6,2l1.3-1.3\r
+               c-0.8-1.5-2-2.6-3.8-2.6c-1.2,0-2.3,0.5-3,1.3l-2.6,2.6c-1.7,1.7-1.7,4.4,0,6c1.6,1.6,4.4,1.7,5.9,0l1.9-1.9\r
+               c-0.3,0.1-0.6,0.1-0.9,0.1C-474.7,505.9-475.1,505.9-475.5,505.7z"/>\r
+</g>\r
+</svg>\r
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-rtl-invert.png
new file mode 100644 (file)
index 0000000..ead64bc
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-rtl-invert.svg
new file mode 100644 (file)
index 0000000..9168784
--- /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: #FFFFFF }</style>
+    <g id="g358">
+        <path d="M9.025 3.6c2.1 0 3.6 1.9 5.1 3.3-.2 0-.5-.1-.8-.1-.5 0-1 .1-1.5.3-.8-.8-1.6-1.7-2.8-1.7-.6 0-1.3.3-1.8.7-1 1-1 2.6 0 3.6l2.6 2.6c.4.4 1.2.7 1.8.7 1.4 0 2.1-.9 2.6-2l1.3 1.3c-.8 1.5-2 2.6-3.8 2.6-1.2 0-2.3-.5-3-1.3l-2.6-2.6c-.9-.9-1.5-2-1.5-3.3.2-2.2 2.2-4.1 4.4-4.1zm4.3 12.1l.9.9c.4.4 1.2.7 1.8.7.6 0 1.3-.3 1.8-.7 1-1 1-2.7 0-3.6l-2.6-2.6c-.4-.4-1.2-.7-1.8-.7-1.4 0-2.1 1-2.6 2l-1.3-1.3c.8-1.5 2-2.6 3.8-2.6 1.2 0 2.3.5 3 1.3l2.6 2.6c1.7 1.7 1.7 4.4 0 6-1.6 1.6-4.4 1.7-5.9 0l-1.9-1.9c.3.1.6.1.9.1.5 0 .9 0 1.3-.2z" id="path360"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-ltr-destructive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-ltr-destructive.png
new file mode 100644 (file)
index 0000000..16974b2
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-ltr-destructive.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-ltr-destructive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-ltr-destructive.svg
new file mode 100644 (file)
index 0000000..934cb4e
--- /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: #D11D13 }</style>
+    <g id="g390">
+        <path d="M15 8s0-3-2.5-3-2.5 3-2.5 3v1h5zm2 0v1h2v10h-10c-1.7 0-3-1.3-3-3v-7h2v-1s0-5 4.5-5 4.5 5 4.5 5z" id="path392"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-ltr-invert.png
new file mode 100644 (file)
index 0000000..082f2e9
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-ltr-invert.svg
new file mode 100644 (file)
index 0000000..7aed0f6
--- /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: #FFFFFF }</style>
+    <g id="g390">
+        <path d="M15 8s0-3-2.5-3-2.5 3-2.5 3v1h5zm2 0v1h2v10h-10c-1.7 0-3-1.3-3-3v-7h2v-1s0-5 4.5-5 4.5 5 4.5 5z" id="path392"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-rtl-destructive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-rtl-destructive.png
new file mode 100644 (file)
index 0000000..4bafac8
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-rtl-destructive.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-rtl-destructive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-rtl-destructive.svg
new file mode 100644 (file)
index 0000000..64c2324
--- /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: #D11D13 }</style>
+    <g id="g390">
+        <path d="M10 8s0-3 2.5-3 2.5 3 2.5 3v1h-5zm-2 0v1h-2v10h10c1.7 0 3-1.3 3-3v-7h-2v-1s0-5-4.5-5-4.5 5-4.5 5z" id="path392"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-rtl-invert.png
new file mode 100644 (file)
index 0000000..c5d842a
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-rtl-invert.svg
new file mode 100644 (file)
index 0000000..63cb2eb
--- /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: #FFFFFF }</style>
+    <g id="g390">
+        <path d="M10 8s0-3 2.5-3 2.5 3 2.5 3v1h-5zm-2 0v1h-2v10h10c1.7 0 3-1.3 3-3v-7h-2v-1s0-5-4.5-5-4.5 5-4.5 5z" id="path392"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/magnifyingGlass-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/magnifyingGlass-ltr.png
deleted file mode 100644 (file)
index 6f06dfe..0000000
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/magnifyingGlass-ltr.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/magnifyingGlass-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/magnifyingGlass-ltr.svg
deleted file mode 100644 (file)
index 49e598c..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<?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="M16.4 16.4c1-1.2 1.6-2.7 1.6-4.4 0-3.9-3.1-7-7-7s-7 3.1-7 7 3.1 7 7 7c1.2 0 2.3-.3 3.2-.8l2.8 2.8c1.4 1.4 2.5 1.5 4 0l-4.6-4.6zm-10.4-4.4c0-2.8 2.2-5 5-5s5 2.2 5 5-2.2 5-5 5-5-2.3-5-5z"/>
-</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/magnifyingGlass-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/magnifyingGlass-rtl.png
deleted file mode 100644 (file)
index 358048d..0000000
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/magnifyingGlass-rtl.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/magnifyingGlass-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/magnifyingGlass-rtl.svg
deleted file mode 100644 (file)
index c9695b6..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<?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="M8.6 16.4c-1-1.2-1.6-2.7-1.6-4.4 0-3.9 3.1-7 7-7s7 3.1 7 7-3.1 7-7 7c-1.2 0-2.3-.3-3.2-.8l-2.8 2.8c-1.4 1.4-2.5 1.5-4 0l4.6-4.6zm10.4-4.4c0-2.8-2.2-5-5-5s-5 2.2-5 5 2.2 5 5 5 5-2.3 5-5z" id="path414"/>
-</svg>
index 0400c19..0246e4d 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 dddbbb8..61b8877 100644 (file)
@@ -1,6 +1,10 @@
-<?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="menu">
-        <path id="lines" d="M6 15h12c.553 0 1 .447 1 1v1c0 .553-.447 1-1 1h-12c-.553 0-1-.447-1-1v-1c0-.553.447-1 1-1zm-1-4v1c0 .553.447 1 1 1h12c.553 0 1-.447 1-1v-1c0-.553-.447-1-1-1h-12c-.553 0-1 .447-1 1zm0-5v1c0 .553.447 1 1 1h12c.553 0 1-.447 1-1v-1c0-.553-.447-1-1-1h-12c-.553 0-1 .447-1 1z"/>
-    </g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>\r
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->\r
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"\r
+        viewBox="-487 489 24 24" enable-background="new -487 489 24 24" xml:space="preserve"><style>* { fill: #FFFFFF }</style>\r
+<g id="menu">\r
+       <path id="lines" d="M-481,505h12c0.6,0,1,0.4,1,1v1c0,0.6-0.4,1-1,1h-12c-0.6,0-1-0.4-1-1v-1C-482,505.4-481.6,505-481,505z\r
+                M-482,501v1c0,0.6,0.4,1,1,1h12c0.6,0,1-0.4,1-1v-1c0-0.6-0.4-1-1-1h-12C-481.6,500-482,500.4-482,501z M-482,496v1\r
+               c0,0.6,0.4,1,1,1h12c0.6,0,1-0.4,1-1v-1c0-0.6-0.4-1-1-1h-12C-481.6,495-482,495.4-482,496z"/>\r
+</g>\r
+</svg>\r
index 0a78119..de7b1d2 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 50ac8a3..89fd978 100644 (file)
@@ -1,6 +1,10 @@
-<?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="menu">
-        <path id="lines" d="M6 15h12c.553 0 1 .447 1 1v1c0 .553-.447 1-1 1h-12c-.553 0-1-.447-1-1v-1c0-.553.447-1 1-1zm-1-4v1c0 .553.447 1 1 1h12c.553 0 1-.447 1-1v-1c0-.553-.447-1-1-1h-12c-.553 0-1 .447-1 1zm0-5v1c0 .553.447 1 1 1h12c.553 0 1-.447 1-1v-1c0-.553-.447-1-1-1h-12c-.553 0-1 .447-1 1z"/>
-    </g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>\r
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->\r
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"\r
+        viewBox="-487 489 24 24" enable-background="new -487 489 24 24" xml:space="preserve">\r
+<g id="menu">\r
+       <path id="lines" d="M-481,505h12c0.6,0,1,0.4,1,1v1c0,0.6-0.4,1-1,1h-12c-0.6,0-1-0.4-1-1v-1C-482,505.4-481.6,505-481,505z\r
+                M-482,501v1c0,0.6,0.4,1,1,1h12c0.6,0,1-0.4,1-1v-1c0-0.6-0.4-1-1-1h-12C-481.6,500-482,500.4-482,501z M-482,496v1\r
+               c0,0.6,0.4,1,1,1h12c0.6,0,1-0.4,1-1v-1c0-0.6-0.4-1-1-1h-12C-481.6,495-482,495.4-482,496z"/>\r
+</g>\r
+</svg>\r
index 7060db7..ffe3601 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 dc1c06f..b3b923e 100644 (file)
@@ -1,6 +1,11 @@
-<?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>
-        <path d="M19.9 8.7c.3-.1.6-.3.8-.6s.3-.7.3-1.1v-1c-1.3.2-1.9.2-3.3.8-.9.5-1.6 1.1-2.2 1.8s-2.5 3.4-2.5 7.4v4h6c1.1 0 2-.9 2-2v-6h-4s.1-.9.8-1.8c.6-.7 1.3-1.2 2.1-1.5zm-14.4-.1c-.6.7-2.5 3.4-2.5 7.4v4h6c1.1 0 2-.9 2-2v-6h-4s.1-.9.8-1.8c.6-.7 1.3-1.2 2.1-1.5.3-.1.6-.3.8-.6s.3-.7.3-1.1v-1c-1.3.2-1.9.2-3.3.8-.8.5-1.6 1.1-2.2 1.8z"/>
-    </g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>\r
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->\r
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"\r
+        viewBox="-487 489 24 24" enable-background="new -487 489 24 24" xml:space="preserve">\r
+<g>\r
+       <path d="M-468.9,498.1c0.2-0.1,0.5-0.2,0.6-0.5s0.2-0.5,0.2-0.9V496c-1,0.2-1.5,0.2-2.6,0.6c-0.7,0.4-1.2,0.9-1.7,1.4\r
+               c-0.5,0.5-1.9,2.6-1.9,5.8v3.1h4.7c0.9,0,1.6-0.7,1.6-1.6v-4.7h-3.1c0,0,0.1-0.7,0.6-1.4C-470,498.7-469.5,498.3-468.9,498.1z\r
+                M-480.1,498c-0.5,0.5-1.9,2.9-1.9,6v2.9h4.7c0.9,0,1.6-0.7,1.6-1.6v-4.7h-3.1c0,0,0.1-0.7,0.6-1.4c0.5-0.5,1-0.9,1.6-1.2\r
+               c0.2-0.1,0.5-0.2,0.6-0.5s0.2-0.5,0.2-0.9V496c-1,0.2-1.5,0.2-2.6,0.6C-479,497-479.6,497.5-480.1,498z"/>\r
+</g>\r
+</svg>\r
index df0facf..a2acf5e 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 3a8b701..b40a8ac 100644 (file)
@@ -1,6 +1,11 @@
-<?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="g552">
-        <path d="M4.1 8.7c-.3-.1-.6-.3-.8-.6-.2-.3-.3-.7-.3-1.1v-1c1.3.2 1.9.2 3.3.8.9.5 1.6 1.1 2.2 1.8.6.7 2.5 3.4 2.5 7.4v4h-6c-1.1 0-2-.9-2-2v-6h4s-.1-.9-.8-1.8c-.6-.7-1.3-1.2-2.1-1.5zm14.4-.1c.6.7 2.5 3.4 2.5 7.4v4h-6c-1.1 0-2-.9-2-2v-6h4s-.1-.9-.8-1.8c-.6-.7-1.3-1.2-2.1-1.5-.3-.1-.6-.3-.8-.6-.2-.3-.3-.7-.3-1.1v-1c1.3.2 1.9.2 3.3.8.8.5 1.6 1.1 2.2 1.8z" id="path554"/>
-    </g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>\r
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->\r
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"\r
+        viewBox="-487 489 24 24" enable-background="new -487 489 24 24" xml:space="preserve">\r
+<g>\r
+       <path d="M-479.5,499.3c0.5,0.7,0.6,1.4,0.6,1.4h-3.1v4.7c0,0.9,0.7,1.6,1.6,1.6h4.7v-3.1c0-3.1-1.5-5.2-1.9-5.8\r
+               c-0.5-0.5-1-1-1.7-1.4c-1.1-0.5-1.6-0.5-2.6-0.6v0.8c0,0.3,0.1,0.6,0.2,0.9s0.4,0.4,0.6,0.5C-480.5,498.3-480,498.7-479.5,499.3z\r
+                M-471.7,496.6c-1.1-0.5-1.6-0.5-2.6-0.6v0.8c0,0.3,0.1,0.6,0.2,0.9s0.4,0.4,0.6,0.5c0.6,0.2,1.2,0.6,1.6,1.2\r
+               c0.5,0.7,0.6,1.4,0.6,1.4h-3.1v4.7c0,0.9,0.7,1.6,1.6,1.6h4.7V504c0-3.1-1.5-5.4-1.9-6C-470.4,497.5-471,497-471.7,496.6z"/>\r
+</g>\r
+</svg>\r
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-invert.png
deleted file mode 100644 (file)
index 3e15daf..0000000
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-invert.svg
deleted file mode 100644 (file)
index 5ae4952..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<?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="search">
-        <path id="magnifying-glass" d="M16.021 15.96l-2.374-2.375-.169-.099c.403-.566.643-1.26.643-2.009-.001-1.92-1.558-3.477-3.477-3.477-1.921 0-3.478 1.557-3.478 3.478 0 1.92 1.557 3.477 3.478 3.477.749 0 1.442-.239 2.01-.643l.098.169 2.375 2.374c.19.189.543.143.79-.104s.293-.601.104-.791zm-5.377-2.27c-1.221 0-2.213-.991-2.213-2.213 0-1.221.992-2.213 2.213-2.213 1.222 0 2.213.992 2.213 2.213-.001 1.222-.992 2.213-2.213 2.213z"/>
-    </g>
-</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-ltr-invert.png
new file mode 100644 (file)
index 0000000..4b6ecd2
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-ltr-invert.svg
new file mode 100644 (file)
index 0000000..3d58783
--- /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: #FFFFFF }</style>
+    <g id="search">
+        <path id="magnifying-glass" d="M 10.5,4 C 6.9101491,4 4,6.9101491 4,10.5 c 0,3.589851 2.9101491,6.5 6.5,6.5 1.02211,0 1.983324,-0.235899 2.84375,-0.65625 L 16,19 c 1.4,1.4 2.5,1.5 4,0 L 15.5625,14.5625 C 16.462737,13.447115 17,12.044969 17,10.5 17,6.9101491 14.089851,4 10.5,4 z m 0,2 C 12.985281,6 15,8.0147186 15,10.5 15,12.985281 12.985281,15 10.5,15 8.0147186,15 6,12.985281 6,10.5 6,8.0147186 8.0147186,6 10.5,6 z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-ltr.png
new file mode 100644 (file)
index 0000000..c10dc66
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-ltr.svg
new file mode 100644 (file)
index 0000000..cdcbc30
--- /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">
+    <g id="search">
+        <path id="magnifying-glass" d="M 10.5,4 C 6.9101491,4 4,6.9101491 4,10.5 c 0,3.589851 2.9101491,6.5 6.5,6.5 1.02211,0 1.983324,-0.235899 2.84375,-0.65625 L 16,19 c 1.4,1.4 2.5,1.5 4,0 L 15.5625,14.5625 C 16.462737,13.447115 17,12.044969 17,10.5 17,6.9101491 14.089851,4 10.5,4 z m 0,2 C 12.985281,6 15,8.0147186 15,10.5 15,12.985281 12.985281,15 10.5,15 8.0147186,15 6,12.985281 6,10.5 6,8.0147186 8.0147186,6 10.5,6 z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-rtl-invert.png
new file mode 100644 (file)
index 0000000..7868dc1
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-rtl-invert.svg
new file mode 100644 (file)
index 0000000..91130f0
--- /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: #FFFFFF }</style>
+    <g id="search">
+        <path id="magnifying-glass" d="m 13.5,4 c 3.589851,0 6.5,2.9101491 6.5,6.5 0,3.589851 -2.910149,6.5 -6.5,6.5 -1.02211,0 -1.983324,-0.235899 -2.84375,-0.65625 L 8,19 C 6.6,20.4 5.5,20.5 4,19 L 8.4375,14.5625 C 7.537263,13.447115 7,12.044969 7,10.5 7,6.9101491 9.910149,4 13.5,4 z m 0,2 C 11.014719,6 9,8.0147186 9,10.5 9,12.985281 11.014719,15 13.5,15 15.985281,15 18,12.985281 18,10.5 18,8.0147186 15.985281,6 13.5,6 z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-rtl.png
new file mode 100644 (file)
index 0000000..dab4ff1
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-rtl.svg
new file mode 100644 (file)
index 0000000..c675349
--- /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">
+    <g id="search">
+        <path id="magnifying-glass" d="m 13.5,4 c 3.589851,0 6.5,2.9101491 6.5,6.5 0,3.589851 -2.910149,6.5 -6.5,6.5 -1.02211,0 -1.983324,-0.235899 -2.84375,-0.65625 L 8,19 C 6.6,20.4 5.5,20.5 4,19 L 8.4375,14.5625 C 7.537263,13.447115 7,12.044969 7,10.5 7,6.9101491 9.910149,4 13.5,4 z m 0,2 C 11.014719,6 9,8.0147186 9,10.5 9,12.985281 11.014719,15 13.5,15 15.985281,15 18,12.985281 18,10.5 18,8.0147186 15.985281,6 13.5,6 z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/search.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search.png
deleted file mode 100644 (file)
index 39d3ab8..0000000
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/search.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/search.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search.svg
deleted file mode 100644 (file)
index e4db4f0..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<?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="search">
-        <path id="magnifying-glass" d="M16.021 15.96l-2.374-2.375-.169-.099c.403-.566.643-1.26.643-2.009-.001-1.92-1.558-3.477-3.477-3.477-1.921 0-3.478 1.557-3.478 3.478 0 1.92 1.557 3.477 3.478 3.477.749 0 1.442-.239 2.01-.643l.098.169 2.375 2.374c.19.189.543.143.79-.104s.293-.601.104-.791zm-5.377-2.27c-1.221 0-2.213-.991-2.213-2.213 0-1.221.992-2.213 2.213-2.213 1.222 0 2.213.992 2.213 2.213-.001 1.222-.992 2.213-2.213 2.213z"/>
-    </g>
-</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/secure-link-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/secure-link-invert.png
new file mode 100644 (file)
index 0000000..0e9a5c5
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/secure-link-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/secure-link-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/secure-link-invert.svg
new file mode 100644 (file)
index 0000000..2aeba4e
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><style>* { fill: #FFFFFF }</style>
+    <g id="secure">
+        <path id="lock" d="M8 5h.019v-.997c.001-.057.004-1.409-.832-2.255-.434-.438-.998-.66-1.679-.66s-1.245.222-1.678.659c-.837.847-.833 2.199-.832 2.251v1.002h.002c-.553 0-1 .447-1 1v3c0 .553.447 1 1 1h5c.553 0 1-.447 1-1v-3c0-.553-.447-1-1-1zm-4.002 0v-1.007c0-.01.005-.999.543-1.543.482-.485 1.449-.487 1.932-.002.544.546.546 1.536.546 1.55v1.002h-3.021z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/star-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/star-invert.png
new file mode 100644 (file)
index 0000000..445f2d4
Binary files /dev/null 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-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/star-invert.svg
new file mode 100644 (file)
index 0000000..f58e8ce
--- /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: #FFFFFF }</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-.5 1.9-3.6m0-3.4l-2.8 5.6-6.2.9 4.5 4.4-1.1 6.1 5.6-3 5.5 3-1-6.2 4.5-4.4-6.3-.9-2.7-5.5z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-ltr-invert.png
new file mode 100644 (file)
index 0000000..35e6837
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-ltr-invert.svg
new file mode 100644 (file)
index 0000000..4fbd4ec
--- /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: #FFFFFF }</style>
+    <path d="M4 9h12v2h-12v-2zm0 3h8v2h-8v-2zm0-7h16v3h-16v-3zm16 14h-16v-3h16v3z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-rtl-invert.png
new file mode 100644 (file)
index 0000000..2ae83c7
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-rtl-invert.svg
new file mode 100644 (file)
index 0000000..b18ddc4
--- /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: #FFFFFF }</style>
+    <path d="M20 9h-12v2h12v-2zm0 3h-8v2h8v-2zm0-7h-16v3h16v-3zm-16 14h16v-3h-16v3z" id="path624"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSideMenu-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSideMenu-invert.png
new file mode 100644 (file)
index 0000000..b944490
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSideMenu-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSideMenu-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSideMenu-invert.svg
new file mode 100644 (file)
index 0000000..47eff5d
--- /dev/null
@@ -0,0 +1,12 @@
+<?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>
+        <path d="M20 19h-16v-2h16v2z"/>
+    </g>
+    <g>
+        <path d="M20 15h-16v-2h16v2z"/>
+    </g>
+    <g>
+        <path d="M20 11h-16v-2h16v2z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-ltr-invert.png
new file mode 100644 (file)
index 0000000..88d26c2
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-ltr-invert.svg
new file mode 100644 (file)
index 0000000..d694cb1
--- /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: #FFFFFF }</style>
+    <g>
+        <path d="M20 11h-16v-2h16v2zm-16 1h8v2h-8v-2z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-rtl-invert.png
new file mode 100644 (file)
index 0000000..279d80a
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-rtl-invert.svg
new file mode 100644 (file)
index 0000000..86a52ee
--- /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: #FFFFFF }</style>
+    <g id="g654">
+        <path d="M4 11h16v-2h-16v2zm16 1h-8v2h8v-2z" id="path656"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-ltr-invert.png
new file mode 100644 (file)
index 0000000..57ac8b7
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-ltr-invert.svg
new file mode 100644 (file)
index 0000000..d2e9786
--- /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: #FFFFFF }</style>
+    <g>
+        <path d="M17 13h-13v-3h13v3zm-5 6h-8v-3h8v3zm-8-12v-3h16v3h-16z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-ltr-progressive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-ltr-progressive.png
new file mode 100644 (file)
index 0000000..5d9fca8
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-ltr-progressive.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-ltr-progressive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-ltr-progressive.svg
new file mode 100644 (file)
index 0000000..be30320
--- /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>
+        <path d="M17 13h-13v-3h13v3zm-5 6h-8v-3h8v3zm-8-12v-3h16v3h-16z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-rtl-invert.png
new file mode 100644 (file)
index 0000000..72d4906
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-rtl-invert.svg
new file mode 100644 (file)
index 0000000..6266319
--- /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: #FFFFFF }</style>
+    <g id="g666">
+        <path d="M7 13h13v-3h-13v3zm5 6h8v-3h-8v3zm8-12v-3h-16v3h16z" id="path668"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-rtl-progressive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-rtl-progressive.png
new file mode 100644 (file)
index 0000000..a51e389
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-rtl-progressive.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-rtl-progressive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-rtl-progressive.svg
new file mode 100644 (file)
index 0000000..c5847b1
--- /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="g666">
+        <path d="M7 13h13v-3h-13v3zm5 6h8v-3h-8v3zm8-12v-3h-16v3h16z" id="path668"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-constructive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-constructive.png
new file mode 100644 (file)
index 0000000..66af375
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-constructive.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-constructive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-constructive.svg
new file mode 100644 (file)
index 0000000..82171db
--- /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: #00AF89 }</style>
+    <g id="tag">
+        <path d="M18.748 11.717c.389.389.389 1.025 0 1.414l-4.949 4.95c-.389.389-1.025.389-1.414 0l-6.01-6.01c-.389-.389-.707-1.157-.707-1.707l-.001-4.364c0-.55.45-1 1-1h4.364c.55 0 1.318.318 1.707.707l6.01 6.01zm-10.644-4.261c-.579.576-.578 1.514-.001 2.093.578.577 1.516.577 2.095.001.576-.578.576-1.517 0-2.095-.581-.576-1.518-.577-2.094.001z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-destructive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-destructive.png
new file mode 100644 (file)
index 0000000..1de90d4
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-destructive.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-destructive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-destructive.svg
new file mode 100644 (file)
index 0000000..3d48512
--- /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: #D11D13 }</style>
+    <g id="tag">
+        <path d="M18.748 11.717c.389.389.389 1.025 0 1.414l-4.949 4.95c-.389.389-1.025.389-1.414 0l-6.01-6.01c-.389-.389-.707-1.157-.707-1.707l-.001-4.364c0-.55.45-1 1-1h4.364c.55 0 1.318.318 1.707.707l6.01 6.01zm-10.644-4.261c-.579.576-.578 1.514-.001 2.093.578.577 1.516.577 2.095.001.576-.578.576-1.517 0-2.095-.581-.576-1.518-.577-2.094.001z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-progressive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-progressive.png
new file mode 100644 (file)
index 0000000..a6759e2
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-progressive.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-progressive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-progressive.svg
new file mode 100644 (file)
index 0000000..f52e06c
--- /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="tag">
+        <path d="M18.748 11.717c.389.389.389 1.025 0 1.414l-4.949 4.95c-.389.389-1.025.389-1.414 0l-6.01-6.01c-.389-.389-.707-1.157-.707-1.707l-.001-4.364c0-.55.45-1 1-1h4.364c.55 0 1.318.318 1.707.707l6.01 6.01zm-10.644-4.261c-.579.576-.578 1.514-.001 2.093.578.577 1.516.577 2.095.001.576-.578.576-1.517 0-2.095-.581-.576-1.518-.577-2.094.001z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-warning.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-warning.png
new file mode 100644 (file)
index 0000000..77fc366
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-warning.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-warning.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-warning.svg
new file mode 100644 (file)
index 0000000..337adb6
--- /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: #FF5D00 }</style>
+    <g id="tag">
+        <path d="M18.748 11.717c.389.389.389 1.025 0 1.414l-4.949 4.95c-.389.389-1.025.389-1.414 0l-6.01-6.01c-.389-.389-.707-1.157-.707-1.707l-.001-4.364c0-.55.45-1 1-1h4.364c.55 0 1.318.318 1.707.707l6.01 6.01zm-10.644-4.261c-.579.576-.578 1.514-.001 2.093.578.577 1.516.577 2.095.001.576-.578.576-1.517 0-2.095-.581-.576-1.518-.577-2.094.001z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/trash-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/trash-invert.png
new file mode 100644 (file)
index 0000000..d730765
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/trash-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/trash-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/trash-invert.svg
new file mode 100644 (file)
index 0000000..baa31f6
--- /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: #FFFFFF }</style>
+    <path d="M6 8c0-1.1.9-2 2-2h2l1-1h2l1 1h2c1.1 0 2 .9 2 2h-12zm1 1h10l-1 11h-8z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-ltr-invert.png
new file mode 100644 (file)
index 0000000..bc977a7
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-ltr-invert.svg
new file mode 100644 (file)
index 0000000..20cd299
--- /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: #FFFFFF }</style>
+    <g>
+        <path d="M20.5 20.5l-15.5-15.5-1 1 3 3 1 11h8l.2-1.8 3.3 3.3zm-3.5-11.5h-6l5.5 5.5zm1-1c0-1.1-.9-2-2-2h-2l-1-1h-2l-1 1h-2l2 2h8z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-rtl-invert.png
new file mode 100644 (file)
index 0000000..162d9a9
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-rtl-invert.svg
new file mode 100644 (file)
index 0000000..aebedec
--- /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: #FFFFFF }</style>
+    <g id="g714">
+        <path d="M4 20.5l15.5-15.5 1 1-3 3-1 11h-8l-.2-1.8-3.3 3.3zm3.5-11.5h6l-5.5 5.5zm-1-1c0-1.1.9-2 2-2h2l1-1h2l1 1h2l-2 2h-8z" id="path716"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-ltr-destructive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-ltr-destructive.png
new file mode 100644 (file)
index 0000000..b4c1366
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-ltr-destructive.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-ltr-destructive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-ltr-destructive.svg
new file mode 100644 (file)
index 0000000..97fcdc4
--- /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: #D11D13 }</style>
+    <path d="M12 9v-2s0-5-4.5-5-4.5 5-4.5 5h2s0-3 2.5-3 2.5 3 2.5 3v2h-3v7c0 1.7 1.3 3 3 3h10v-10z" id="path726"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-ltr-invert.png
new file mode 100644 (file)
index 0000000..3a0bc75
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-ltr-invert.svg
new file mode 100644 (file)
index 0000000..b496a06
--- /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: #FFFFFF }</style>
+    <path d="M12 9v-2s0-5-4.5-5-4.5 5-4.5 5h2s0-3 2.5-3 2.5 3 2.5 3v2h-3v7c0 1.7 1.3 3 3 3h10v-10z" id="path726"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-rtl-destructive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-rtl-destructive.png
new file mode 100644 (file)
index 0000000..03d91f2
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-rtl-destructive.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-rtl-destructive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-rtl-destructive.svg
new file mode 100644 (file)
index 0000000..a52f0fe
--- /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: #D11D13 }</style>
+    <path d="M11 9v-2s0-5 4.5-5 4.5 5 4.5 5h-2s0-3-2.5-3-2.5 3-2.5 3v2h3v7c0 1.7-1.3 3-3 3h-10v-10z" id="path726"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-rtl-invert.png
new file mode 100644 (file)
index 0000000..b823325
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-rtl-invert.svg
new file mode 100644 (file)
index 0000000..814af1d
--- /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: #FFFFFF }</style>
+    <path d="M11 9v-2s0-5 4.5-5 4.5 5 4.5 5h-2s0-3-2.5-3-2.5 3-2.5 3v2h3v7c0 1.7-1.3 3-3 3h-10v-10z" id="path726"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar-invert.png
new file mode 100644 (file)
index 0000000..03a5687
Binary files /dev/null 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-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar-invert.svg
new file mode 100644 (file)
index 0000000..b66ce2a
--- /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: #FFFFFF }</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>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewCompact-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewCompact-invert.png
new file mode 100644 (file)
index 0000000..8e0abb0
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewCompact-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewCompact-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewCompact-invert.svg
new file mode 100644 (file)
index 0000000..ed1913a
--- /dev/null
@@ -0,0 +1,14 @@
+<?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="viewCompact">
+        <circle cx="6" cy="6" r="2"/>
+        <circle cx="12" cy="6" r="2"/>
+        <circle cx="18" cy="6" r="2"/>
+        <circle cx="6" cy="12" r="2"/>
+        <circle cx="12" cy="12" r="2"/>
+        <circle cx="18" cy="12" r="2"/>
+        <circle cx="6" cy="18" r="2"/>
+        <circle cx="12" cy="18" r="2"/>
+        <circle cx="18" cy="18" r="2"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewCompact.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewCompact.png
new file mode 100644 (file)
index 0000000..bc4bc26
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewCompact.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewCompact.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewCompact.svg
new file mode 100644 (file)
index 0000000..d96a2e3
--- /dev/null
@@ -0,0 +1,14 @@
+<?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="viewCompact">
+        <circle cx="6" cy="6" r="2"/>
+        <circle cx="12" cy="6" r="2"/>
+        <circle cx="18" cy="6" r="2"/>
+        <circle cx="6" cy="12" r="2"/>
+        <circle cx="12" cy="12" r="2"/>
+        <circle cx="18" cy="12" r="2"/>
+        <circle cx="6" cy="18" r="2"/>
+        <circle cx="12" cy="18" r="2"/>
+        <circle cx="18" cy="18" r="2"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-ltr-invert.png
new file mode 100644 (file)
index 0000000..35bbc8d
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-ltr-invert.svg
new file mode 100644 (file)
index 0000000..14e435d
--- /dev/null
@@ -0,0 +1,9 @@
+<?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="viewDetails">
+        <circle cx="5.5" cy="8.5" r="2.5"/>
+        <path d="M10 6h12v1H10zM10 8h9v1h-9zM10 10h4v1h-4z"/>
+        <circle cx="5.5" cy="16.5" r="2.5"/>
+        <path d="M10 14h12v1H10zM10 16h9v1h-9zM10 18h4v1h-4z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-ltr.png
new file mode 100644 (file)
index 0000000..4ab5394
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-ltr.svg
new file mode 100644 (file)
index 0000000..4f5f9b3
--- /dev/null
@@ -0,0 +1,9 @@
+<?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="viewDetails">
+        <circle cx="5.5" cy="8.5" r="2.5"/>
+        <path d="M10 6h12v1H10zM10 8h9v1h-9zM10 10h4v1h-4z"/>
+        <circle cx="5.5" cy="16.5" r="2.5"/>
+        <path d="M10 14h12v1H10zM10 16h9v1h-9zM10 18h4v1h-4z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-rtl-invert.png
new file mode 100644 (file)
index 0000000..c45dd11
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-rtl-invert.svg
new file mode 100644 (file)
index 0000000..f4838fe
--- /dev/null
@@ -0,0 +1,9 @@
+<?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="viewDetails">
+        <circle cx="18.5" cy="8.5" r="2.5"/>
+        <path d="M14 6H2v1h12zm0 2H5v1h9zm0 2h-4v1h4z"/>
+        <circle cx="18.5" cy="16.5" r="2.5"/>
+        <path d="M14 14H2v1h12zm0 2H5v1h9zm0 2h-4v1h4z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-rtl.png
new file mode 100644 (file)
index 0000000..46587ec
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-rtl.svg
new file mode 100644 (file)
index 0000000..f43b05f
--- /dev/null
@@ -0,0 +1,9 @@
+<?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="viewDetails">
+        <circle cx="18.5" cy="8.5" r="2.5"/>
+        <path d="M14 6H2v1h12zm0 2H5v1h9zm0 2h-4v1h4z"/>
+        <circle cx="18.5" cy="16.5" r="2.5"/>
+        <path d="M14 14H2v1h12zm0 2H5v1h9zm0 2h-4v1h4z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/visionSimulator-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/visionSimulator-invert.png
new file mode 100644 (file)
index 0000000..118e468
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/visionSimulator-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/visionSimulator-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/visionSimulator-invert.svg
new file mode 100644 (file)
index 0000000..ae0d94e
--- /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: #FFFFFF }</style>
+    <path d="M0 10v8h2.3c.3.6 1 1 1.7 1h4c1.5 0 2.7-.8 3-2h2c.3 1.2 1.5 2 3 2h4c.7 0 1.4 0 1.7-1H24v-8zm10 6c0 1-.4 2-2 2H4c-.6 0-1-.4-1-1v-3c0-.6.4-1 1-1h5c.6 0 1 .4 1 1zm11 1c0 .6-.4 1-1 1h-4c-1.6 0-2-1-2-2v-2c0-.6.4-1 1-1h5c.6 0 1 .4 1 1z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/visionSimulator.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/visionSimulator.png
new file mode 100644 (file)
index 0000000..e1afbae
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/visionSimulator.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/visionSimulator.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/visionSimulator.svg
new file mode 100644 (file)
index 0000000..ae6ba27
--- /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">
+    <path d="M0 10v8h2.3c.3.6 1 1 1.7 1h4c1.5 0 2.7-.8 3-2h2c.3 1.2 1.5 2 3 2h4c.7 0 1.4 0 1.7-1H24v-8zm10 6c0 1-.4 2-2 2H4c-.6 0-1-.4-1-1v-3c0-.6.4-1 1-1h5c.6 0 1 .4 1 1zm11 1c0 .6-.4 1-1 1h-4c-1.6 0-2-1-2-2v-2c0-.6.4-1 1-1h5c.6 0 1 .4 1 1z"/>
+</svg>
index 55f3d1f..f18841d 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 6ee6803..847f935 100644 (file)
@@ -1,6 +1,8 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><style>* { fill: #FFFFFF }</style>
-    <g id="down">
-        <path id="arrow" d="M11 4l-.463-.467c-.45-.446-1.186-.445-1.637 0l-2.897 2.89-2.915-2.898c-.45-.446-1.176-.43-1.626.017L1 4l5.003 5v-.01V9L11 4"/>
-    </g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>\r
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->\r
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"\r
+        viewBox="0 0 1000 1000" enable-background="new 0 0 1000 1000" xml:space="preserve"><style>* { fill: #FFFFFF }</style>\r
+<g id="down">\r
+       <path id="arrow" d="M883.3,341H116.7L500,724.3l0,0l0,0L883.3,341"/>\r
+</g>\r
+</svg>\r
index db8c51d..15ec586 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 0c0da8e..1738057 100644 (file)
@@ -1,6 +1,8 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
-    <g id="down">
-        <path id="arrow" d="M11 4l-.463-.467c-.45-.446-1.186-.445-1.637 0l-2.897 2.89-2.915-2.898c-.45-.446-1.176-.43-1.626.017L1 4l5.003 5v-.01V9L11 4"/>
-    </g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>\r
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->\r
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"\r
+        viewBox="0 0 1000 1000" enable-background="new 0 0 1000 1000" xml:space="preserve">\r
+<g id="down">\r
+       <path id="arrow" d="M883.3,341H116.7L500,724.3l0,0l0,0L883.3,341"/>\r
+</g>\r
+</svg>\r
index 9edc9de..22bf897 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 64203e1..2a91c02 100644 (file)
@@ -1,6 +1,8 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><style>* { fill: #FFFFFF }</style>
-    <g id="ltr">
-        <path id="arrow" d="M4 1l-.47.463c-.444.45-.444 1.186 0 1.637L6.423 6l-2.9 2.91c-.444.45-.43 1.177.02 1.627L4 11l5-5h-.01H9L4 1"/>
-    </g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>\r
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->\r
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"\r
+        viewBox="-493 495 12 12" enable-background="new -493 495 12 12" xml:space="preserve"><style>* { fill: #FFFFFF }</style>\r
+<g id="ltr">\r
+       <path id="arrow" d="M-489,496v10l5-5h0h0L-489,496"/>\r
+</g>\r
+</svg>\r
index 19e9820..4440329 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 0d11e3e..fb366e6 100644 (file)
@@ -1,6 +1,8 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
-    <g id="ltr">
-        <path id="arrow" d="M4 1l-.47.463c-.444.45-.444 1.186 0 1.637L6.423 6l-2.9 2.91c-.444.45-.43 1.177.02 1.627L4 11l5-5h-.01H9L4 1"/>
-    </g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>\r
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->\r
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"\r
+        viewBox="-493 495 12 12" enable-background="new -493 495 12 12" xml:space="preserve">\r
+<g id="ltr">\r
+       <path id="arrow" d="M-489,496v10l5-5h0h0L-489,496"/>\r
+</g>\r
+</svg>\r
index ac769a3..4f3c9d1 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 3d36e4f..3cce872 100644 (file)
@@ -1,6 +1,8 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><style>* { fill: #FFFFFF }</style>
-    <g id="rtl">
-        <path id="arrow" d="M8 11l.47-.463c.444-.45.444-1.186 0-1.637L5.576 6l2.9-2.91c.444-.45.43-1.177-.02-1.627L8 1 3 6h.01H3l5 5"/>
-    </g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>\r
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->\r
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"\r
+        viewBox="-493 495 12 12" enable-background="new -493 495 12 12" xml:space="preserve"><style>* { fill: #FFFFFF }</style>\r
+<g id="rtl">\r
+       <path id="arrow" d="M-485,506v-10l-5,5h0h0L-485,506"/>\r
+</g>\r
+</svg>\r
index d912a1b..5f1f868 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 e4c04b8..62b6bb5 100644 (file)
@@ -1,6 +1,8 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
-    <g id="rtl">
-        <path id="arrow" d="M8 11l.47-.463c.444-.45.444-1.186 0-1.637L5.576 6l2.9-2.91c.444-.45.43-1.177-.02-1.627L8 1 3 6h.01H3l5 5"/>
-    </g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>\r
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->\r
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"\r
+        viewBox="-493 495 12 12" enable-background="new -493 495 12 12" xml:space="preserve">\r
+<g id="rtl">\r
+       <path id="arrow" d="M-485,506v-10l-5,5h0h0L-485,506"/>\r
+</g>\r
+</svg>\r
index c8f4402..e6fad56 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 9bbde71..50da8de 100644 (file)
@@ -1,6 +1,8 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><style>* { fill: #FFFFFF }</style>
-    <g id="up">
-        <path id="arrow" d="M1 8l.463.47c.45.444 1.186.444 1.637 0L6 5.567l2.91 2.91c.45.444 1.177.43 1.627-.02L11 8 6 2.99V3v-.01L1 8"/>
-    </g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>\r
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->\r
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"\r
+        viewBox="-493 495 12 12" enable-background="new -493 495 12 12" xml:space="preserve"><style>* { fill: #FFFFFF }</style>\r
+<g id="up">\r
+       <path id="arrow" d="M-492,503h10l-5-5v0v0L-492,503"/>\r
+</g>\r
+</svg>\r
index 214b12e..38d01c7 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 ad41a87..20e734f 100644 (file)
@@ -1,6 +1,8 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
-    <g id="up">
-        <path id="arrow" d="M1 8l.463.47c.45.444 1.186.444 1.637 0L6 5.567l2.91 2.91c.45.444 1.177.43 1.627-.02L11 8 6 2.99V3v-.01L1 8"/>
-    </g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>\r
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->\r
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"\r
+        viewBox="-493 495 12 12" enable-background="new -493 495 12 12" xml:space="preserve">\r
+<g id="up">\r
+       <path id="arrow" d="M-492,503h10l-5-5v0v0L-492,503"/>\r
+</g>\r
+</svg>\r
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr-invert.png
new file mode 100644 (file)
index 0000000..2840bef
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr-invert.svg
new file mode 100644 (file)
index 0000000..f46b1ee
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><style>* { fill: #FFFFFF }</style>
+    <g id="search">
+        <path id="path3051" d="M10.369 9.474l-2.374-2.375-.169-.099c.403-.566.643-1.26.643-2.009-.001-1.92-1.558-3.477-3.477-3.477-1.921 0-3.478 1.557-3.478 3.478 0 1.92 1.557 3.477 3.478 3.477.749 0 1.442-.239 2.01-.643l.098.169 2.375 2.374c.19.189.543.143.79-.104s.293-.601.104-.791zm-5.377-2.27c-1.221 0-2.213-.991-2.213-2.213 0-1.221.992-2.213 2.213-2.213 1.222 0 2.213.992 2.213 2.213-.001 1.222-.992 2.213-2.213 2.213z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr.png
new file mode 100644 (file)
index 0000000..df1c61e
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr.svg
new file mode 100644 (file)
index 0000000..266349e
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
+    <g id="search">
+        <path id="path3051" d="M10.369 9.474l-2.374-2.375-.169-.099c.403-.566.643-1.26.643-2.009-.001-1.92-1.558-3.477-3.477-3.477-1.921 0-3.478 1.557-3.478 3.478 0 1.92 1.557 3.477 3.478 3.477.749 0 1.442-.239 2.01-.643l.098.169 2.375 2.374c.19.189.543.143.79-.104s.293-.601.104-.791zm-5.377-2.27c-1.221 0-2.213-.991-2.213-2.213 0-1.221.992-2.213 2.213-2.213 1.222 0 2.213.992 2.213 2.213-.001 1.222-.992 2.213-2.213 2.213z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl-invert.png
new file mode 100644 (file)
index 0000000..665a088
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl-invert.svg
new file mode 100644 (file)
index 0000000..bd962d9
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><style>* { fill: #FFFFFF }</style>
+    <g id="search">
+        <path id="path3051" d="M1.631 9.474l2.374-2.375.169-.099c-.403-.566-.643-1.26-.643-2.009.001-1.92 1.558-3.477 3.477-3.477 1.921 0 3.478 1.557 3.478 3.478 0 1.92-1.557 3.477-3.478 3.477-.749 0-1.442-.239-2.01-.643l-.098.169-2.375 2.374c-.19.189-.543.143-.79-.104s-.293-.601-.104-.791zm5.377-2.27c1.221 0 2.213-.991 2.213-2.213 0-1.221-.992-2.213-2.213-2.213-1.222 0-2.213.992-2.213 2.213.001 1.222.992 2.213 2.213 2.213z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl.png
new file mode 100644 (file)
index 0000000..c9443d7
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl.svg
new file mode 100644 (file)
index 0000000..5368fd7
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
+    <g id="search">
+        <path id="path3051" d="M1.631 9.474l2.374-2.375.169-.099c-.403-.566-.643-1.26-.643-2.009.001-1.92 1.558-3.477 3.477-3.477 1.921 0 3.478 1.557 3.478 3.478 0 1.92-1.557 3.477-3.478 3.477-.749 0-1.442-.239-2.01-.643l-.098.169-2.375 2.374c-.19.189-.543.143-.79-.104s-.293-.601-.104-.791zm5.377-2.27c1.221 0 2.213-.991 2.213-2.213 0-1.221-.992-2.213-2.213-2.213-1.222 0-2.213.992-2.213 2.213.001 1.222.992 2.213 2.213 2.213z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/indicators.json b/resources/lib/oojs-ui/themes/mediawiki/indicators.json
new file mode 100644 (file)
index 0000000..d83e57e
--- /dev/null
@@ -0,0 +1,29 @@
+{
+       "selectorWithoutVariant": ".oo-ui-indicator-{name}",
+       "selectorWithVariant": ".oo-ui-image-{variant} .oo-ui-indicator-{name}, .oo-ui-image-{variant}.oo-ui-indicator-{name}",
+       "intro": "@import '../../../../src/styles/common';",
+       "variants": {
+               "invert": {
+                       "color": "#FFFFFF",
+                       "global": true
+               }
+       },
+       "images": {
+               "alert": { "file": "images/indicators/alert.svg" },
+               "up": { "file": "images/indicators/arrow-up.svg" },
+               "down": { "file": "images/indicators/arrow-down.svg" },
+               "next": { "file": {
+                       "ltr": "images/indicators/arrow-ltr.svg",
+                       "rtl": "images/indicators/arrow-rtl.svg"
+               } },
+               "previous": { "file": {
+                       "ltr": "images/indicators/arrow-rtl.svg",
+                       "rtl": "images/indicators/arrow-ltr.svg"
+               } },
+               "required": { "file": "images/indicators/required.svg" },
+               "search": { "file": {
+                       "ltr": "images/indicators/search-ltr.svg",
+                       "rtl": "images/indicators/search-rtl.svg"
+               } }
+       }
+}
diff --git a/resources/lib/oojs-ui/themes/mediawiki/textures.json b/resources/lib/oojs-ui/themes/mediawiki/textures.json
new file mode 100644 (file)
index 0000000..e90730a
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "prefix": "oo-ui-texture",
+       "intro": "@import '../../../../src/styles/common';",
+       "images": {
+               "pending": { "file": "images/textures/pending.gif" },
+               "transparency": { "file": "images/textures/transparency.svg" }
+       }
+}
index 18dc564..d87183e 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs v1.1.6 optimised for jQuery
+ * OOjs v1.1.7 optimised for jQuery
  * https://www.mediawiki.org/wiki/OOjs
  *
  * Copyright 2011-2015 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-03-19T00:42:55Z
+ * Date: 2015-04-29T01:13:49Z
  */
 ( function ( global ) {
 
@@ -108,12 +108,12 @@ oo.inheritClass = function ( targetFn, originFn ) {
  *
  * The 'constructor' (whether implicit or explicit) is not copied over.
  *
- * This does not create inheritance to the origin. If inheritance is needed
- * use oo.inheritClass instead.
+ * This does not create inheritance to the origin. If you need inheritance,
+ * use OO.inheritClass instead.
  *
  * Beware: This can redefine a prototype property, call before setting your prototypes.
  *
- * Beware: Don't call before oo.inheritClass.
+ * Beware: Don't call before OO.inheritClass.
  *
  *     function Foo() {}
  *     function Context() {}
@@ -826,12 +826,18 @@ oo.mixinClass( oo.Registry, oo.EventEmitter );
  * @param {Mixed} data
  */
 
+/**
+ * @event unregister
+ * @param {string} name
+ * @param {Mixed} data Data removed from registry
+ */
+
 /* Methods */
 
 /**
  * Associate one or more symbolic names with some data.
  *
- * Only the base name will be registered, overriding any existing entry with the same base name.
+ * Any existing entry with the same name will be overridden.
  *
  * @param {string|string[]} name Symbolic name or list of symbolic names
  * @param {Mixed} data Data to associate with symbolic name
@@ -853,9 +859,31 @@ oo.Registry.prototype.register = function ( name, data ) {
 };
 
 /**
- * Get data for a given symbolic name.
+ * Remove one or more symbolic names from the registry
  *
- * Lookups are done using the base name.
+ * @param {string|string[]} name Symbolic name or list of symbolic names
+ * @fires unregister
+ * @throws {Error} Name argument must be a string or array
+ */
+oo.Registry.prototype.unregister = function ( name ) {
+       var i, len, data;
+       if ( typeof name === 'string' ) {
+               data = this.lookup( name );
+               if ( data !== undefined ) {
+                       delete this.registry[name];
+                       this.emit( 'unregister', name, data );
+               }
+       } else if ( Array.isArray( name ) ) {
+               for ( i = 0, len = name.length; i < len; i++ ) {
+                       this.unregister( name[i] );
+               }
+       } else {
+               throw new Error( 'Name must be a string or array, cannot be a ' + typeof name );
+       }
+};
+
+/**
+ * Get data for a given symbolic name.
  *
  * @param {string} name Symbolic name
  * @return {Mixed|undefined} Data associated with symbolic name
@@ -873,10 +901,8 @@ oo.Registry.prototype.lookup = function ( name ) {
  * @constructor
  */
 oo.Factory = function OoFactory() {
+       // Parent constructor
        oo.Factory.parent.call( this );
-
-       // Properties
-       this.entries = [];
 };
 
 /* Inheritance */
@@ -911,11 +937,33 @@ oo.Factory.prototype.register = function ( constructor ) {
        if ( typeof name !== 'string' || name === '' ) {
                throw new Error( 'Name must be a string and must not be empty' );
        }
-       this.entries.push( name );
 
+       // Parent method
        oo.Factory.parent.prototype.register.call( this, name, constructor );
 };
 
+/**
+ * Unregister a constructor from the factory.
+ *
+ * @param {Function} constructor Constructor to unregister
+ * @throws {Error} Name must be a string and must not be empty
+ * @throws {Error} Constructor must be a function
+ */
+oo.Factory.prototype.unregister = function ( constructor ) {
+       var name;
+
+       if ( typeof constructor !== 'function' ) {
+               throw new Error( 'constructor must be a function, cannot be a ' + typeof constructor );
+       }
+       name = constructor.static && constructor.static.name;
+       if ( typeof name !== 'string' || name === '' ) {
+               throw new Error( 'Name must be a string and must not be empty' );
+       }
+
+       // Parent method
+       oo.Factory.parent.prototype.unregister.call( this, name );
+};
+
 /**
  * Create an object based on a name.
  *
diff --git a/resources/src/dom-level2-skip.js b/resources/src/dom-level2-skip.js
new file mode 100644 (file)
index 0000000..484c295
--- /dev/null
@@ -0,0 +1,6 @@
+/*!
+ * Skip function for dom-level2-shim module.
+ *
+ * Tests for window.Node because that's the only thing that this shim is adding.
+ */
+return !!window.Node;
index ff5ff0a..94fdca5 100644 (file)
        /* Public scope */
 
        $.tablesorter = {
-
                        defaultOptions: {
                                cssHeader: 'headerSort',
                                cssAsc: 'headerSortUp',
index 6b33012..56dba70 100644 (file)
@@ -35,7 +35,7 @@
 
                // Add form submission handler
                $( '#editform' ).submit( function () {
-                       allowCloseWindow();
+                       allowCloseWindow.release();
                } );
        } );
 
index f24703a..5074d94 100644 (file)
                        $.extend( postData, {
                                pst: '',
                                preview: '',
-                               prop: 'text|displaytitle|modules|categorieshtml|templates|langlinks|limitreporthtml',
+                               prop: 'text|displaytitle|modules|jsconfigvars|categorieshtml|templates|langlinks|limitreporthtml',
                                disableeditsection: true
                        } );
                        request = api.post( postData );
                        request.done( function ( response ) {
                                var li, newList, $displaytitle, $content, $parent, $list;
+                               if ( response.parse.jsconfigvars ) {
+                                       mw.config.set( response.parse.jsconfigvars );
+                               }
                                if ( response.parse.modules ) {
                                        mw.loader.load( response.parse.modules.concat(
                                                response.parse.modulescripts,
index f01115b..387b020 100644 (file)
@@ -2,7 +2,7 @@
 
 .mw-category {
        .column-count(3);
-       .column-width(25em);
+       .column-width(24em);
        .mw-category-group {
                li {
                        .column-break-inside-avoid;
index 3a19e02..0b57907 100644 (file)
@@ -5,7 +5,6 @@
        // wondering, would it be simpler to make it easy to clone the api object,
        // change error handling, and use that instead?
        var defaultOptions = {
-
                        // Query parameters for API requests
                        parameters: {
                                action: 'query',
@@ -21,6 +20,7 @@
                                dataType: 'json'
                        }
                },
+
                // Keyed by ajax url and symbolic name for the individual request
                promises = {};
 
                                        // Error handler
                                        function ( code ) {
                                                if ( code === 'badtoken' ) {
-                                                       // Clear from cache
-                                                       promises[ api.defaults.ajax.url ][ tokenType + 'Token' ] =
-                                                               params.token = undefined;
-
+                                                       api.badToken( tokenType );
                                                        // Try again, once
+                                                       params.token = undefined;
                                                        return api.getToken( tokenType, params.assert ).then( function ( token ) {
                                                                params.token = token;
                                                                return api.post( params, ajaxOptions );
 
                                d = apiPromise
                                        .then( function ( data ) {
-                                               // If token type is not available for this user,
-                                               // key '...token' is either missing or set to boolean false
                                                if ( data.tokens && data.tokens[type + 'token'] ) {
                                                        return data.tokens[type + 'token'];
                                                }
 
+                                               // If token type is not available for this user,
+                                               // key '...token' is either missing or set to boolean false
                                                return $.Deferred().reject( 'token-missing', data );
                                        }, function () {
                                                // Clear promise. Do not cache errors.
                                                delete promiseGroup[ type + 'Token' ];
-
                                                // Pass on to allow the caller to handle the error
                                                return this;
                                        } )
                        }
 
                        return d;
+               },
+
+               /**
+                * Indicate that the cached token for a certain action of the API is bad.
+                *
+                * Call this if you get a 'badtoken' error when using the token returned by #getToken.
+                * You may also want to use #postWithToken instead, which invalidates bad cached tokens
+                * automatically.
+                *
+                * @param {string} type Token type
+                * @since 1.26
+                */
+               badToken: function ( type ) {
+                       var promiseGroup = promises[ this.defaults.ajax.url ];
+                       if ( promiseGroup ) {
+                               delete promiseGroup[ type + 'Token' ];
+                       }
                }
        };
 
index bab92a1..d4446ab 100644 (file)
@@ -1 +1,445 @@
-{"latin":["Á","á","À","à","Â","â","Ä","ä","Ã","ã","Ǎ","ǎ","Ā","ā","Ă","ă","Ą","ą","Å","å","Ć","ć","Ĉ","ĉ","Ç","ç","Č","č","Ċ","ċ","Đ","đ","Ď","ď","É","é","È","è","Ê","ê","Ë","ë","Ě","ě","Ē","ē","Ĕ","ĕ","Ė","ė","Ę","ę","Ĝ","ĝ","Ģ","ģ","Ğ","ğ","Ġ","ġ","Ĥ","ĥ","Ħ","ħ","Í","í","Ì","ì","Î","î","Ï","ï","Ĩ","ĩ","Ǐ","ǐ","Ī","ī","Ĭ","ĭ","İ","ı","Į","į","Ĵ","ĵ","Ķ","ķ","Ĺ","ĺ","Ļ","ļ","Ľ","ľ","Ł","ł","Ń","ń","Ñ","ñ","Ņ","ņ","Ň","ň","Ó","ó","Ò","ò","Ô","ô","Ö","ö","Õ","õ","Ǒ","ǒ","Ō","ō","Ŏ","ŏ","Ǫ","ǫ","Ő","ő","Ŕ","ŕ","Ŗ","ŗ","Ř","ř","Ś","ś","Ŝ","ŝ","Ş","ş","Š","š","Ș","ș","Ț","ț","Ť","ť","Ú","ú","Ù","ù","Û","û","Ü","ü","Ũ","ũ","Ů","ů","Ǔ","ǔ","Ū","ū","ǖ","ǘ","ǚ","ǜ","Ŭ","ŭ","Ų","ų","Ű","ű","Ŵ","ŵ","Ý","ý","Ŷ","ŷ","Ÿ","ÿ","Ȳ","ȳ","Ź","ź","Ž","ž","Ż","ż","Æ","æ","Ǣ","ǣ","Ø","ø","Œ","œ","ß","Ð","ð","Þ","þ","Ə","ə"],"latinextended":["Ḁ","ḁ","ẚ","Ạ","ạ","Ả","ả","Ấ","ấ","Ầ","ầ","Ẩ","ẩ","Ẫ","ẫ","Ậ","ậ","Ắ","ắ","Ằ","ằ","Ẳ","ẳ","Ẵ","ẵ","Ặ","ặ","Ḃ","ḃ","Ḅ","ḅ","Ḇ","ḇ","Ḉ","ḉ","Ḋ","ḋ","Ḍ","ḍ","Ḏ","ḏ","Ḑ","ḑ","Ḓ","ḓ","Ḕ","ḕ","Ḗ","ḗ","Ḙ","ḙ","Ḛ","ḛ","Ḝ","ḝ","Ẹ","ẹ","Ẻ","ẻ","Ẽ","ẽ","Ế","ế","Ề","ề","Ể","ể","Ễ","ễ","Ệ","ệ","Ḟ","ḟ","Ḡ","ḡ","Ḣ","ḣ","Ḥ","ḥ","Ḧ","ḧ","Ḩ","ḩ","Ḫ","ḫ","ẖ","Ḭ","ḭ","Ḯ","ḯ","Ỉ","ỉ","Ị","ị","Ḱ","ḱ","Ḳ","ḳ","Ḵ","ḵ","Ḷ","ḷ","Ḹ","ḹ","Ḻ","ḻ","Ḽ","ḽ","Ỻ","ỻ","Ḿ","ḿ","Ṁ","ṁ","Ṃ","ṃ","Ṅ","ṅ","Ṇ","ṇ","Ṉ","ṉ","Ṋ","ṋ","Ṍ","ṍ","Ṏ","ṏ","Ṑ","ṑ","Ṓ","ṓ","Ọ","ọ","Ỏ","ỏ","Ố","ố","Ồ","ồ","Ổ","ổ","Ỗ","ỗ","Ộ","ộ","Ớ","ớ","Ờ","ờ","Ở","ở","Ỡ","ỡ","Ợ","ợ","Ǿ","ǿ","Ơ","ơ","Ṕ","ṕ","Ṗ","ṗ","Ṙ","ṙ","Ṛ","ṛ","Ṝ","ṝ","Ṟ","ṟ","Ṡ","ṡ","ẛ","Ṣ","ṣ","Ṥ","ṥ","Ṧ","ṧ","Ṩ","ṩ","ẜ","ẝ","Ṫ","ṫ","Ṭ","ṭ","Ṯ","ṯ","Ṱ","ṱ","ẗ","Ṳ","ṳ","Ṵ","ṵ","Ṷ","ṷ","Ṹ","ṹ","Ṻ","ṻ","Ụ","ụ","Ủ","ủ","Ứ","ứ","Ừ","ừ","Ử","ử","Ữ","ữ","Ự","ự","Ư","ư","Ǖ","Ǘ","Ǚ","Ǜ","Ṽ","ṽ","Ṿ","ṿ","Ỽ","ỽ","Ẁ","ẁ","Ẃ","ẃ","Ẅ","ẅ","Ẇ","ẇ","Ẉ","ẉ","ẘ","Ẋ","ẋ","Ẍ","ẍ","Ẏ","ẏ","ẙ","Ỳ","ỳ","Ỵ","ỵ","Ỷ","ỷ","Ỹ","ỹ","Ỿ","ỿ","Ẑ","ẑ","Ẓ","ẓ","Ẕ","ẕ","Ǽ","ǽ","ẞ","ẟ"],"ipa":["p","t̪","t","ʈ","c","k","q","ʡ","ʔ","b","d̪","d","ɖ","ɟ","ɡ","ɢ","ɓ","ɗ","ʄ","ɠ","ʛ","t͡s","t͡ʃ","t͡ɕ","d͡z","d͡ʒ","d͡ʑ","ɸ","f","θ","s","ʃ","ʅ","ʆ","ʂ","ɕ","ç","ɧ","x","χ","ħ","ʜ","h","β","v","ʍ","ð","z","ʒ","ʓ","ʐ","ʑ","ʝ","ɣ","ʁ","ʕ","ʖ","ʢ","ɦ","ɬ","ɮ","m","m̩","ɱ","ɱ̩","ɱ̍","n̪","n̪̍","n","n̩","ɳ","ɳ̩","ɲ","ɲ̩","ŋ","ŋ̍","ŋ̩","ɴ","ɴ̩","ʙ","ʙ̩","r","r̩","ʀ","ʀ̩","ɾ","ɽ","ɿ","ɺ","l̪","l̪̩","l","l̩","ɫ","ɫ̩","ɭ","ɭ̩","ʎ","ʎ̩","ʟ","ʟ̩","w","ɥ","ʋ","ɹ","ɻ","j","ɰ","ʘ","ǂ","ǀ","!","ǁ","ʰ","ʱ","ʷ","ʸ","ʲ","ʳ","ⁿ","ˡ","ʴ","ʵ","ˢ","ˣ","ˠ","ʶ","ˤ","ˁ","ˀ","ʼ","i","i̯","ĩ","y","y̯","ỹ","ɪ","ɪ̯","ɪ̃","ʏ","ʏ̯","ʏ̃","ɨ","ɨ̯","ɨ̃","ʉ","ʉ̯","ʉ̃","ɯ","ɯ̯","ɯ̃","u","u̯","ũ","ʊ","ʊ̯","ʊ̃","e","e̯","ẽ","ø","ø̯","ø̃","ɘ","ɘ̯","ɘ̃","ɵ","ɵ̯","ɵ̃","ɤ","ɤ̯","ɤ̃","o","o̯","õ","ɛ","ɛ̯","ɛ̃","œ","œ̯","œ̃","ɜ","ɜ̯","ɜ̃","ə","ə̯","ə̃","ɞ","ɞ̯","ɞ̃","ʌ","ʌ̯","ʌ̃","ɔ","ɔ̯","ɔ̃","æ","æ̯","æ̃","ɶ","ɶ̯","ɶ̃","a","a̯","ã","ɐ","ɐ̯","ɐ̃","ɑ","ɑ̯","ɑ̃","ɒ","ɒ̯","ɒ̃","ˈ","ˌ","ː","ˑ","˘",".","‿","|","‖","ɚ","ɝ"],"symbols":["~","|","¡","¿","†","‡","↔","↑","↓","•","¶","#","½","⅓","⅔","¼","¾","⅛","⅜","⅝","⅞","∞","‘","’",{"label":"“”","action":{"type":"encapsulate","options":{"pre":"“","post":"”"}}},{"label":"„“","action":{"type":"encapsulate","options":{"pre":"„","post":"“"}}},{"label":"„”","action":{"type":"encapsulate","options":{"pre":"„","post":"”"}}},{"label":"«»","action":{"type":"encapsulate","options":{"pre":"«","post":"»"}}},"¤","₳","฿","₵","¢","₡","₢","$","₫","₯","€","₠","₣","ƒ","₴","₭","₤","ℳ","₥","₦","№","₧","₰","£","៛","₨","₪","৳","₮","₩","¥","♠","♣","♥","♦","m²","m³",{"label":"–","titleMsg":"special-characters-title-endash","action":{"type":"replace","options":{"peri":"–","selectPeri":false}}},{"label":"—","titleMsg":"special-characters-title-emdash","action":{"type":"replace","options":{"peri":"—","selectPeri":false}}},"…","‘","’","“","”","°","′","″","≈","≠","≤","≥","±",{"label":"−","titleMsg":"special-characters-title-minus","action":{"type":"replace","options":{"peri":"−","selectPeri":false}}},"×","÷","←","→","·","§","‽"],"greek":["Α","Ά","α","ά","Β","β","Γ","γ","Δ","δ","Ε","Έ","ε","έ","Ζ","ζ","Η","Ή","η","ή","Θ","θ","Ι","Ί","ι","ί","Κ","κ","Λ","λ","Μ","μ","Ν","ν","Ξ","ξ","Ο","Ό","ο","ό","Π","π","Ρ","ρ","Σ","σ","ς","Τ","τ","Υ","Ύ","υ","ύ","Φ","φ","Χ","χ","Ψ","ψ","Ω","Ώ","ω","ώ"],"cyrillic":["А","а","Ӑ","ӑ","Ӓ","ӓ","Ә","ә","Ӛ","ӛ","Б","б","В","в","Г","г","Ґ","ґ","Ӷ","ӷ","Ѓ","ѓ","Ӻ","ӻ","Ғ","ғ","Ҕ","ҕ","Д","д","Ԁ","ԁ","Ԃ","ԃ","Ђ","ђ","Е","е","Ѐ","ѐ","Є","є","Ё","ё","Ӗ","ӗ","Ҽ","ҽ","Ҿ","ҿ","Ж","ж","Җ","җ","Ӂ","ӂ","Ӝ","ӝ","З","з","Ҙ","ҙ","Ӟ","ӟ","Ԑ","ԑ","Ӡ","ӡ","Ѕ","ѕ","Ԅ","ԅ","Ԇ","ԇ","И","и","І","і","Ї","ї",["◌Ӏ","Ӏ"],["◌ӏ","ӏ"],"Й","й","Ӣ","ӣ","Ѝ","ѝ","Ҋ","ҋ","Ӥ","ӥ","Ј","ј","К","к","Ќ","ќ","Қ","қ","Ҝ","ҝ","Ҟ","ҟ","Ҡ","ҡ","Ӄ","ӄ","Ԛ","ԛ","Л","л","Љ","љ","Ԉ","ԉ","Ԓ","ԓ","Ӆ","ӆ","М","м","Ӎ","ӎ","Н","н","Њ","њ","Ң","ң","Ҥ","ҥ","Ӈ","ӈ","Ԋ","ԋ","Ӊ","ӊ","О","о","Ҩ","ҩ","Ӧ","ӧ","Ө","ө","Ӫ","ӫ","П","п","Ԥ","ԥ","Ҧ","ҧ","Р","р","Ҏ","ҏ","С","с","Ҫ","ҫ","Т","т","Ћ","ћ","Ԍ","ԍ","Ҭ","ҭ","Ԏ","ԏ","У","у","Ў","ў","Ӯ","ӯ","Ӱ","ӱ","Ӳ","ӳ","Ү","ү","Ұ","ұ","Ф","ф","Х","х","Ҳ","ҳ","Ӽ","ӽ","Ӿ","ӿ","Һ","һ","Ц","ц","Ч","ч","Ҵ","ҵ","Ҷ","ҷ","Ҹ","ҹ","Ӌ","ӌ","Ӵ","ӵ","Џ","џ","Ш","ш","Щ","щ","Ъ","ъ","Ы","ы","Ӹ","ӹ","Ь","ь","Ҍ","ҍ","Э","э","Ӭ","ӭ","Ю","ю","Я","я","Ԝ","ԝ","Ѡ","ѡ","Ѣ","ѣ","Ѥ","ѥ","Ѧ","ѧ","Ѩ","ѩ","Ѫ","ѫ","Ѭ","ѭ","Ѯ","ѯ","Ѱ","ѱ","Ѳ","ѳ","Ѵ","ѵ","Ѷ","ѷ","Ѹ","ѹ","Ѻ","ѻ","Ѽ","ѽ","Ѿ","ѿ","Ҁ","ҁ"],"arabic":["ا","ب","ت","ث","ج","ح","خ","د","ذ","ر","ز","س","ش","ص","ض","ط","ظ","ع","غ","ف","ق","ك","ل","م","ن","ه","و","ي","ء","آ","أ","إ","ٱ","ؤ","ئ","ى","ة","َ","ُ","ِ","ً","ٌ","ٍ","ّ","ْ","ٰ","،","؛","؟","ـ","٠","١","٢","٣","٤","٥","٦","٧","٨","٩","٪","٫","٬","٭",["ZWNJ","‌"],["ZWJ","‍"]],"arabicextended":["ٲ","ٳ","ٴ","ٵ","ݳ","ݴ","ٮ","ٻ","پ","ڀ","ݐ","ݑ","ݒ","ݓ","ݔ","ݕ","ݖ","ٹ","ٺ","ټ","ٽ","ٿ","ځ","ڂ","ڃ","ڄ","څ","چ","ڇ","ڿ","ݗ","ݘ","ݮ","ݯ","ݲ","ݼ","ڈ","ډ","ڊ","ڋ","ڌ","ڍ","ڎ","ڏ","ڐ","ۮ","ݙ","ݚ","ڑ","ڒ","ړ","ڔ","ڕ","ږ","ڗ","ژ","ڙ","ۯ","ݛ","ݫ","ݬ","ݱ","ښ","ڛ","ڜ","ݽ","ۺ","ݜ","ݭ","ݰ","ݾ","ڝ","ڞ","ۻ","ڟ","ڠ","ݝ","ݞ","ݟ","ۼ","ڡ","ڢ","ڣ","ڤ","ڥ","ڦ","ݠ","ݡ","ٯ","ڧ","ڨ","ػ","ؼ","ک","ڪ","ګ","ڬ","ڭ","ڮ","گ","ڰ","ڱ","ڲ","ڳ","ڴ","ݢ","ݣ","ݤ","ݿ","ڵ","ڶ","ڷ","ڸ","ݪ","ݥ","ݦ","ڹ","ں","ڻ","ڼ","ڽ","ݧ","ݨ","ݩ","ھ","ۀ","ہ","ۂ","ۃ","ە","ۿ","ٶ","ٷ","ۄ","ۅ","ۆ","ۇ","ۈ","ۉ","ۊ","ۋ","ۏ","ݸ","ݹ","ؠ","ؽ","ؾ","ؿ","ٸ","ی","ۍ","ێ","ې","ۑ","ے","ۓ","ݵ","ݶ","ݷ","ݺ","ݻ","ٖ","ٗ","٘","ٙ","ٚ","ٛ","ٜ","ٝ","ٞ","ٟ","۔","۽","۾","۰","۱","۲","۳","۴","۵","۶","۷","۸","۹"],"hebrew":["א","ב","ג","ד","ה","ו","ז","ח","ט","י","כ","ך","ל","מ","ם","נ","ן","ס","ע","פ","ף","צ","ץ","ק","ר","ש","ת","װ","ױ","ײ","׳","״","־","–",{"label":"„”","action":{"type":"encapsulate","options":{"pre":"„","post":"”"}}},{"label":"‚’","action":{"type":"encapsulate","options":{"pre":"‚","post":"’"}}},["◌ְ","ְ"],["◌ֱ","ֱ"],["◌ֲ","ֲ"],["◌ֳ","ֳ"],["◌ִ","ִ"],["◌ֵ","ֵ"],["◌ֶ","ֶ"],["◌ַ","ַ"],["◌ָ","ָ"],["◌ֹ","ֹ"],["◌ֻ","ֻ"],["◌ּ","ּ"],["◌ׁ","ׁ"],["◌ׂ","ׂ"],["◌ׇ","ׇ"],["◌֑","֑"],["◌֒","֒"],["◌֓","֓"],["◌֔","֔"],["◌֕","֕"],["◌֖","֖"],["◌֗","֗"],["◌֘","֘"],["◌֙","֙"],["◌֚","֚"],["◌֛","֛"],["◌֜","֜"],["◌֝","֝"],["◌֞","֞"],["◌֟","֟"],["◌֠","֠"],["◌֡","֡"],["◌֢","֢"],["◌֣","֣"],["◌֤","֤"],["◌֥","֥"],["◌֦","֦"],["◌֧","֧"],["◌֨","֨"],["◌֩","֩"],["◌֪","֪"],["◌֫","֫"],["◌֬","֬"],["◌֭","֭"],["◌֮","֮"],["◌֯","֯"],["◌ֿ","ֿ"],["◌׀","׀"],["◌׃","׃"]],"bangla":["অ","আ","ই","ঈ","উ","ঊ","ঋ","এ","ঐ","ও","ঔ","া","ি","ী","ু","ূ","ৃ","ে","ৈ","ো","ৌ","ক","খ","গ","ঘ","ঙ","চ","ছ","জ","ঝ","ঞ","ট","ঠ","ড","ঢ","ণ","ত","থ","দ","ধ","ন","প","ফ","ব","ভ","ম","য","র","ল","শ","ষ","স","হ","ড়","ঢ়","য়","ৎ","ং","ঃ","ঁ","্","১","২","৩","৪","৫","৬","৭","৮","৯","০"],"tamil":["௦","௧","௨","௩","௪","௫","௬","௭","௮","௯","௰","௱","௲","௳","௴","௵","௶","௷","௸","௹","௺","ௐ"],"telugu":["ఁ","ం","ః","అ","ఆ","ఇ","ఈ","ఉ","ఊ","ఋ","ౠ","ఌ","ౡ","ఎ","ఏ","ఐ","ఒ","ఓ","ఔ","క","ఖ","గ","ఘ","ఙ","చ","ఛ","జ","ఝ","ఞ","ట","ఠ","డ","ఢ","ణ","త","థ","ద","ధ","న","ప","ఫ","బ","భ","మ","య","ర","ఱ","ల","ళ","వ","శ","ష","స","హ","ా","ి","ీ","ు","ూ","ృ","ౄ","ె","ే","ై","ొ","ో","ౌ","్","ౢ","ౣ","ౘ","ౙ","౦","౧","౨","౩","౪","౫","౬","౭","౮","౯","ఽ","౸","౹","౺","౻","౼","౽","౾","౿"],"sinhala":["අ","ආ","ඇ","ඈ","ඉ","ඊ","උ","ඌ","ඍ","ඎ","ඏ","ඐ","එ","ඒ","ඓ","ඔ","ඕ","ඖ","ක","ඛ","ග","ඝ","ඞ","ඟ","ච","ඡ","ජ","ඣ","ඤ","ඥ","ඦ","ට","ඨ","ඩ","ඪ","ණ","ඬ","ත","ථ","ද","ධ","න","ඳ","ප","ඵ","බ","භ","ම","ඹ","ය","ර","ල","ව","ශ","ෂ","ස","හ","ළ","ෆ",["◌ා","ා"],["◌ැ","ැ"],["◌ෑ","ෑ"],["◌ි","ි"],["◌ී","ී"],["◌ු","ු"],["◌ූ","ූ"],["◌ෘ","ෘ"],["◌ෲ","ෲ"],["◌ෟ","ෟ"],["◌ෳ","ෳ"],["◌ෙ","ෙ"],["◌ේ","ේ"],["◌ො","ො"],["◌ෝ","ෝ"],["◌ෞ","ෞ"],["◌්","්"]],"devanagari":["ऀ","ँ","ं","ः","ऄ","अ","आ","इ","ई","उ","ऊ","ऋ","ऌ","ऍ","ऎ","ए","ऐ","ऑ","ऒ","ओ","औ","क","ख","ग","घ","ङ","च","छ","ज","झ","ञ","ट","ठ","ड","ढ","ण","त","थ","द","ध","न","ऩ","प","फ","ब","भ","म","य","र","ऱ","ल","ळ","ऴ","व","श","ष","स","ह","ऺ","ऻ","़","ऽ","ा","ि","ी","ु","ू","ृ","ॄ","ॅ","ॆ","े","ै","ॉ","ॊ","ो","ौ","्","ॎ","ॏ","ॐ","॑","॒","॓","॔","ॕ","ॖ","ॗ","क़","ख़","ग़","ज़","ड़","ढ़","फ़","य़","ॠ","ॡ","ॢ","ॣ","।","॥","०","१","२","३","४","५","६","७","८","९","॰","ॱ","ॲ","ॳ","ॴ","ॵ","ॶ","ॷ","ॹ","ॺ","ॻ","ॼ","ॽ","ॾ","ॿ"],"gujarati":["ૐ","ઁ","ં","ઃ","અ","આ","ઇ","ઈ","ઉ","ઊ","એ","ઐ","ઓ","ઔ","અં","ઋ","ઍ","ઑ","ઌ","ૠ","ૡ","ક","ખ","ગ","ઘ","ઙ","ચ","છ","જ","ઝ","ઞ","ટ","ઠ","ડ","ઢ","ણ","ત","થ","દ","ધ","ન","પ","ફ","બ","ભ","મ","ય","ર","લ","ળ","વ","શ","ષ","સ","હ","ક્ષ","જ્ઞ","ઽ","ા","િ","ી","ી","ુ","ૂ","ૃ","ૄ","ૅ","ે","ૈ","ૉ","ો","ૌ","ૢ","ૣ","્","૦","૧","૨","૩","૪","૫","૬","૭","૮","૯","૱"],"thai":["ก","ข","ฃ","ค","ฅ","ฆ","ง","จ","ฉ","ช","ซ","ฌ","ญ","ฎ","ฏ","ฐ","ฑ","ฒ","ณ","ด","ต","ถ","ท","ธ","น","บ","ป","ผ","ฝ","พ","ฟ","ภ","ม","ย","ร","ฤ","ล","ฦ","ว","ศ","ษ","ส","ห","ฬ","อ","ฮ","ะ","ั","า","ๅ","ำ","ิ","ี","ึ","ื","ุ","ู","เ","แ","โ","ใ","ไ","็","่","้","๊","๋","์","ํ","ฺ","๎","๐","๑","๒","๓","๔","๕","๖","๗","๘","๙","฿","ๆ","ฯ","๚","๏","๛"],"lao":["ກ","ຂ","ຄ","ງ","ຈ","ສ","ຊ","ຍ","ດ","ຕ","ຖ","ທ","ນ","ບ","ປ","ຜ","ຝ","ພ","ຟ","ມ","ຢ","ລ","ວ","ຫ","ອ","ຮ","ຣ","ໜ","ໝ","ຼ","ຽ","ະ","ັ","າ","ຳ","ິ","ີ","ຶ","ື","ຸ","ູ","ົ","ເ","ແ","ໂ","ໃ","ໄ","່","້","໊","໋","໌","ໍ","໐","໑","໒","໓","໔","໕","໖","໗","໘","໙","₭","ໆ","ຯ"],"khmer":["ក","ខ","គ","ឃ","ង","ច","ឆ","ជ","ឈ","ញ","ដ","ឋ","ឌ","ឍ","ណ","ត","ថ","ទ","ធ","ន","ប","ផ","ព","ភ","ម","យ","រ","ល","វ","ស","ហ","ឡ","អ","ឣ","ឤ","ឥ","ឦ","ឧ","ឨ","ឩ","ឪ","ឫ","ឬ","ឭ","ឮ","ឯ","ឰ","ឱ","ឲ","ឳ","្","឴","឵","ា","ិ","ី","ឹ","ឺ","ុ","ូ","ួ","ើ","ឿ","ៀ","េ","ែ","ៃ","ោ","ៅ","ំ","ះ","ៈ","៉","៊","់","៌","៍","៎","៏","័","៑","៓","៝","ៜ","០","១","២","៣","៤","៥","៦","៧","៨","៩","៛","។","៕","៖","ៗ","៘","៙","៚","៰","៱","៲","៳","៴","៵","៶","៷","៸","៹","᧠","᧡","᧢","᧣","᧤","᧥","᧦","᧧","᧨","᧩","᧪","᧫","᧬","᧭","᧮","᧯","᧰","᧱","᧲","᧳","᧴","᧵","᧶","᧷","᧸","᧹","᧺","᧻","᧼","᧽","᧾","᧿"]}
\ No newline at end of file
+{
+       "latin": [
+               "Á", "á", "À", "à", "Â", "â", "Ä", "ä", "Ã", "ã", "Ǎ", "ǎ", "Ā", "ā", "Ă", "ă", "Ą", "ą", "Å", "å", "Ć", "ć", "Ĉ", "ĉ", "Ç", "ç", "Č", "č", "Ċ", "ċ", "Đ", "đ", "Ď", "ď", "É", "é", "È", "è", "Ê", "ê", "Ë", "ë", "Ě", "ě", "Ē", "ē", "Ĕ", "ĕ", "Ė", "ė", "Ę", "ę", "Ĝ", "ĝ", "Ģ", "ģ", "Ğ", "ğ", "Ġ", "ġ", "Ĥ", "ĥ", "Ħ", "ħ", "Í", "í", "Ì", "ì", "Î", "î", "Ï", "ï", "Ĩ", "ĩ", "Ǐ", "ǐ", "Ī", "ī", "Ĭ", "ĭ", "İ", "ı", "Į", "į", "Ĵ", "ĵ", "Ķ", "ķ", "Ĺ", "ĺ", "Ļ", "ļ", "Ľ", "ľ", "Ł", "ł", "Ń", "ń", "Ñ", "ñ", "Ņ", "ņ", "Ň", "ň", "Ó", "ó", "Ò", "ò", "Ô", "ô", "Ö", "ö", "Õ", "õ", "Ǒ", "ǒ", "Ō", "ō", "Ŏ", "ŏ", "Ǫ", "ǫ", "Ő", "ő", "Ŕ", "ŕ", "Ŗ", "ŗ", "Ř", "ř", "Ś", "ś", "Ŝ", "ŝ", "Ş", "ş", "Š", "š", "Ș", "ș", "Ț", "ț", "Ť", "ť", "Ú", "ú", "Ù", "ù", "Û", "û", "Ü", "ü", "Ũ", "ũ", "Ů", "ů", "Ǔ", "ǔ", "Ū", "ū", "ǖ", "ǘ", "ǚ", "ǜ", "Ŭ", "ŭ", "Ų", "ų", "Ű", "ű", "Ŵ", "ŵ", "Ý", "ý", "Ŷ", "ŷ", "Ÿ", "ÿ", "Ȳ", "ȳ", "Ź", "ź", "Ž", "ž", "Ż", "ż", "Æ", "æ", "Ǣ", "ǣ", "Ø", "ø", "Œ", "œ", "ß", "Ð", "ð", "Þ", "þ", "Ə", "ə"
+       ],
+       "latinextended": [
+               "Ḁ", "ḁ", "ẚ", "Ạ", "ạ", "Ả", "ả", "Ấ", "ấ", "Ầ", "ầ", "Ẩ", "ẩ", "Ẫ", "ẫ", "Ậ", "ậ", "Ắ", "ắ", "Ằ", "ằ", "Ẳ", "ẳ", "Ẵ", "ẵ", "Ặ", "ặ", "Ḃ", "ḃ", "Ḅ", "ḅ", "Ḇ", "ḇ", "Ḉ", "ḉ", "Ḋ", "ḋ", "Ḍ", "ḍ", "Ḏ", "ḏ", "Ḑ", "ḑ", "Ḓ", "ḓ", "Ḕ", "ḕ", "Ḗ", "ḗ", "Ḙ", "ḙ", "Ḛ", "ḛ", "Ḝ", "ḝ", "Ẹ", "ẹ", "Ẻ", "ẻ", "Ẽ", "ẽ", "Ế", "ế", "Ề", "ề", "Ể", "ể", "Ễ", "ễ", "Ệ", "ệ", "Ḟ", "ḟ", "Ḡ", "ḡ", "Ḣ", "ḣ", "Ḥ", "ḥ", "Ḧ", "ḧ", "Ḩ", "ḩ", "Ḫ", "ḫ", "ẖ", "Ḭ", "ḭ", "Ḯ", "ḯ", "Ỉ", "ỉ", "Ị", "ị", "Ḱ", "ḱ", "Ḳ", "ḳ", "Ḵ", "ḵ", "Ḷ", "ḷ", "Ḹ", "ḹ", "Ḻ", "ḻ", "Ḽ", "ḽ", "Ỻ", "ỻ", "Ḿ", "ḿ", "Ṁ", "ṁ", "Ṃ", "ṃ", "Ṅ", "ṅ", "Ṇ", "ṇ", "Ṉ", "ṉ", "Ṋ", "ṋ", "Ṍ", "ṍ", "Ṏ", "ṏ", "Ṑ", "ṑ", "Ṓ", "ṓ", "Ọ", "ọ", "Ỏ", "ỏ", "Ố", "ố", "Ồ", "ồ", "Ổ", "ổ", "Ỗ", "ỗ", "Ộ", "ộ", "Ớ", "ớ", "Ờ", "ờ", "Ở", "ở", "Ỡ", "ỡ", "Ợ", "ợ", "Ǿ", "ǿ", "Ơ", "ơ", "Ṕ", "ṕ", "Ṗ", "ṗ", "Ṙ", "ṙ", "Ṛ", "ṛ", "Ṝ", "ṝ", "Ṟ", "ṟ", "Ṡ", "ṡ", "ẛ", "Ṣ", "ṣ", "Ṥ", "ṥ", "Ṧ", "ṧ", "Ṩ", "ṩ", "ẜ", "ẝ", "Ṫ", "ṫ", "Ṭ", "ṭ", "Ṯ", "ṯ", "Ṱ", "ṱ", "ẗ", "Ṳ", "ṳ", "Ṵ", "ṵ", "Ṷ", "ṷ", "Ṹ", "ṹ", "Ṻ", "ṻ", "Ụ", "ụ", "Ủ", "ủ", "Ứ", "ứ", "Ừ", "ừ", "Ử", "ử", "Ữ", "ữ", "Ự", "ự", "Ư", "ư", "Ǖ", "Ǘ", "Ǚ", "Ǜ", "Ṽ", "ṽ", "Ṿ", "ṿ", "Ỽ", "ỽ", "Ẁ", "ẁ", "Ẃ", "ẃ", "Ẅ", "ẅ", "Ẇ", "ẇ", "Ẉ", "ẉ", "ẘ", "Ẋ", "ẋ", "Ẍ", "ẍ", "Ẏ", "ẏ", "ẙ", "Ỳ", "ỳ", "Ỵ", "ỵ", "Ỷ", "ỷ", "Ỹ", "ỹ", "Ỿ", "ỿ", "Ẑ", "ẑ", "Ẓ", "ẓ", "Ẕ", "ẕ", "Ǽ", "ǽ", "ẞ", "ẟ"
+       ],
+       "ipa": [
+               "p", "t̪", "t", "ʈ", "c", "k", "q", "ʡ", "ʔ", "b", "d̪", "d", "ɖ", "ɟ", "ɡ", "ɢ", "ɓ", "ɗ", "ʄ", "ɠ", "ʛ", "t͡s", "t͡ʃ", "t͡ɕ", "d͡z", "d͡ʒ", "d͡ʑ", "ɸ", "f", "θ", "s", "ʃ", "ʅ", "ʆ", "ʂ", "ɕ", "ç", "ɧ", "x", "χ", "ħ", "ʜ", "h", "β", "v", "ʍ", "ð", "z", "ʒ", "ʓ", "ʐ", "ʑ", "ʝ", "ɣ", "ʁ", "ʕ", "ʖ", "ʢ", "ɦ", "ɬ", "ɮ", "m", "m̩", "ɱ", "ɱ̩", "ɱ̍", "n̪", "n̪̍", "n", "n̩", "ɳ", "ɳ̩", "ɲ", "ɲ̩", "ŋ", "ŋ̍", "ŋ̩", "ɴ", "ɴ̩", "ʙ", "ʙ̩", "r", "r̩", "ʀ", "ʀ̩", "ɾ", "ɽ", "ɿ", "ɺ", "l̪", "l̪̩", "l", "l̩", "ɫ", "ɫ̩", "ɭ", "ɭ̩", "ʎ", "ʎ̩", "ʟ", "ʟ̩", "w", "ɥ", "ʋ", "ɹ", "ɻ", "j", "ɰ", "ʘ", "ǂ", "ǀ", "!", "ǁ", "ʰ", "ʱ", "ʷ", "ʸ", "ʲ", "ʳ", "ⁿ", "ˡ", "ʴ", "ʵ", "ˢ", "ˣ", "ˠ", "ʶ", "ˤ", "ˁ", "ˀ", "ʼ", "i", "i̯", "ĩ", "y", "y̯", "ỹ", "ɪ", "ɪ̯", "ɪ̃", "ʏ", "ʏ̯", "ʏ̃", "ɨ", "ɨ̯", "ɨ̃", "ʉ", "ʉ̯", "ʉ̃", "ɯ", "ɯ̯", "ɯ̃", "u", "u̯", "ũ", "ʊ", "ʊ̯", "ʊ̃", "e", "e̯", "ẽ", "ø", "ø̯", "ø̃", "ɘ", "ɘ̯", "ɘ̃", "ɵ", "ɵ̯", "ɵ̃", "ɤ", "ɤ̯", "ɤ̃", "o", "o̯", "õ", "ɛ", "ɛ̯", "ɛ̃", "œ", "œ̯", "œ̃", "ɜ", "ɜ̯", "ɜ̃", "ə", "ə̯", "ə̃", "ɞ", "ɞ̯", "ɞ̃", "ʌ", "ʌ̯", "ʌ̃", "ɔ", "ɔ̯", "ɔ̃", "æ", "æ̯", "æ̃", "ɶ", "ɶ̯", "ɶ̃", "a", "a̯", "ã", "ɐ", "ɐ̯", "ɐ̃", "ɑ", "ɑ̯", "ɑ̃", "ɒ", "ɒ̯", "ɒ̃", "ˈ", "ˌ", "ː", "ˑ", "˘", ".", "‿", "|", "‖", "ɚ", "ɝ"
+       ],
+       "symbols": [
+               "~", "|", "¡", "¿", "†", "‡", "↔", "↑", "↓", "•", "¶", "#", "½", "⅓", "⅔", "¼", "¾", "⅛", "⅜", "⅝", "⅞", "∞", "‘", "’",
+               {
+                       "label": "“”",
+                       "action": {
+                               "type": "encapsulate",
+                               "options": {
+                                       "pre": "“",
+                                       "post": "”"
+                               }
+                       }
+               },
+               {
+                       "label": "„“",
+                       "action": {
+                               "type": "encapsulate",
+                               "options": {
+                                       "pre": "„",
+                                       "post": "“"
+                               }
+                       }
+               },
+               {
+                       "label": "„”",
+                       "action": {
+                               "type": "encapsulate",
+                               "options": {
+                                       "pre": "„",
+                                       "post": "”"
+                               }
+                       }
+               },
+               {
+                       "label": "«»",
+                       "action": {
+                               "type": "encapsulate",
+                               "options": {
+                                       "pre": "«",
+                                       "post": "»"
+                               }
+                       }
+               },
+               "¤", "₳", "฿", "₵", "¢", "₡", "₢", "$", "₫", "₯", "€", "₠", "₣", "ƒ", "₴", "₭", "₤", "ℳ", "₥", "₦", "№", "₧", "₰", "£", "៛", "₨", "₪", "৳", "₮", "₩", "¥", "♠", "♣", "♥", "♦", "m²", "m³",
+               {
+                       "label": "–",
+                       "titleMsg": "special-characters-title-endash",
+                       "action": {
+                               "type": "replace",
+                               "options": {
+                                       "peri": "–",
+                                       "selectPeri": false
+                               }
+                       }
+               },
+               {
+                       "label": "—",
+                       "titleMsg": "special-characters-title-emdash",
+                       "action": {
+                               "type": "replace",
+                               "options": {
+                                       "peri": "—",
+                                       "selectPeri": false
+                               }
+                       }
+               },
+               "…", "‘", "’", "“", "”", "°", "′", "″", "≈", "≠", "≤", "≥", "±",
+               {
+                       "label": "−",
+                       "titleMsg": "special-characters-title-minus",
+                       "action": {
+                               "type": "replace",
+                               "options": {
+                                       "peri": "−",
+                                       "selectPeri": false
+                               }
+                       }
+               },
+               "×", "÷", "←", "→", "·", "§", "‽"
+       ],
+       "greek": [
+               "Α", "Ά", "α", "ά", "Β", "β", "Γ", "γ", "Δ", "δ", "Ε", "Έ", "ε", "έ", "Ζ", "ζ", "Η", "Ή", "η", "ή", "Θ", "θ", "Ι", "Ί", "ι", "ί", "Κ", "κ", "Λ", "λ", "Μ", "μ", "Ν", "ν", "Ξ", "ξ", "Ο", "Ό", "ο", "ό", "Π", "π", "Ρ", "ρ", "Σ", "σ", "ς", "Τ", "τ", "Υ", "Ύ", "υ", "ύ", "Φ", "φ", "Χ", "χ", "Ψ", "ψ", "Ω", "Ώ", "ω", "ώ"
+       ],
+       "cyrillic": [
+               "А", "а", "Ӑ", "ӑ", "Ӓ", "ӓ", "Ә", "ә", "Ӛ", "ӛ", "Б", "б", "В", "в", "Г", "г", "Ґ", "ґ", "Ӷ", "ӷ", "Ѓ", "ѓ", "Ӻ", "ӻ", "Ғ", "ғ", "Ҕ", "ҕ", "Д", "д", "Ԁ", "ԁ", "Ԃ", "ԃ", "Ђ", "ђ", "Е", "е", "Ѐ", "ѐ", "Є", "є", "Ё", "ё", "Ӗ", "ӗ", "Ҽ", "ҽ", "Ҿ", "ҿ", "Ж", "ж", "Җ", "җ", "Ӂ", "ӂ", "Ӝ", "ӝ", "З", "з", "Ҙ", "ҙ", "Ӟ", "ӟ", "Ԑ", "ԑ", "Ӡ", "ӡ", "Ѕ", "ѕ", "Ԅ", "ԅ", "Ԇ", "ԇ", "И", "и", "І", "і", "Ї", "ї",
+               [
+                       "◌Ӏ",
+                       "Ӏ"
+               ],
+               [
+                       "◌ӏ",
+                       "ӏ"
+               ],
+               "Й", "й", "Ӣ", "ӣ", "Ѝ", "ѝ", "Ҋ", "ҋ", "Ӥ", "ӥ", "Ј", "ј", "К", "к", "Ќ", "ќ", "Қ", "қ", "Ҝ", "ҝ", "Ҟ", "ҟ", "Ҡ", "ҡ", "Ӄ", "ӄ", "Ԛ", "ԛ", "Л", "л", "Љ", "љ", "Ԉ", "ԉ", "Ԓ", "ԓ", "Ӆ", "ӆ", "М", "м", "Ӎ", "ӎ", "Н", "н", "Њ", "њ", "Ң", "ң", "Ҥ", "ҥ", "Ӈ", "ӈ", "Ԋ", "ԋ", "Ӊ", "ӊ", "О", "о", "Ҩ", "ҩ", "Ӧ", "ӧ", "Ө", "ө", "Ӫ", "ӫ", "П", "п", "Ԥ", "ԥ", "Ҧ", "ҧ", "Р", "р", "Ҏ", "ҏ", "С", "с", "Ҫ", "ҫ", "Т", "т", "Ћ", "ћ", "Ԍ", "ԍ", "Ҭ", "ҭ", "Ԏ", "ԏ", "У", "у", "Ў", "ў", "Ӯ", "ӯ", "Ӱ", "ӱ", "Ӳ", "ӳ", "Ү", "ү", "Ұ", "ұ", "Ф", "ф", "Х", "х", "Ҳ", "ҳ", "Ӽ", "ӽ", "Ӿ", "ӿ", "Һ", "һ", "Ц", "ц", "Ч", "ч", "Ҵ", "ҵ", "Ҷ", "ҷ", "Ҹ", "ҹ", "Ӌ", "ӌ", "Ӵ", "ӵ", "Џ", "џ", "Ш", "ш", "Щ", "щ", "Ъ", "ъ", "Ы", "ы", "Ӹ", "ӹ", "Ь", "ь", "Ҍ", "ҍ", "Э", "э", "Ӭ", "ӭ", "Ю", "ю", "Я", "я", "Ԝ", "ԝ", "Ѡ", "ѡ", "Ѣ", "ѣ", "Ѥ", "ѥ", "Ѧ", "ѧ", "Ѩ", "ѩ", "Ѫ", "ѫ", "Ѭ", "ѭ", "Ѯ", "ѯ", "Ѱ", "ѱ", "Ѳ", "ѳ", "Ѵ", "ѵ", "Ѷ", "ѷ", "Ѹ", "ѹ", "Ѻ", "ѻ", "Ѽ", "ѽ", "Ѿ", "ѿ", "Ҁ", "ҁ"
+       ],
+       "arabic": [
+               "ا", "ب", "ت", "ث", "ج", "ح", "خ", "د", "ذ", "ر", "ز", "س", "ش", "ص", "ض", "ط", "ظ", "ع", "غ", "ف", "ق", "ك", "ل", "م", "ن", "ه", "و", "ي", "ء", "آ", "أ", "إ", "ٱ", "ؤ", "ئ", "ى", "ة", "َ", "ُ", "ِ", "ً", "ٌ", "ٍ", "ّ", "ْ", "ٰ", "،", "؛", "؟", "ـ", "٠", "١", "٢", "٣", "٤", "٥", "٦", "٧", "٨", "٩", "٪", "٫", "٬", "٭",
+               [
+                       "zwnj",
+                       "‌"
+               ],
+               [
+                       "zwj",
+                       "‍"
+               ]
+       ],
+       "arabicextended": [
+               "ٲ", "ٳ", "ٴ", "ٵ", "ݳ", "ݴ", "ٮ", "ٻ", "پ", "ڀ", "ݐ", "ݑ", "ݒ", "ݓ", "ݔ", "ݕ", "ݖ", "ٹ", "ٺ", "ټ", "ٽ", "ٿ", "ځ", "ڂ", "ڃ", "ڄ", "څ", "چ", "ڇ", "ڿ", "ݗ", "ݘ", "ݮ", "ݯ", "ݲ", "ݼ", "ڈ", "ډ", "ڊ", "ڋ", "ڌ", "ڍ", "ڎ", "ڏ", "ڐ", "ۮ", "ݙ", "ݚ", "ڑ", "ڒ", "ړ", "ڔ", "ڕ", "ږ", "ڗ", "ژ", "ڙ", "ۯ", "ݛ", "ݫ", "ݬ", "ݱ", "ښ", "ڛ", "ڜ", "ݽ", "ۺ", "ݜ", "ݭ", "ݰ", "ݾ", "ڝ", "ڞ", "ۻ", "ڟ", "ڠ", "ݝ", "ݞ", "ݟ", "ۼ", "ڡ", "ڢ", "ڣ", "ڤ", "ڥ", "ڦ", "ݠ", "ݡ", "ٯ", "ڧ", "ڨ", "ػ", "ؼ", "ک", "ڪ", "ګ", "ڬ", "ڭ", "ڮ", "گ", "ڰ", "ڱ", "ڲ", "ڳ", "ڴ", "ݢ", "ݣ", "ݤ", "ݿ", "ڵ", "ڶ", "ڷ", "ڸ", "ݪ", "ݥ", "ݦ", "ڹ", "ں", "ڻ", "ڼ", "ڽ", "ݧ", "ݨ", "ݩ", "ھ", "ۀ", "ہ", "ۂ", "ۃ", "ە", "ۿ", "ٶ", "ٷ", "ۄ", "ۅ", "ۆ", "ۇ", "ۈ", "ۉ", "ۊ", "ۋ", "ۏ", "ݸ", "ݹ", "ؠ", "ؽ", "ؾ", "ؿ", "ٸ", "ی", "ۍ", "ێ", "ې", "ۑ", "ے", "ۓ", "ݵ", "ݶ", "ݷ", "ݺ", "ݻ", "ٖ", "ٗ", "٘", "ٙ", "ٚ", "ٛ", "ٜ", "ٝ", "ٞ", "ٟ", "۔", "۽", "۾", "۰", "۱", "۲", "۳", "۴", "۵", "۶", "۷", "۸", "۹"
+       ],
+       "hebrew": [
+               "א", "ב", "ג", "ד", "ה", "ו", "ז", "ח", "ט", "י", "כ", "ך", "ל", "מ", "ם", "נ", "ן", "ס", "ע", "פ", "ף", "צ", "ץ", "ק", "ר", "ש", "ת", "װ", "ױ", "ײ", "׳", "״", "־", "–",
+               {
+                       "label": "„”",
+                       "action": {
+                               "type": "encapsulate",
+                               "options": {
+                                       "pre": "„",
+                                       "post": "”"
+                               }
+                       }
+               },
+               {
+                       "label": "‚’",
+                       "action": {
+                               "type": "encapsulate",
+                               "options": {
+                                       "pre": "‚",
+                                       "post": "’"
+                               }
+                       }
+               },
+               [
+                       "◌ְ",
+                       "ְ"
+               ],
+               [
+                       "◌ֱ",
+                       "ֱ"
+               ],
+               [
+                       "◌ֲ",
+                       "ֲ"
+               ],
+               [
+                       "◌ֳ",
+                       "ֳ"
+               ],
+               [
+                       "◌ִ",
+                       "ִ"
+               ],
+               [
+                       "◌ֵ",
+                       "ֵ"
+               ],
+               [
+                       "◌ֶ",
+                       "ֶ"
+               ],
+               [
+                       "◌ַ",
+                       "ַ"
+               ],
+               [
+                       "◌ָ",
+                       "ָ"
+               ],
+               [
+                       "◌ֹ",
+                       "ֹ"
+               ],
+               [
+                       "◌ֻ",
+                       "ֻ"
+               ],
+               [
+                       "◌ּ",
+                       "ּ"
+               ],
+               [
+                       "◌ׁ",
+                       "ׁ"
+               ],
+               [
+                       "◌ׂ",
+                       "ׂ"
+               ],
+               [
+                       "◌ׇ",
+                       "ׇ"
+               ],
+               [
+                       "◌֑",
+                       "֑"
+               ],
+               [
+                       "◌֒",
+                       "֒"
+               ],
+               [
+                       "◌֓",
+                       "֓"
+               ],
+               [
+                       "◌֔",
+                       "֔"
+               ],
+               [
+                       "◌֕",
+                       "֕"
+               ],
+               [
+                       "◌֖",
+                       "֖"
+               ],
+               [
+                       "◌֗",
+                       "֗"
+               ],
+               [
+                       "◌֘",
+                       "֘"
+               ],
+               [
+                       "◌֙",
+                       "֙"
+               ],
+               [
+                       "◌֚",
+                       "֚"
+               ],
+               [
+                       "◌֛",
+                       "֛"
+               ],
+               [
+                       "◌֜",
+                       "֜"
+               ],
+               [
+                       "◌֝",
+                       "֝"
+               ],
+               [
+                       "◌֞",
+                       "֞"
+               ],
+               [
+                       "◌֟",
+                       "֟"
+               ],
+               [
+                       "◌֠",
+                       "֠"
+               ],
+               [
+                       "◌֡",
+                       "֡"
+               ],
+               [
+                       "◌֢",
+                       "֢"
+               ],
+               [
+                       "◌֣",
+                       "֣"
+               ],
+               [
+                       "◌֤",
+                       "֤"
+               ],
+               [
+                       "◌֥",
+                       "֥"
+               ],
+               [
+                       "◌֦",
+                       "֦"
+               ],
+               [
+                       "◌֧",
+                       "֧"
+               ],
+               [
+                       "◌֨",
+                       "֨"
+               ],
+               [
+                       "◌֩",
+                       "֩"
+               ],
+               [
+                       "◌֪",
+                       "֪"
+               ],
+               [
+                       "◌֫",
+                       "֫"
+               ],
+               [
+                       "◌֬",
+                       "֬"
+               ],
+               [
+                       "◌֭",
+                       "֭"
+               ],
+               [
+                       "◌֮",
+                       "֮"
+               ],
+               [
+                       "◌֯",
+                       "֯"
+               ],
+               [
+                       "◌ֿ",
+                       "ֿ"
+               ],
+               [
+                       "◌׀",
+                       "׀"
+               ],
+               [
+                       "◌׃",
+                       "׃"
+               ]
+       ],
+       "bangla": [
+               "ঀ", "অ", "আ", "ই", "ঈ", "উ", "ঊ", "ঋ", "ঌ", "এ", "ঐ", "ও", "ঔ", "া", "ি", "ী", "ু", "ূ", "ৃ", "ে", "ৈ", "ো", "ৌ", "্য", "্র", "ক", "খ", "গ", "ঘ", "ঙ", "চ", "ছ", "জ", "ঝ", "ঞ", "ট", "ঠ", "ড", "ঢ", "ণ", "ত", "থ", "দ", "ধ", "ন", "প", "ফ", "ব", "ভ", "ম", "য", "র", "ল", "শ", "ষ", "স", "হ", "ড়", "ঢ়", "য়", "ৎ", "ং", "ঃ", "ঁ", "্", "৷", "॥", "১", "২", "৩", "৪", "৫", "৬", "৭", "৮", "৯", "০", "ঽ", "ৗ", "়", "ৰ", "ৱ", "৲", "৻", "৳", "৴", "৵", "৶", "৷", "৸", "৹", "৺", "ৠ", "ৡ", "ৄ", "ৢ", "ৣ", "‘", "’", "“", "”",
+               [
+                       "zws",
+                       "​"
+               ],
+               [
+                       "zwnj",
+                       "‌"
+               ],
+               [
+                       "zwj",
+                       "‍"
+               ]
+       ],
+       "tamil": [
+               "௦", "௧", "௨", "௩", "௪", "௫", "௬", "௭", "௮", "௯", "௰", "௱", "௲", "௳", "௴", "௵", "௶", "௷", "௸", "௹", "௺", "ௐ"
+       ],
+       "telugu": [
+               "ఁ", "ం", "ః", "అ", "ఆ", "ఇ", "ఈ", "ఉ", "ఊ", "ఋ", "ౠ", "ఌ", "ౡ", "ఎ", "ఏ", "ఐ", "ఒ", "ఓ", "ఔ", "క", "ఖ", "గ", "ఘ", "ఙ", "చ", "ఛ", "జ", "ఝ", "ఞ", "ట", "ఠ", "డ", "ఢ", "ణ", "త", "థ", "ద", "ధ", "న", "ప", "ఫ", "బ", "భ", "మ", "య", "ర", "ఱ", "ల", "ళ", "వ", "శ", "ష", "స", "హ", "ా", "ి", "ీ", "ు", "ూ", "ృ", "ౄ", "ె", "ే", "ై", "ొ", "ో", "ౌ", "్", "ౢ", "ౣ", "ౘ", "ౙ", "౦", "౧", "౨", "౩", "౪", "౫", "౬", "౭", "౮", "౯", "ఽ", "౸", "౹", "౺", "౻", "౼", "౽", "౾", "౿"
+       ],
+       "sinhala": [
+               "අ", "ආ", "ඇ", "ඈ", "ඉ", "ඊ", "උ", "ඌ", "ඍ", "ඎ", "ඏ", "ඐ", "එ", "ඒ", "ඓ", "ඔ", "ඕ", "ඖ", "ක", "ඛ", "ග", "ඝ", "ඞ", "ඟ", "ච", "ඡ", "ජ", "ඣ", "ඤ", "ඥ", "ඦ", "ට", "ඨ", "ඩ", "ඪ", "ණ", "ඬ", "ත", "ථ", "ද", "ධ", "න", "ඳ", "ප", "ඵ", "බ", "භ", "ම", "ඹ", "ය", "ර", "ල", "ව", "ශ", "ෂ", "ස", "හ", "ළ", "ෆ",
+               [
+                       "◌ා",
+                       "ා"
+               ],
+               [
+                       "◌ැ",
+                       "ැ"
+               ],
+               [
+                       "◌ෑ",
+                       "ෑ"
+               ],
+               [
+                       "◌ි",
+                       "ි"
+               ],
+               [
+                       "◌ී",
+                       "ී"
+               ],
+               [
+                       "◌ු",
+                       "ු"
+               ],
+               [
+                       "◌ූ",
+                       "ූ"
+               ],
+               [
+                       "◌ෘ",
+                       "ෘ"
+               ],
+               [
+                       "◌ෲ",
+                       "ෲ"
+               ],
+               [
+                       "◌ෟ",
+                       "ෟ"
+               ],
+               [
+                       "◌ෳ",
+                       "ෳ"
+               ],
+               [
+                       "◌ෙ",
+                       "ෙ"
+               ],
+               [
+                       "◌ේ",
+                       "ේ"
+               ],
+               [
+                       "◌ො",
+                       "ො"
+               ],
+               [
+                       "◌ෝ",
+                       "ෝ"
+               ],
+               [
+                       "◌ෞ",
+                       "ෞ"
+               ],
+               [
+                       "◌්",
+                       "්"
+               ]
+       ],
+       "devanagari": [
+               "ऀ", "ँ", "ं", "ः", "ऄ", "अ", "आ", "इ", "ई", "उ", "ऊ", "ऋ", "ऌ", "ऍ", "ऎ", "ए", "ऐ", "ऑ", "ऒ", "ओ", "औ", "क", "ख", "ग", "घ", "ङ", "च", "छ", "ज", "झ", "ञ", "ट", "ठ", "ड", "ढ", "ण", "त", "थ", "द", "ध", "न", "ऩ", "प", "फ", "ब", "भ", "म", "य", "र", "ऱ", "ल", "ळ", "ऴ", "व", "श", "ष", "स", "ह", "ऺ", "ऻ", "़", "ऽ", "ा", "ि", "ी", "ु", "ू", "ृ", "ॄ", "ॅ", "ॆ", "े", "ै", "ॉ", "ॊ", "ो", "ौ", "्", "ॎ", "ॏ", "ॐ", "॑", "॒", "॓", "॔", "ॕ", "ॖ", "ॗ", "क़", "ख़", "ग़", "ज़", "ड़", "ढ़", "फ़", "य़", "ॠ", "ॡ", "ॢ", "ॣ", "।", "॥", "०", "१", "२", "३", "४", "५", "६", "७", "८", "९", "॰", "ॱ", "ॲ", "ॳ", "ॴ", "ॵ", "ॶ", "ॷ", "ॹ", "ॺ", "ॻ", "ॼ", "ॽ", "ॾ", "ॿ"
+       ],
+       "gujarati": [
+               "ૐ", "ઁ", "ં", "ઃ", "અ", "આ", "ઇ", "ઈ", "ઉ", "ઊ", "એ", "ઐ", "ઓ", "ઔ", "અં", "ઋ", "ઍ", "ઑ", "ઌ", "ૠ", "ૡ", "ક", "ખ", "ગ", "ઘ", "ઙ", "ચ", "છ", "જ", "ઝ", "ઞ", "ટ", "ઠ", "ડ", "ઢ", "ણ", "ત", "થ", "દ", "ધ", "ન", "પ", "ફ", "બ", "ભ", "મ", "ય", "ર", "લ", "ળ", "વ", "શ", "ષ", "સ", "હ", "ક્ષ", "જ્ઞ", "ઽ", "ા", "િ", "ી", "ી", "ુ", "ૂ", "ૃ", "ૄ", "ૅ", "ે", "ૈ", "ૉ", "ો", "ૌ", "ૢ", "ૣ", "્", "૦", "૧", "૨", "૩", "૪", "૫", "૬", "૭", "૮", "૯", "૱"
+       ],
+       "thai": [
+               "ก", "ข", "ฃ", "ค", "ฅ", "ฆ", "ง", "จ", "ฉ", "ช", "ซ", "ฌ", "ญ", "ฎ", "ฏ", "ฐ", "ฑ", "ฒ", "ณ", "ด", "ต", "ถ", "ท", "ธ", "น", "บ", "ป", "ผ", "ฝ", "พ", "ฟ", "ภ", "ม", "ย", "ร", "ฤ", "ล", "ฦ", "ว", "ศ", "ษ", "ส", "ห", "ฬ", "อ", "ฮ", "ะ", "ั", "า", "ๅ", "ำ", "ิ", "ี", "ึ", "ื", "ุ", "ู", "เ", "แ", "โ", "ใ", "ไ", "็", "่", "้", "๊", "๋", "์", "ํ", "ฺ", "๎", "๐", "๑", "๒", "๓", "๔", "๕", "๖", "๗", "๘", "๙", "฿", "ๆ", "ฯ", "๚", "๏", "๛"
+       ],
+       "lao": [
+               "ກ", "ຂ", "ຄ", "ງ", "ຈ", "ສ", "ຊ", "ຍ", "ດ", "ຕ", "ຖ", "ທ", "ນ", "ບ", "ປ", "ຜ", "ຝ", "ພ", "ຟ", "ມ", "ຢ", "ລ", "ວ", "ຫ", "ອ", "ຮ", "ຣ", "ໜ", "ໝ", "ຼ", "ຽ", "ະ", "ັ", "າ", "ຳ", "ິ", "ີ", "ຶ", "ື", "ຸ", "ູ", "ົ", "ເ", "ແ", "ໂ", "ໃ", "ໄ", "່", "້", "໊", "໋", "໌", "ໍ", "໐", "໑", "໒", "໓", "໔", "໕", "໖", "໗", "໘", "໙", "₭", "ໆ", "ຯ"
+       ],
+       "khmer": [
+               "ក", "ខ", "គ", "ឃ", "ង", "ច", "ឆ", "ជ", "ឈ", "ញ", "ដ", "ឋ", "ឌ", "ឍ", "ណ", "ត", "ថ", "ទ", "ធ", "ន", "ប", "ផ", "ព", "ភ", "ម", "យ", "រ", "ល", "វ", "ស", "ហ", "ឡ", "អ", "ឣ", "ឤ", "ឥ", "ឦ", "ឧ", "ឨ", "ឩ", "ឪ", "ឫ", "ឬ", "ឭ", "ឮ", "ឯ", "ឰ", "ឱ", "ឲ", "ឳ", "្", "឴", "឵", "ា", "ិ", "ី", "ឹ", "ឺ", "ុ", "ូ", "ួ", "ើ", "ឿ", "ៀ", "េ", "ែ", "ៃ", "ោ", "ៅ", "ំ", "ះ", "ៈ", "៉", "៊", "់", "៌", "៍", "៎", "៏", "័", "៑", "៓", "៝", "ៜ", "០", "១", "២", "៣", "៤", "៥", "៦", "៧", "៨", "៩", "៛", "។", "៕", "៖", "ៗ", "៘", "៙", "៚", "៰", "៱", "៲", "៳", "៴", "៵", "៶", "៷", "៸", "៹", "᧠", "᧡", "᧢", "᧣", "᧤", "᧥", "᧦", "᧧", "᧨", "᧩", "᧪", "᧫", "᧬", "᧭", "᧮", "᧯", "᧰", "᧱", "᧲", "᧳", "᧴", "᧵", "᧶", "᧷", "᧸", "᧹", "᧺", "᧻", "᧼", "᧽", "᧾", "᧿"
+       ]
+}
index f5aeb3f..32cd79a 100644 (file)
         * Wikipage import methods
         *
         * See https://www.mediawiki.org/wiki/ResourceLoader/Legacy_JavaScript#wikibits.js
-        *
-        * @deprecated since 1.17 Use mw.loader instead. Warnings added in 1.26.
         */
 
        function importScript( page ) {
                return importScriptURI( uri );
        }
 
+       /**
+        * @deprecated since 1.17 Use mw.loader instead. Warnings added in 1.25.
+        */
        function importScriptURI( url ) {
                if ( loadedScripts[url] ) {
                        return null;
                return importStylesheetURI( uri );
        }
 
+       /**
+        * @deprecated since 1.17 Use mw.loader instead. Warnings added in 1.25.
+        */
        function importStylesheetURI( url, media ) {
                var l = document.createElement( 'link' );
                l.rel = 'stylesheet';
 
        msg = 'Use mw.loader instead.';
        mw.log.deprecate( win, 'loadedScripts', loadedScripts, msg );
-       mw.log.deprecate( win, 'importScript', importScript, msg );
        mw.log.deprecate( win, 'importScriptURI', importScriptURI, msg );
-       mw.log.deprecate( win, 'importStylesheet', importStylesheet, msg );
        mw.log.deprecate( win, 'importStylesheetURI', importStylesheetURI, msg );
+       // Not quite deprecated yet.
+       win.importScript = importScript;
+       win.importStylesheet = importStylesheet;
 
 }( mediaWiki, jQuery ) );
index 3366f1e..e947775 100644 (file)
@@ -85,7 +85,7 @@
        column-width: @value;// IE 10+
 }
 
-.column-break-inside-avoid {
+.column-break-inside-avoid() {
        -webkit-column-break-inside: avoid; // Chrome Any, Safari 3+, Opera 11.1+
        page-break-inside: avoid; // Firefox 1.5+
        break-inside: avoid-column; // IE 10+
index e91302b..f6bf382 100644 (file)
@@ -60,3 +60,8 @@
 
 // Global border radius to be used to buttons and inputs
 @borderRadius: 2px;
+
+
+// Icon related variables
+@iconSize: 1.4em;
+@iconGutterWidth: 1em;
index 16fdf38..bdae0dd 100644 (file)
@@ -7,9 +7,11 @@
 }
 
 /*
- * Titles, including username links, are especially prone for getting jumbled up
+ * Titles, including username links, and also tag names
+ * are prone to getting jumbled up
  * with other titles, usernames, etc. in mixed RTL-LTR environment.
  */
+.mw-changeslist .mw-tag-marker,
 .mw-changeslist .mw-title {
        unicode-bidi: embed;
 }
index 4bd747b..8617f7c 100644 (file)
@@ -5,7 +5,7 @@ jQuery( function ( $ ) {
        var $preftoc, $preferences, $fieldsets, $legends,
                hash, labelFunc,
                $tzSelect, $tzTextbox, $localtimeHolder, servertime,
-               $checkBoxes, allowCloseWindowFn;
+               $checkBoxes, allowCloseWindow;
 
        labelFunc = function () {
                return this.id.replace( /^mw-prefsection/g, 'preftab' );
@@ -266,7 +266,7 @@ jQuery( function ( $ ) {
        // Set up a message to notify users if they try to leave the page without
        // saving.
        $( '#mw-prefs-form' ).data( 'origdata', $( '#mw-prefs-form' ).serialize() );
-       allowCloseWindowFn = mediaWiki.confirmCloseWindow( {
+       allowCloseWindow = mediaWiki.confirmCloseWindow( {
                test: function () {
                        return $( '#mw-prefs-form' ).serialize() !== $( '#mw-prefs-form' ).data( 'origdata' );
                },
@@ -274,6 +274,6 @@ jQuery( function ( $ ) {
                message: mediaWiki.msg( 'prefswarning-warning', mediaWiki.msg( 'saveprefs' ) ),
                namespace: 'prefswarning'
        } );
-       $( '#mw-prefs-form' ).submit( allowCloseWindowFn );
-       $( '#mw-prefs-restoreprefs' ).click( allowCloseWindowFn );
+       $( '#mw-prefs-form' ).submit( allowCloseWindow.release() );
+       $( '#mw-prefs-restoreprefs' ).click( allowCloseWindow.release() );
 } );
index eeccda5..d0dfb28 100644 (file)
                } );
 
                $uploadForm.submit( function () {
-                       allowCloseWindow();
+                       allowCloseWindow.release();
                } );
        } );
 }( mediaWiki, jQuery ) );
index ad951b0..5107f8e 100644 (file)
@@ -1,8 +1,5 @@
 @import "mediawiki.mixins";
-
-// Variables
-@iconSize: 1.4em;
-@gutterWidth: 1em;
+@import "mediawiki.ui/variables";
 
 // Mixins
 .mixin-mw-ui-icon-bgimage(@iconSvg, @iconPng) {
@@ -42,7 +39,7 @@
        //
        // Styleguide 6.1.1.
        &.mw-ui-icon-element {
-               @width: @iconSize + ( 2 * @gutterWidth );
+               @width: @iconSize + ( 2 * @iconGutterWidth );
 
                text-indent: -999px;
                overflow: hidden;
@@ -53,7 +50,7 @@
                        left: 0;
                        right: 0;
                        position: absolute;
-                       margin: 0 @gutterWidth;
+                       margin: 0 @iconGutterWidth;
                }
        }
 
@@ -81,7 +78,7 @@
                &:before {
                        position: relative;
                        width: @iconSize;
-                       margin-right: @gutterWidth;
+                       margin-right: @iconGutterWidth;
                }
        }
 
@@ -96,7 +93,7 @@
                        position: relative;
                        float: right;
                        width: @iconSize;
-                       margin-left: @gutterWidth;
+                       margin-left: @iconGutterWidth;
                }
        }
 }
index 7fc5c42..8d1faa6 100644 (file)
@@ -1,3 +1,4 @@
+/* jshint devel: true */
 ( function ( mw, $ ) {
        /**
         * @method confirmCloseWindow
@@ -7,11 +8,22 @@
         * work in most browsers.)
         *
         * This supersedes any previous onbeforeunload handler. If there was a handler before, it is
-        * restored when you execute the returned function.
+        * restored when you execute the returned release() function.
         *
         *     var allowCloseWindow = mw.confirmCloseWindow();
         *     // ... do stuff that can't be interrupted ...
-        *     allowCloseWindow();
+        *     allowCloseWindow.release();
+        *
+        * The second function returned is a trigger function to trigger the check and an alert
+        * window manually, e.g.:
+        *
+        *     var allowCloseWindow = mw.confirmCloseWindow();
+        *     // ... do stuff that can't be interrupted ...
+        *     if ( allowCloseWindow.trigger() ) {
+        *         // don't do anything (e.g. destroy the input field)
+        *     } else {
+        *         // do whatever you wanted to do
+        *     }
         *
         * @param {Object} [options]
         * @param {string} [options.namespace] Namespace for the event registration
         * @param {string} options.message.return The string message to show in the confirm dialog.
         * @param {Function} [options.test]
         * @param {boolean} [options.test.return=true] Whether to show the dialog to the user.
-        * @return {Function} Execute this when you want to allow the user to close the window
+        * @return {Object} An object of functions to work with this module
         */
        mw.confirmCloseWindow = function ( options ) {
                var savedUnloadHandler,
                        mainEventName = 'beforeunload',
-                       showEventName = 'pageshow';
+                       showEventName = 'pageshow',
+                       message;
 
                options = $.extend( {
                        message: mw.message( 'mwe-prevent-close' ).text(),
                        showEventName += '.' + options.namespace;
                }
 
+               if ( $.isFunction( options.message ) ) {
+                       message = options.message();
+               } else {
+                       message = options.message;
+               }
+
                $( window ).on( mainEventName, function () {
                        if ( options.test() ) {
                                // remove the handler while the alert is showing - otherwise breaks caching in Firefox (3?).
                                }, 1 );
 
                                // show an alert with this message
-                               if ( $.isFunction( options.message ) ) {
-                                       return options.message();
-                               } else {
-                                       return options.message;
-                               }
+                               return message;
                        }
                } ).on( showEventName, function () {
                        // Re-add onbeforeunload handler
                        }
                } );
 
-               // return the function they can use to stop this
-               return function () {
-                       $( window ).off( mainEventName + ' ' + showEventName );
+               /**
+                * Return the object with functions to release and manually trigger the confirm alert
+                * @ignore
+                */
+               return {
+                       /**
+                        * Remove all event listeners and don't show an alert anymore, if the user wants to leave
+                        * the page.
+                        * @ignore
+                        */
+                       release: function () {
+                               $( window ).off( mainEventName + ' ' + showEventName );
+                       },
+                       /**
+                        * Trigger the module's function manually: Check, if options.test() returns true and show
+                        * an alert to the user if he/she want to leave this page. Returns false, if options.test() returns
+                        * false or the user cancelled the alert window (~don't leave the page), true otherwise.
+                        * @ignore
+                        * @return boolean
+                        */
+                       trigger: function () {
+                               // use confirm to show the message to the user (if options.text() is true)
+                               if ( options.test() && !confirm( message ) ) {
+                                       // the user want to keep the actual page
+                                       return false;
+                               }
+                               // otherwise return true
+                               return true;
+                       }
                };
        };
 } )( mediaWiki, jQuery );
index d940100..6e12f49 100644 (file)
@@ -22,8 +22,8 @@
         * dialog box. Submitting that dialog box appends its contents to a
         * wiki page that you specify, as a new section.
         *
-        * This feature works with classic MediaWiki pages
-        * and is not compatible with LiquidThreads or Flow.
+        * This feature works with any content model that defines a
+        * `mw.messagePoster.MessagePoster`.
         *
         * Minimal usage example:
         *
index ee57c21..e556ed8 100644 (file)
@@ -14,6 +14,7 @@
                hasOwn = Object.prototype.hasOwnProperty,
                slice = Array.prototype.slice,
                trackCallbacks = $.Callbacks( 'memory' ),
+               trackHandlers = [],
                trackQueue = [];
 
        /**
                 */
                trackSubscribe: function ( topic, callback ) {
                        var seen = 0;
-
-                       trackCallbacks.add( function ( trackQueue ) {
+                       function handler( trackQueue ) {
                                var event;
                                for ( ; seen < trackQueue.length; seen++ ) {
                                        event = trackQueue[ seen ];
                                                callback.call( event, event.topic, event.data );
                                        }
                                }
+                       }
+
+                       trackHandlers.push( [ handler, callback ] );
+
+                       trackCallbacks.add( handler );
+               },
+
+               /**
+                * Stop handling events for a particular handler
+                *
+                * @param {Function} callback
+                */
+               trackUnsubscribe: function ( callback ) {
+                       trackHandlers = $.grep( trackHandlers, function ( fns ) {
+                               if ( fns[1] === callback ) {
+                                       trackCallbacks.remove( fns[0] );
+                                       // Ensure the tuple is removed to avoid holding on to closures
+                                       return false;
+                               }
+                               return true;
                        } );
                },
 
                                }
                        };
 
+                       /**
+                        * Write a message the console's error channel.
+                        *
+                        * Most browsers provide a stacktrace by default if the argument
+                        * is a caught Error object.
+                        *
+                        * @since 1.26
+                        * @param {Error|string...} msg Messages to output to console
+                        */
+                       log.error = function () {
+                               var console = window.console;
+                               if ( console && console.error && console.error.apply ) {
+                                       console.error.apply( console, arguments );
+                               }
+                       };
+
                        /**
                         * Create a property in a host object that, when accessed, will produce
                         * a deprecation warning in the console with backtrace.
index ad68967..053fb1a 100644 (file)
@@ -79,6 +79,7 @@
 
        // Restore original methods
        mw.log.warn = original.warn;
+       mw.log.error = original.error;
        mw.log.deprecate = original.deprecate;
 
 }( mediaWiki, jQuery ) );
diff --git a/resources/src/mediawiki/mediawiki.notification.common.css b/resources/src/mediawiki/mediawiki.notification.common.css
new file mode 100644 (file)
index 0000000..a1309c2
--- /dev/null
@@ -0,0 +1,7 @@
+.mw-notification-area {
+       position: absolute;
+}
+
+.mw-notification-area-floating {
+       position: fixed;
+}
index ae399ce..954de22 100644 (file)
@@ -1,5 +1,4 @@
 .mw-notification-area {
-       position: absolute;
        top: 0;
        right: 0;
        padding: 1em 1em 0 0;
@@ -8,10 +7,6 @@
        z-index: 10000;
 }
 
-.mw-notification-area-floating {
-       position: fixed;
-}
-
 .mw-notification {
        padding: 0.25em 1em;
        margin-bottom: 0.5em;
diff --git a/resources/src/oojs-ui-local.css b/resources/src/oojs-ui-local.css
new file mode 100644 (file)
index 0000000..ab780fe
--- /dev/null
@@ -0,0 +1,7 @@
+/* HACK: Set sane font-size for OOjs UI dialogs, in the most common case. This should be skin's
+   responsibility, but alas our skins tend to have the weirdest font-sizes on body. This shall be
+   removed when we make the MediaWiki skins bundled with tarball sane. (T91152) */
+body > .oo-ui-windowManager {
+       font-size: 12.8px;
+       font-size: 0.8rem;
+}
diff --git a/resources/src/polyfill-nodeTypes.js b/resources/src/polyfill-nodeTypes.js
new file mode 100644 (file)
index 0000000..556b51b
--- /dev/null
@@ -0,0 +1,19 @@
+/**
+ * Adds window.Node with node types according to:
+ * http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-1950641247
+ */
+
+window.Node = window.Node || {
+       ELEMENT_NODE:                1,
+       ATTRIBUTE_NODE:              2,
+       TEXT_NODE:                   3,
+       CDATA_SECTION_NODE:          4,
+       ENTITY_REFERENCE_NODE:       5,
+       ENTITY_NODE:                 6,
+       PROCESSING_INSTRUCTION_NODE: 7,
+       COMMENT_NODE:                8,
+       DOCUMENT_NODE:               9,
+       DOCUMENT_TYPE_NODE:          10,
+       DOCUMENT_FRAGMENT_NODE:      11,
+       NOTATION_NODE:               12
+};
index a62cc9d..80cc7d9 100644 (file)
@@ -52,6 +52,8 @@ function isCompatible( ua ) {
                ua.match( /Opera Mini/ ) ||
                // Nokia's Ovi Browser
                ua.match( /S40OviBrowser/ ) ||
+               // MeeGo's browser
+               ua.match( /MeeGo/ ) ||
                // Google Glass browser groks JS but UI is too limited
                ( ua.match( /Glass/ ) && ua.match( /Android/ ) )
        );
index 1a2e0cb..2682ee1 100644 (file)
@@ -84,6 +84,9 @@ $wgAutoloadClasses += array(
        # tests/phpunit/includes/diff
        'FakeDiffOp' => "$testDir/phpunit/includes/diff/FakeDiffOp.php",
 
+       # tests/phpunit/includes/logging
+       'LogFormatterTestCase' => "$testDir/phpunit/includes/logging/LogFormatterTestCase.php",
+
        # tests/phpunit/includes/password
        'PasswordTestCase' => "$testDir/phpunit/includes/password/PasswordTestCase.php",
 
index 3f4c6f9..a33b86a 100644 (file)
@@ -1,4 +1,4 @@
-.PHONY: help test phpunit install coverage warning destructive parser noparser safe databaseless list-groups
+.PHONY: help test phpunit coverage warning destructive parser noparser safe databaseless list-groups
 .DEFAULT: warning
 
 SHELL = /bin/sh
@@ -35,9 +35,6 @@ destructive: phpunit
 phpunit:
        ${PU}
 
-install:
-       ./install-phpunit.sh
-
 tap:
        ${PU} --tap
 
index 745a5b4..eca5b39 100644 (file)
@@ -6,13 +6,18 @@ class FauxRequestTest extends MediaWikiTestCase {
         * @covers FauxRequest::getHeader
         */
        public function testGetSetHeader() {
-               $value = 'test/test';
+               $value = 'text/plain, text/html';
 
                $request = new FauxRequest();
-               $request->setHeader( 'Content-Type', $value );
+               $request->setHeader( 'Accept', $value );
 
-               $this->assertEquals( $request->getHeader( 'Content-Type' ), $value );
-               $this->assertEquals( $request->getHeader( 'CONTENT-TYPE' ), $value );
-               $this->assertEquals( $request->getHeader( 'content-type' ), $value );
+               $this->assertEquals( $request->getHeader( 'Nonexistent' ), false );
+               $this->assertEquals( $request->getHeader( 'Accept' ), $value );
+               $this->assertEquals( $request->getHeader( 'ACCEPT' ), $value );
+               $this->assertEquals( $request->getHeader( 'accept' ), $value );
+               $this->assertEquals(
+                       $request->getHeader( 'Accept', WebRequest::GETHEADER_LIST ),
+                       array( 'text/plain', 'text/html' )
+               );
        }
 }
index 00c29ee..a8cffd1 100644 (file)
@@ -80,22 +80,22 @@ class TitleTest extends MediaWikiTestCase {
 
        public static function provideInvalidSecureAndSplit() {
                return array(
-                       array( '' ),
-                       array( ':' ),
-                       array( '__  __' ),
-                       array( '  __  ' ),
+                       array( '', 'title-invalid-empty' ),
+                       array( ':', 'title-invalid-empty' ),
+                       array( '__  __', 'title-invalid-empty' ),
+                       array( '  __  ', 'title-invalid-empty' ),
                        // Bad characters forbidden regardless of wgLegalTitleChars
-                       array( 'A [ B' ),
-                       array( 'A ] B' ),
-                       array( 'A { B' ),
-                       array( 'A } B' ),
-                       array( 'A < B' ),
-                       array( 'A > B' ),
-                       array( 'A | B' ),
+                       array( 'A [ B', 'title-invalid-characters' ),
+                       array( 'A ] B', 'title-invalid-characters' ),
+                       array( 'A { B', 'title-invalid-characters' ),
+                       array( 'A } B', 'title-invalid-characters' ),
+                       array( 'A < B', 'title-invalid-characters' ),
+                       array( 'A > B', 'title-invalid-characters' ),
+                       array( 'A | B', 'title-invalid-characters' ),
                        // URL encoding
-                       array( 'A%20B' ),
-                       array( 'A%23B' ),
-                       array( 'A%2523B' ),
+                       array( 'A%20B', 'title-invalid-characters' ),
+                       array( 'A%23B', 'title-invalid-characters' ),
+                       array( 'A%2523B', 'title-invalid-characters' ),
                        // XML/HTML character entity references
                        // Note: Commented out because they are not marked invalid by the PHP test as
                        // Title::newFromText runs Sanitizer::decodeCharReferencesAndNormalize first.
@@ -103,29 +103,30 @@ class TitleTest extends MediaWikiTestCase {
                        //'A &#233; B',
                        //'A &#x00E9; B',
                        // Subject of NS_TALK does not roundtrip to NS_MAIN
-                       array( 'Talk:File:Example.svg' ),
+                       array( 'Talk:File:Example.svg', 'title-invalid-talk-namespace' ),
                        // Directory navigation
-                       array( '.' ),
-                       array( '..' ),
-                       array( './Sandbox' ),
-                       array( '../Sandbox' ),
-                       array( 'Foo/./Sandbox' ),
-                       array( 'Foo/../Sandbox' ),
-                       array( 'Sandbox/.' ),
-                       array( 'Sandbox/..' ),
+                       array( '.', 'title-invalid-relative' ),
+                       array( '..', 'title-invalid-relative' ),
+                       array( './Sandbox', 'title-invalid-relative' ),
+                       array( '../Sandbox', 'title-invalid-relative' ),
+                       array( 'Foo/./Sandbox', 'title-invalid-relative' ),
+                       array( 'Foo/../Sandbox', 'title-invalid-relative' ),
+                       array( 'Sandbox/.', 'title-invalid-relative' ),
+                       array( 'Sandbox/..', 'title-invalid-relative' ),
                        // Tilde
-                       array( 'A ~~~ Name' ),
-                       array( 'A ~~~~ Signature' ),
-                       array( 'A ~~~~~ Timestamp' ),
-                       array( str_repeat( 'x', 256 ) ),
+                       array( 'A ~~~ Name', 'title-invalid-magic-tilde' ),
+                       array( 'A ~~~~ Signature', 'title-invalid-magic-tilde' ),
+                       array( 'A ~~~~~ Timestamp', 'title-invalid-magic-tilde' ),
+                       // Length
+                       array( str_repeat( 'x', 256 ), 'title-invalid-too-long' ),
                        // Namespace prefix without actual title
-                       array( 'Talk:' ),
-                       array( 'Talk:#' ),
-                       array( 'Category: ' ),
-                       array( 'Category: #bar' ),
+                       array( 'Talk:', 'title-invalid-empty' ),
+                       array( 'Talk:#', 'title-invalid-empty' ),
+                       array( 'Category: ', 'title-invalid-empty' ),
+                       array( 'Category: #bar', 'title-invalid-empty' ),
                        // interwiki prefix
-                       array( 'localtestiw: Talk: # anchor' ),
-                       array( 'localtestiw: Talk:' )
+                       array( 'localtestiw: Talk: # anchor', 'title-invalid-empty' ),
+                       array( 'localtestiw: Talk:', 'title-invalid-empty' )
                );
        }
 
@@ -164,9 +165,14 @@ class TitleTest extends MediaWikiTestCase {
         * @dataProvider provideInvalidSecureAndSplit
         * @note This mainly tests MediaWikiTitleCodec::parseTitle().
         */
-       public function testSecureAndSplitInvalid( $text ) {
+       public function testSecureAndSplitInvalid( $text, $expectedErrorMessage ) {
                $this->secureAndSplitGlobals();
-               $this->assertNull( Title::newFromText( $text ), "Invalid: $text" );
+               try {
+                       Title::newFromTextThrow( $text ); // should throw
+                       $this->assertTrue( false, "Invalid: $text" );
+               } catch ( MalformedTitleException $ex ) {
+                       $this->assertEquals( $expectedErrorMessage, $ex->getErrorMessage(), "Invalid: $text" );
+               }
        }
 
        public static function provideConvertByteClassToUnicodeClass() {
@@ -632,4 +638,26 @@ class TitleTest extends MediaWikiTestCase {
                $title = Title::makeTitle( NS_MAIN, 'Interwiki link', '', 'externalwiki' );
                $this->assertTrue( $title->isAlwaysKnown() );
        }
+
+       /**
+        * @covers Title::exists
+        */
+       public function testExists() {
+               $title = Title::makeTitle( NS_PROJECT, 'New page' );
+               $linkCache = LinkCache::singleton();
+
+               $article = new Article( $title );
+               $page = $article->getPage();
+               $page->doEditContent( new WikitextContent( 'Some [[link]]' ), 'summary' );
+
+               // Tell Title it doesn't know whether it exists
+               $title->mArticleID = -1;
+
+               // Tell the link cache it doesn't exists when it really does
+               $linkCache->clearLink( $title );
+               $linkCache->addBadLinkObj( $title );
+
+               $this->assertEquals( false, $title->exists(), 'exists() should rely on link cache unless GAID_FOR_UPDATE is used' );
+               $this->assertEquals( true, $title->exists( Title::GAID_FOR_UPDATE ), 'exists() should re-query database when GAID_FOR_UPDATE is used' );
+       }
 }
index b74a7ea..370b5b2 100644 (file)
@@ -425,4 +425,24 @@ class UserTest extends MediaWikiTestCase {
                $this->assertFalse( $user->isLoggedIn() );
                $this->assertTrue( $user->isAnon() );
        }
+
+       /**
+        * @covers User::checkAndSetTouched
+        */
+       public function testCheckAndSetTouched() {
+               $user = TestingAccessWrapper::newFromObject( User::newFromName( 'UTSysop' ) );
+               $this->assertTrue( $user->isLoggedIn() );
+
+               $touched = $user->getDBTouched();
+               $this->assertTrue(
+                       $user->checkAndSetTouched(), "checkAndSetTouched() succeded" );
+               $this->assertGreaterThan(
+                       $touched, $user->getDBTouched(), "user_touched increased with casOnTouched()" );
+
+               $touched = $user->getDBTouched();
+               $this->assertTrue(
+                       $user->checkAndSetTouched(), "checkAndSetTouched() succeded #2" );
+               $this->assertGreaterThan(
+                       $touched, $user->getDBTouched(), "user_touched increased with casOnTouched() #2" );
+       }
 }
index ea08c02..2edf0c6 100644 (file)
@@ -84,7 +84,7 @@ class ApiContinuationManagerTest extends MediaWikiTestCase {
                        'gcontinue' => 3,
                        'continue' => 'gcontinue||',
                ), $result->getResultData( 'continue' ) );
-               $this->assertSame( '', $result->getResultData( 'batchcomplete' ) );
+               $this->assertSame( true, $result->getResultData( 'batchcomplete' ) );
 
                $manager = self::getManager( '', $allModules, array( 'mock1', 'mock2' ) );
                $this->assertSame( false, $manager->isGeneratorDone() );
index 344af62..8ebdf60 100644 (file)
@@ -15,6 +15,11 @@ class ApiErrorFormatterTest extends MediaWikiTestCase {
                $result = new ApiResult( 8388608 );
                $formatter = new ApiErrorFormatter( $result, Language::factory( $lang ), $format, $useDB );
 
+               // Add default type
+               $expect1[ApiResult::META_TYPE] = 'assoc';
+               $expect2[ApiResult::META_TYPE] = 'assoc';
+               $expect3[ApiResult::META_TYPE] = 'assoc';
+
                $formatter->addWarning( 'string', 'mainpage' );
                $formatter->addError( 'err', 'mainpage' );
                $this->assertSame( $expect1, $result->getResultData(), 'Simple test' );
@@ -262,6 +267,7 @@ class ApiErrorFormatterTest extends MediaWikiTestCase {
                                        ApiResult::META_CONTENT => 'warnings',
                                ),
                        ),
+                       ApiResult::META_TYPE => 'assoc',
                ), $result->getResultData(), 'Simple test' );
 
                $result->reset();
@@ -293,6 +299,7 @@ class ApiErrorFormatterTest extends MediaWikiTestCase {
                                        ApiResult::META_CONTENT => 'warnings',
                                ),
                        ),
+                       ApiResult::META_TYPE => 'assoc',
                ), $result->getResultData(), 'Complex test' );
 
                $result->reset();
@@ -315,6 +322,7 @@ class ApiErrorFormatterTest extends MediaWikiTestCase {
                                        ApiResult::META_CONTENT => 'warnings',
                                ),
                        ),
+                       ApiResult::META_TYPE => 'assoc',
                ), $result->getResultData(), 'Status test' );
 
                $I = ApiResult::META_INDEXED_TAG_NAME;
index 7e43a24..f0d8455 100644 (file)
@@ -106,6 +106,16 @@ class ApiResultTest extends MediaWikiTestCase {
                                'Expected exception'
                        );
                }
+               try {
+                       ApiResult::setValue( $arr, null, $fh );
+                       $this->fail( 'Expected exception not thrown' );
+               } catch ( InvalidArgumentException $ex ) {
+                       $this->assertSame(
+                               'Cannot add resource(stream) to ApiResult',
+                               $ex->getMessage(),
+                               'Expected exception'
+                       );
+               }
                try {
                        $obj->file = $fh;
                        ApiResult::setValue( $arr, 'sub', $obj );
@@ -117,6 +127,17 @@ class ApiResultTest extends MediaWikiTestCase {
                                'Expected exception'
                        );
                }
+               try {
+                       $obj->file = $fh;
+                       ApiResult::setValue( $arr, null, $obj );
+                       $this->fail( 'Expected exception not thrown' );
+               } catch ( InvalidArgumentException $ex ) {
+                       $this->assertSame(
+                               'Cannot add resource(stream) to ApiResult',
+                               $ex->getMessage(),
+                               'Expected exception'
+                       );
+               }
                fclose( $fh );
 
                try {
@@ -129,6 +150,16 @@ class ApiResultTest extends MediaWikiTestCase {
                                'Expected exception'
                        );
                }
+               try {
+                       ApiResult::setValue( $arr, null, INF );
+                       $this->fail( 'Expected exception not thrown' );
+               } catch ( InvalidArgumentException $ex ) {
+                       $this->assertSame(
+                               'Cannot add non-finite floats to ApiResult',
+                               $ex->getMessage(),
+                               'Expected exception'
+                       );
+               }
                try {
                        ApiResult::setValue( $arr, 'nan', NAN );
                        $this->fail( 'Expected exception not thrown' );
@@ -139,21 +170,40 @@ class ApiResultTest extends MediaWikiTestCase {
                                'Expected exception'
                        );
                }
+               try {
+                       ApiResult::setValue( $arr, null, NAN );
+                       $this->fail( 'Expected exception not thrown' );
+               } catch ( InvalidArgumentException $ex ) {
+                       $this->assertSame(
+                               'Cannot add non-finite floats to ApiResult',
+                               $ex->getMessage(),
+                               'Expected exception'
+                       );
+               }
 
                $arr = array();
                $result2 = new ApiResult( 8388608 );
                $result2->addValue( null, 'foo', 'bar' );
                ApiResult::setValue( $arr, 'baz', $result2 );
-               $this->assertSame( array( 'baz' => array( 'foo' => 'bar' ) ), $arr );
+               $this->assertSame( array(
+                       'baz' => array(
+                               ApiResult::META_TYPE => 'assoc',
+                               'foo' => 'bar',
+                       )
+               ), $arr );
 
                $arr = array();
                ApiResult::setValue( $arr, 'foo', "foo\x80bar" );
                ApiResult::setValue( $arr, 'bar', "a\xcc\x81" );
                ApiResult::setValue( $arr, 'baz', 74 );
+               ApiResult::setValue( $arr, null, "foo\x80bar" );
+               ApiResult::setValue( $arr, null, "a\xcc\x81" );
                $this->assertSame( array(
                        'foo' => "foo\xef\xbf\xbdbar",
                        'bar' => "\xc3\xa1",
                        'baz' => 74,
+                       0 => "foo\xef\xbf\xbdbar",
+                       1 => "\xc3\xa1",
                ), $arr );
        }
 
@@ -182,6 +232,7 @@ class ApiResultTest extends MediaWikiTestCase {
                        'unnamed 2',
                        'a' => array( 'b' => array() ),
                        'setContentValue' => '3',
+                       ApiResult::META_TYPE => 'assoc',
                        ApiResult::META_CONTENT => 'setContentValue',
                ), $result->getResultData() );
                $this->assertSame( 20, $result->getSize() );
@@ -217,7 +268,9 @@ class ApiResultTest extends MediaWikiTestCase {
                        $result->getResultData( array( ApiResult::META_CONTENT ) ) );
 
                $result->reset();
-               $this->assertSame( array(), $result->getResultData() );
+               $this->assertSame( array(
+                       ApiResult::META_TYPE => 'assoc',
+               ), $result->getResultData() );
                $this->assertSame( 0, $result->getSize() );
 
                $result->addValue( null, 'foo', 1 );
@@ -227,7 +280,7 @@ class ApiResultTest extends MediaWikiTestCase {
                $result->addValue( null, 'bottom', '2' );
                $result->addValue( null, 'foo', '2', ApiResult::OVERRIDE );
                $result->addValue( null, 'bar', '2', ApiResult::OVERRIDE | ApiResult::ADD_ON_TOP );
-               $this->assertSame( array( 0, 'top', 'foo', 'bar', 'bottom' ),
+               $this->assertSame( array( 0, 'top', 'foo', 'bar', 'bottom', ApiResult::META_TYPE ),
                        array_keys( $result->getResultData() ) );
 
                $result->reset();
@@ -240,8 +293,10 @@ class ApiResultTest extends MediaWikiTestCase {
                $result->reset();
                $result->addValue( null, 'sub', array( 'foo' => 1 ) );
                $result->addValue( null, 'sub', array( 'bar' => 1 ) );
-               $this->assertSame( array( 'sub' => array( 'foo' => 1, 'bar' => 1 ) ),
-                       $result->getResultData() );
+               $this->assertSame( array(
+                       'sub' => array( 'foo' => 1, 'bar' => 1 ),
+                       ApiResult::META_TYPE => 'assoc',
+               ), $result->getResultData() );
 
                try {
                        $result->addValue( null, 'sub', array( 'foo' => 2, 'baz' => 2 ) );
@@ -264,6 +319,7 @@ class ApiResultTest extends MediaWikiTestCase {
                $this->assertSame( array(
                        'title' => (string)$title,
                        'obj' => array( 'foo' => 1, 'bar' => 2, ApiResult::META_TYPE => 'assoc' ),
+                       ApiResult::META_TYPE => 'assoc',
                ), $result->getResultData() );
 
                $fh = tmpfile();
@@ -277,6 +333,16 @@ class ApiResultTest extends MediaWikiTestCase {
                                'Expected exception'
                        );
                }
+               try {
+                       $result->addValue( null, null, $fh );
+                       $this->fail( 'Expected exception not thrown' );
+               } catch ( InvalidArgumentException $ex ) {
+                       $this->assertSame(
+                               'Cannot add resource(stream) to ApiResult',
+                               $ex->getMessage(),
+                               'Expected exception'
+                       );
+               }
                try {
                        $obj->file = $fh;
                        $result->addValue( null, 'sub', $obj );
@@ -288,6 +354,17 @@ class ApiResultTest extends MediaWikiTestCase {
                                'Expected exception'
                        );
                }
+               try {
+                       $obj->file = $fh;
+                       $result->addValue( null, null, $obj );
+                       $this->fail( 'Expected exception not thrown' );
+               } catch ( InvalidArgumentException $ex ) {
+                       $this->assertSame(
+                               'Cannot add resource(stream) to ApiResult',
+                               $ex->getMessage(),
+                               'Expected exception'
+                       );
+               }
                fclose( $fh );
 
                try {
@@ -300,6 +377,16 @@ class ApiResultTest extends MediaWikiTestCase {
                                'Expected exception'
                        );
                }
+               try {
+                       $result->addValue( null, null, INF );
+                       $this->fail( 'Expected exception not thrown' );
+               } catch ( InvalidArgumentException $ex ) {
+                       $this->assertSame(
+                               'Cannot add non-finite floats to ApiResult',
+                               $ex->getMessage(),
+                               'Expected exception'
+                       );
+               }
                try {
                        $result->addValue( null, 'nan', NAN );
                        $this->fail( 'Expected exception not thrown' );
@@ -310,12 +397,28 @@ class ApiResultTest extends MediaWikiTestCase {
                                'Expected exception'
                        );
                }
+               try {
+                       $result->addValue( null, null, NAN );
+                       $this->fail( 'Expected exception not thrown' );
+               } catch ( InvalidArgumentException $ex ) {
+                       $this->assertSame(
+                               'Cannot add non-finite floats to ApiResult',
+                               $ex->getMessage(),
+                               'Expected exception'
+                       );
+               }
 
                $result->reset();
                $result->addParsedLimit( 'foo', 12 );
-               $this->assertSame( array( 'limits' => array( 'foo' => 12 ) ), $result->getResultData() );
+               $this->assertSame( array(
+                       'limits' => array( 'foo' => 12 ),
+                       ApiResult::META_TYPE => 'assoc',
+               ), $result->getResultData() );
                $result->addParsedLimit( 'foo', 13 );
-               $this->assertSame( array( 'limits' => array( 'foo' => 13 ) ), $result->getResultData() );
+               $this->assertSame( array(
+                       'limits' => array( 'foo' => 13 ),
+                       ApiResult::META_TYPE => 'assoc',
+               ), $result->getResultData() );
                $this->assertSame( null, $result->getResultData( array( 'foo', 'bar', 'baz' ) ) );
                $this->assertSame( 13, $result->getResultData( array( 'limits', 'foo' ) ) );
                try {
@@ -345,16 +448,27 @@ class ApiResultTest extends MediaWikiTestCase {
                $result2 = new ApiResult( 8388608 );
                $result2->addValue( null, 'foo', 'bar' );
                $result->addValue( null, 'baz', $result2 );
-               $this->assertSame( array( 'baz' => array( 'foo' => 'bar' ) ), $result->getResultData() );
+               $this->assertSame( array(
+                       'baz' => array(
+                               'foo' => 'bar',
+                               ApiResult::META_TYPE => 'assoc',
+                       ),
+                       ApiResult::META_TYPE => 'assoc',
+               ), $result->getResultData() );
 
                $result = new ApiResult( 8388608 );
                $result->addValue( null, 'foo', "foo\x80bar" );
                $result->addValue( null, 'bar', "a\xcc\x81" );
                $result->addValue( null, 'baz', 74 );
+               $result->addValue( null, null, "foo\x80bar" );
+               $result->addValue( null, null, "a\xcc\x81" );
                $this->assertSame( array(
                        'foo' => "foo\xef\xbf\xbdbar",
                        'bar' => "\xc3\xa1",
                        'baz' => 74,
+                       0 => "foo\xef\xbf\xbdbar",
+                       1 => "\xc3\xa1",
+                       ApiResult::META_TYPE => 'assoc',
                ), $result->getResultData() );
        }
 
@@ -403,7 +517,7 @@ class ApiResultTest extends MediaWikiTestCase {
                $result->removePreserveKeysList( null, 'baz' );
                $result->addArrayTypeRecursive( null, 'default' );
                $result->addArrayType( null, 'array' );
-               $this->assertSame( $expect, $result->getResultData() );
+               $this->assertEquals( $expect, $result->getResultData() );
 
                $arr = array( 'foo' => array( 'bar' => array() ) );
                $expect = array(
@@ -1019,6 +1133,9 @@ class ApiResultTest extends MediaWikiTestCase {
                        if ( preg_match( '/Use of ApiResult::\S+ was deprecated in MediaWiki \d+.\d+\./', $errstr ) ) {
                                return true;
                        }
+                       if ( preg_match( '/Use of ApiMain to ApiResult::__construct was deprecated in MediaWiki \d+.\d+\./', $errstr ) ) {
+                               return true;
+                       }
                        return false;
                } );
                $reset = new ScopedCallback( 'restore_error_handler' );
@@ -1211,7 +1328,7 @@ class ApiResultTest extends MediaWikiTestCase {
                        'gcontinue' => 3,
                        'continue' => 'gcontinue||',
                ), $result->getResultData( 'continue' ) );
-               $this->assertSame( '', $result->getResultData( 'batchcomplete' ) );
+               $this->assertSame( true, $result->getResultData( 'batchcomplete' ) );
                $this->assertSame( array(
                        'mocklist' => array( 'mlcontinue' => 2 ),
                        'generator' => array( 'gcontinue' => 3 ),
@@ -1229,7 +1346,7 @@ class ApiResultTest extends MediaWikiTestCase {
                        'gcontinue' => 3,
                        'continue' => 'gcontinue||mocklist',
                ), $result->getResultData( 'continue' ) );
-               $this->assertSame( '', $result->getResultData( 'batchcomplete' ) );
+               $this->assertSame( true, $result->getResultData( 'batchcomplete' ) );
                $this->assertSame( array(
                        'generator' => array( 'gcontinue' => 3 ),
                ), $result->getResultData( 'query-continue' ) );
@@ -1283,7 +1400,7 @@ class ApiResultTest extends MediaWikiTestCase {
                        'mlcontinue' => 2,
                        'continue' => '-||mock1|mock2',
                ), $result->getResultData( 'continue' ) );
-               $this->assertSame( '', $result->getResultData( 'batchcomplete' ) );
+               $this->assertSame( true, $result->getResultData( 'batchcomplete' ) );
                $this->assertSame( array(
                        'mocklist' => array( 'mlcontinue' => 2 ),
                ), $result->getResultData( 'query-continue' ) );
@@ -1296,7 +1413,7 @@ class ApiResultTest extends MediaWikiTestCase {
                $result->endContinuation( 'raw' );
                $result->endContinuation( 'standard' );
                $this->assertSame( null, $result->getResultData( 'continue' ) );
-               $this->assertSame( '', $result->getResultData( 'batchcomplete' ) );
+               $this->assertSame( true, $result->getResultData( 'batchcomplete' ) );
                $this->assertSame( null, $result->getResultData( 'query-continue' ) );
                $main->setContinuationManager( null );
 
index 67949ab..cabf62b 100644 (file)
@@ -33,6 +33,7 @@ abstract class ApiFormatTestBase extends MediaWikiTestCase {
                        $main->getModuleManager()->addModule( $this->printerName, 'format', $class );
                }
                $result = $main->getResult();
+               $result->addArrayType( null, 'default' );
                foreach ( $data as $k => $v ) {
                        $result->addValue( null, $k, $v );
                }
index 0c31b95..7babaed 100644 (file)
@@ -94,6 +94,8 @@ class ApiFormatXmlTest extends ApiFormatTestBase {
                        array( array( "foo\xe3\x80\x80bar" => 1 ), '<?xml version="1.0"?><api _foo.3000.bar="1" />' ),
                        array( array( 'foo:bar' => 1, ApiResult::META_PRESERVE_KEYS => array( 'foo:bar' ) ),
                                '<?xml version="1.0"?><api foo:bar="1" />' ),
+                       array( array( 'a', 'b', ApiResult::META_INDEXED_TAG_NAME => 'foo bar' ),
+                               '<?xml version="1.0"?><api><_foo.20.bar>a</_foo.20.bar><_foo.20.bar>b</_foo.20.bar></api>' ),
 
                        // includenamespace param
                        array( array( 'x' => 'foo' ), '<?xml version="1.0"?><api x="foo" xmlns="http://www.mediawiki.org/xml/api/" />',
index 2431761..cd73522 100644 (file)
@@ -61,7 +61,7 @@ class ApiQueryContinue2Test extends ApiQueryContinueTestBase {
                };
                // generator + 1 prop + 1 list
                $data = $this->query( $mk( 99, 99, true ), 1, 'g1p', false ) +
-                       array( 'batchcomplete' => '' );
+                       array( 'batchcomplete' => true );
                $this->checkC( $data, $mk( 1, 1, true ), 6, 'g1p-11t' );
                $this->checkC( $data, $mk( 2, 2, true ), 3, 'g1p-22t' );
                $this->checkC( $data, $mk( 1, 1, false ), 6, 'g1p-11f' );
index de9965b..d441f4c 100644 (file)
@@ -67,7 +67,7 @@ class ApiQueryContinueTest extends ApiQueryContinueTestBase {
                        );
                };
                $data = $this->query( $mk( 99 ), 1, '1L', false ) +
-                       array( 'batchcomplete' => '' );
+                       array( 'batchcomplete' => true );
 
                // 1 list
                $this->checkC( $data, $mk( 1 ), 5, '1L-1' );
@@ -95,7 +95,7 @@ class ApiQueryContinueTest extends ApiQueryContinueTestBase {
                };
                // 2 lists
                $data = $this->query( $mk( 99, 99 ), 1, '2L', false ) +
-                       array( 'batchcomplete' => '' );
+                       array( 'batchcomplete' => true );
                $this->checkC( $data, $mk( 1, 1 ), 5, '2L-11' );
                $this->checkC( $data, $mk( 2, 2 ), 3, '2L-22' );
                $this->checkC( $data, $mk( 3, 3 ), 2, '2L-33' );
@@ -120,7 +120,7 @@ class ApiQueryContinueTest extends ApiQueryContinueTestBase {
                };
                // generator + 1 prop
                $data = $this->query( $mk( 99, 99 ), 1, 'G1P', false ) +
-                       array( 'batchcomplete' => '' );
+                       array( 'batchcomplete' => true );
                $this->checkC( $data, $mk( 1, 1 ), 11, 'G1P-11' );
                $this->checkC( $data, $mk( 2, 2 ), 6, 'G1P-22' );
                $this->checkC( $data, $mk( 3, 3 ), 4, 'G1P-33' );
@@ -146,7 +146,7 @@ class ApiQueryContinueTest extends ApiQueryContinueTestBase {
                };
                // generator + 2 props
                $data = $this->query( $mk( 99, 99, 99 ), 1, 'G2P', false ) +
-                       array( 'batchcomplete' => '' );
+                       array( 'batchcomplete' => true );
                $this->checkC( $data, $mk( 1, 1, 1 ), 16, 'G2P-111' );
                $this->checkC( $data, $mk( 2, 2, 2 ), 9, 'G2P-222' );
                $this->checkC( $data, $mk( 3, 3, 3 ), 6, 'G2P-333' );
@@ -180,7 +180,7 @@ class ApiQueryContinueTest extends ApiQueryContinueTestBase {
                };
                // generator + 1 prop + 1 list
                $data = $this->query( $mk( 99, 99, 99 ), 1, 'G1P1L', false ) +
-                       array( 'batchcomplete' => '' );
+                       array( 'batchcomplete' => true );
                $this->checkC( $data, $mk( 1, 1, 1 ), 11, 'G1P1L-111' );
                $this->checkC( $data, $mk( 2, 2, 2 ), 6, 'G1P1L-222' );
                $this->checkC( $data, $mk( 3, 3, 3 ), 4, 'G1P1L-333' );
@@ -218,7 +218,7 @@ class ApiQueryContinueTest extends ApiQueryContinueTestBase {
                };
                // generator + 1 prop + 1 list
                $data = $this->query( $mk( 99, 99, 99, 99, 99 ), 1, 'G2P2L1M', false ) +
-                       array( 'batchcomplete' => '' );
+                       array( 'batchcomplete' => true );
                $this->checkC( $data, $mk( 1, 1, 1, 1, 1 ), 16, 'G2P2L1M-11111' );
                $this->checkC( $data, $mk( 2, 2, 2, 2, 2 ), 9, 'G2P2L1M-22222' );
                $this->checkC( $data, $mk( 3, 3, 3, 3, 3 ), 6, 'G2P2L1M-33333' );
@@ -249,7 +249,7 @@ class ApiQueryContinueTest extends ApiQueryContinueTestBase {
                };
                // generator + 1 prop
                $data = $this->query( $mk( 99, true, 99, true ), 1, 'G=P', false ) +
-                       array( 'batchcomplete' => '' );
+                       array( 'batchcomplete' => true );
 
                $this->checkC( $data, $mk( 1, true, 1, true ), 4, 'G=P-1t1t' );
                $this->checkC( $data, $mk( 2, true, 2, true ), 2, 'G=P-2t2t' );
@@ -296,7 +296,7 @@ class ApiQueryContinueTest extends ApiQueryContinueTestBase {
                };
                // generator + 1 list
                $data = $this->query( $mk( 99, true, 99, true ), 1, 'G=L', false ) +
-                       array( 'batchcomplete' => '' );
+                       array( 'batchcomplete' => true );
 
                $this->checkC( $data, $mk( 1, true, 1, true ), 5, 'G=L-1t1t' );
                $this->checkC( $data, $mk( 2, true, 2, true ), 3, 'G=L-2t2t' );
index 0dba183..e39c382 100644 (file)
@@ -76,6 +76,19 @@ class RecentChangeTest extends MediaWikiTestCase {
                        ),
                        $this->user_comment
                );
+               # block/block - legacy
+               $this->assertIRCComment(
+                       $this->context->msg( 'blocklogentry', 'SomeTitle', 'duration', '(flags)' )->plain()
+                               . $sep . $this->user_comment,
+                       'block', 'block',
+                       array(
+                               'duration',
+                               'flags',
+                       ),
+                       $this->user_comment,
+                       '',
+                       true
+               );
                # block/unblock
                $this->assertIRCComment(
                        $this->context->msg( 'unblocklogentry', 'SomeTitle' )->plain() . $sep . $this->user_comment,
@@ -332,7 +345,7 @@ class RecentChangeTest extends MediaWikiTestCase {
         * @param string $msg (optional) A message for PHPUnit :-)
         */
        protected function assertIRCComment( $expected, $type, $action, $params,
-               $comment = null, $msg = ''
+               $comment = null, $msg = '', $legacy = false
        ) {
                $logEntry = new ManualLogEntry( $type, $action );
                $logEntry->setPerformer( $this->user );
@@ -341,6 +354,7 @@ class RecentChangeTest extends MediaWikiTestCase {
                        $logEntry->setComment( $comment );
                }
                $logEntry->setParameters( $params );
+               $logEntry->setLegacy( $legacy );
 
                $formatter = LogFormatter::newFromEntry( $logEntry );
                $formatter->setContext( $this->context );
index 645baf1..451d82a 100644 (file)
@@ -1,12 +1,13 @@
 <?php
 
-class MockDatabaseSqlite extends DatabaseSqlite {
+class DatabaseSqliteMock extends DatabaseSqlite {
        private $lastQuery;
 
        public static function newInstance( array $p = array() ) {
                $p['dbFilePath'] = ':memory:';
+               $p['schema'] = false;
 
-               return new self( $p );
+               return DatabaseBase::factory( 'SqliteMock', $p );
        }
 
        function query( $sql, $fname = '', $tempIgnore = false ) {
@@ -29,7 +30,7 @@ class MockDatabaseSqlite extends DatabaseSqlite {
  * @group medium
  */
 class DatabaseSqliteTest extends MediaWikiTestCase {
-       /** @var MockDatabaseSqlite */
+       /** @var DatabaseSqliteMock */
        protected $db;
 
        protected function setUp() {
@@ -38,7 +39,7 @@ class DatabaseSqliteTest extends MediaWikiTestCase {
                if ( !Sqlite::isPresent() ) {
                        $this->markTestSkipped( 'No SQLite support detected' );
                }
-               $this->db = MockDatabaseSqlite::newInstance();
+               $this->db = DatabaseSqliteMock::newInstance();
                if ( version_compare( $this->db->getServerVersion(), '3.6.0', '<' ) ) {
                        $this->markTestSkipped( "SQLite at least 3.6 required, {$this->db->getServerVersion()} found" );
                }
index b5ea7b7..a91cc95 100644 (file)
@@ -23,11 +23,11 @@ class ArrayUtilsTest extends PHPUnit_Framework_TestCase {
        }
 
        function provideFindLowerBound() {
-               $self = $this;
-               $indexValueCallback = function ( $size ) use ( $self ) {
-                       return function ( $val ) use ( $self, $size ) {
-                               $self->assertTrue( $val >= 0 );
-                               $self->assertTrue( $val < $size );
+               $that = $this;
+               $indexValueCallback = function ( $size ) use ( $that ) {
+                       return function ( $val ) use ( $that, $size ) {
+                               $that->assertTrue( $val >= 0 );
+                               $that->assertTrue( $val < $size );
                                return $val;
                        };
                };
index 4300197..cec662a 100644 (file)
@@ -70,7 +70,7 @@ class ProcessCacheLRUTest extends PHPUnit_Framework_TestCase {
 
        /**
         * @dataProvider provideInvalidConstructorArg
-        * @expectedException UnexpectedValueException
+        * @expectedException Wikimedia\Assert\ParameterAssertionException
         * @covers ProcessCacheLRU::__construct
         */
        public function testConstructorGivenInvalidValue( $maxSize ) {
diff --git a/tests/phpunit/includes/logging/BlockLogFormatterTest.php b/tests/phpunit/includes/logging/BlockLogFormatterTest.php
new file mode 100644 (file)
index 0000000..c7dc641
--- /dev/null
@@ -0,0 +1,372 @@
+<?php
+
+class BlockLogFormatterTest extends LogFormatterTestCase {
+
+       /**
+        * Provide different rows from the logging table to test
+        * for backward compatibility.
+        * Do not change the existing data, just add a new database row
+        */
+       public static function provideBlockLogDatabaseRows() {
+               return array(
+                       // Current log format
+                       array(
+                               array(
+                                       'type' => 'block',
+                                       'action' => 'block',
+                                       'comment' => 'Block comment',
+                                       'user' => 0,
+                                       'user_text' => 'Sysop',
+                                       'namespace' => NS_USER,
+                                       'title' => 'Logtestuser',
+                                       'params' => array(
+                                               '5::duration' => 'infinite',
+                                               '6::flags' => 'anononly',
+                                       ),
+                               ),
+                               array(
+                                       'text' => 'Sysop blocked Logtestuser with an expiry time of indefinite (anonymous users only)',
+                                       'api' => array(
+                                               'duration' => 'infinite',
+                                               'flags' => array( 'anononly' ),
+                                       ),
+                               ),
+                       ),
+
+                       // Old legacy log
+                       array(
+                               array(
+                                       'type' => 'block',
+                                       'action' => 'block',
+                                       'comment' => 'Block comment',
+                                       'user' => 0,
+                                       'user_text' => 'Sysop',
+                                       'namespace' => NS_USER,
+                                       'title' => 'Logtestuser',
+                                       'params' => array(
+                                               'infinite',
+                                               'anononly',
+                                       ),
+                               ),
+                               array(
+                                       'legacy' => true,
+                                       'text' => 'Sysop blocked Logtestuser with an expiry time of indefinite (anonymous users only)',
+                                       'api' => array(
+                                               'duration' => 'infinite',
+                                               'flags' => array( 'anononly' ),
+                                       ),
+                               ),
+                       ),
+
+                       // Old legacy log without flag
+                       array(
+                               array(
+                                       'type' => 'block',
+                                       'action' => 'block',
+                                       'comment' => 'Block comment',
+                                       'user' => 0,
+                                       'user_text' => 'Sysop',
+                                       'namespace' => NS_USER,
+                                       'title' => 'Logtestuser',
+                                       'params' => array(
+                                               'infinite',
+                                       ),
+                               ),
+                               array(
+                                       'legacy' => true,
+                                       'text' => 'Sysop blocked Logtestuser with an expiry time of indefinite',
+                                       'api' => array(
+                                               'duration' => 'infinite',
+                                               'flags' => array(),
+                                       ),
+                               ),
+                       ),
+
+                       // Very old legacy log without duration
+                       array(
+                               array(
+                                       'type' => 'block',
+                                       'action' => 'block',
+                                       'comment' => 'Block comment',
+                                       'user' => 0,
+                                       'user_text' => 'Sysop',
+                                       'namespace' => NS_USER,
+                                       'title' => 'Logtestuser',
+                                       'params' => array(),
+                               ),
+                               array(
+                                       'legacy' => true,
+                                       'text' => 'Sysop blocked Logtestuser with an expiry time of indefinite',
+                                       'api' => array(
+                                               'duration' => 'infinite',
+                                               'flags' => array(),
+                                       ),
+                               ),
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideBlockLogDatabaseRows
+        */
+       public function testBlockLogDatabaseRows( $row, $extra ) {
+               $this->doTestLogFormatter( $row, $extra );
+       }
+
+       /**
+        * Provide different rows from the logging table to test
+        * for backward compatibility.
+        * Do not change the existing data, just add a new database row
+        */
+       public static function provideReblockLogDatabaseRows() {
+               return array(
+                       // Current log format
+                       array(
+                               array(
+                                       'type' => 'block',
+                                       'action' => 'reblock',
+                                       'comment' => 'Block comment',
+                                       'user' => 0,
+                                       'user_text' => 'Sysop',
+                                       'namespace' => NS_USER,
+                                       'title' => 'Logtestuser',
+                                       'params' => array(
+                                               '5::duration' => 'infinite',
+                                               '6::flags' => 'anononly',
+                                       ),
+                               ),
+                               array(
+                                       'text' => 'Sysop changed block settings for Logtestuser with an expiry time of'
+                                               . ' indefinite (anonymous users only)',
+                                       'api' => array(
+                                               'duration' => 'infinite',
+                                               'flags' => array( 'anononly' ),
+                                       ),
+                               ),
+                       ),
+
+                       // Old log
+                       array(
+                               array(
+                                       'type' => 'block',
+                                       'action' => 'reblock',
+                                       'comment' => 'Block comment',
+                                       'user' => 0,
+                                       'user_text' => 'Sysop',
+                                       'namespace' => NS_USER,
+                                       'title' => 'Logtestuser',
+                                       'params' => array(
+                                               'infinite',
+                                               'anononly',
+                                       ),
+                               ),
+                               array(
+                                       'legacy' => true,
+                                       'text' => 'Sysop changed block settings for Logtestuser with an expiry time of'
+                                               . ' indefinite (anonymous users only)',
+                                       'api' => array(
+                                               'duration' => 'infinite',
+                                               'flags' => array( 'anononly' ),
+                                       ),
+                               ),
+                       ),
+
+                       // Older log without flag
+                       array(
+                               array(
+                                       'type' => 'block',
+                                       'action' => 'reblock',
+                                       'comment' => 'Block comment',
+                                       'user' => 0,
+                                       'user_text' => 'Sysop',
+                                       'namespace' => NS_USER,
+                                       'title' => 'Logtestuser',
+                                       'params' => array(
+                                               'infinite',
+                                       )
+                               ),
+                               array(
+                                       'legacy' => true,
+                                       'text' => 'Sysop changed block settings for Logtestuser with an expiry time of indefinite',
+                                       'api' => array(
+                                               'duration' => 'infinite',
+                                               'flags' => array(),
+                                       ),
+                               ),
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideReblockLogDatabaseRows
+        */
+       public function testReblockLogDatabaseRows( $row, $extra ) {
+               $this->doTestLogFormatter( $row, $extra );
+       }
+
+       /**
+        * Provide different rows from the logging table to test
+        * for backward compatibility.
+        * Do not change the existing data, just add a new database row
+        */
+       public static function provideUnblockLogDatabaseRows() {
+               return array(
+                       // Current log format
+                       array(
+                               array(
+                                       'type' => 'block',
+                                       'action' => 'unblock',
+                                       'comment' => 'Block comment',
+                                       'user' => 0,
+                                       'user_text' => 'Sysop',
+                                       'namespace' => NS_USER,
+                                       'title' => 'Logtestuser',
+                                       'params' => array(),
+                               ),
+                               array(
+                                       'text' => 'Sysop unblocked Logtestuser',
+                                       'api' => array(),
+                               ),
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideUnblockLogDatabaseRows
+        */
+       public function testUnblockLogDatabaseRows( $row, $extra ) {
+               $this->doTestLogFormatter( $row, $extra );
+       }
+
+       /**
+        * Provide different rows from the logging table to test
+        * for backward compatibility.
+        * Do not change the existing data, just add a new database row
+        */
+       public static function provideSuppressBlockLogDatabaseRows() {
+               return array(
+                       // Current log format
+                       array(
+                               array(
+                                       'type' => 'suppress',
+                                       'action' => 'block',
+                                       'comment' => 'Block comment',
+                                       'user' => 0,
+                                       'user_text' => 'Sysop',
+                                       'namespace' => NS_USER,
+                                       'title' => 'Logtestuser',
+                                       'params' => array(
+                                               '5::duration' => 'infinite',
+                                               '6::flags' => 'anononly',
+                                       ),
+                               ),
+                               array(
+                                       'text' => 'Sysop blocked Logtestuser with an expiry time of indefinite (anonymous users only)',
+                                       'api' => array(
+                                               'duration' => 'infinite',
+                                               'flags' => array( 'anononly' ),
+                                       ),
+                               ),
+                       ),
+
+                       // legacy log
+                       array(
+                               array(
+                                       'type' => 'suppress',
+                                       'action' => 'block',
+                                       'comment' => 'Block comment',
+                                       'user' => 0,
+                                       'user_text' => 'Sysop',
+                                       'namespace' => NS_USER,
+                                       'title' => 'Logtestuser',
+                                       'params' => array(
+                                               'infinite',
+                                               'anononly',
+                                       ),
+                               ),
+                               array(
+                                       'legacy' => true,
+                                       'text' => 'Sysop blocked Logtestuser with an expiry time of indefinite (anonymous users only)',
+                                       'api' => array(
+                                               'duration' => 'infinite',
+                                               'flags' => array( 'anononly' ),
+                                       ),
+                               ),
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideSuppressBlockLogDatabaseRows
+        */
+       public function testSuppressBlockLogDatabaseRows( $row, $extra ) {
+               $this->doTestLogFormatter( $row, $extra );
+       }
+
+       /**
+        * Provide different rows from the logging table to test
+        * for backward compatibility.
+        * Do not change the existing data, just add a new database row
+        */
+       public static function provideSuppressReblockLogDatabaseRows() {
+               return array(
+                       // Current log format
+                       array(
+                               array(
+                                       'type' => 'suppress',
+                                       'action' => 'reblock',
+                                       'comment' => 'Block comment',
+                                       'user' => 0,
+                                       'user_text' => 'Sysop',
+                                       'namespace' => NS_USER,
+                                       'title' => 'Logtestuser',
+                                       'params' => array(
+                                               '5::duration' => 'infinite',
+                                               '6::flags' => 'anononly',
+                                       ),
+                               ),
+                               array(
+                                       'text' => 'Sysop changed block settings for Logtestuser with an expiry time of'
+                                               . ' indefinite (anonymous users only)',
+                                       'api' => array(
+                                               'duration' => 'infinite',
+                                               'flags' => array( 'anononly' ),
+                                       ),
+                               ),
+                       ),
+
+                       // Legacy format
+                       array(
+                               array(
+                                       'type' => 'suppress',
+                                       'action' => 'reblock',
+                                       'comment' => 'Block comment',
+                                       'user' => 0,
+                                       'user_text' => 'Sysop',
+                                       'namespace' => NS_USER,
+                                       'title' => 'Logtestuser',
+                                       'params' => array(
+                                               'infinite',
+                                               'anononly',
+                                       ),
+                               ),
+                               array(
+                                       'legacy' => true,
+                                       'text' => 'Sysop changed block settings for Logtestuser with an expiry time of'
+                                               . ' indefinite (anonymous users only)',
+                                       'api' => array(
+                                               'duration' => 'infinite',
+                                               'flags' => array( 'anononly' ),
+                                       ),
+                               ),
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideSuppressReblockLogDatabaseRows
+        */
+       public function testSuppressReblockLogDatabaseRows( $row, $extra ) {
+               $this->doTestLogFormatter( $row, $extra );
+       }
+}
diff --git a/tests/phpunit/includes/logging/DeleteLogFormatterTest.php b/tests/phpunit/includes/logging/DeleteLogFormatterTest.php
new file mode 100644 (file)
index 0000000..28e7efa
--- /dev/null
@@ -0,0 +1,527 @@
+<?php
+
+class DeleteLogFormatterTest extends LogFormatterTestCase {
+
+       /**
+        * Provide different rows from the logging table to test
+        * for backward compatibility.
+        * Do not change the existing data, just add a new database row
+        */
+       public static function provideDeleteLogDatabaseRows() {
+               return array(
+                       // Current format
+                       array(
+                               array(
+                                       'type' => 'delete',
+                                       'action' => 'delete',
+                                       'comment' => 'delete comment',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'Page',
+                                       'params' => array(),
+                               ),
+                               array(
+                                       'text' => 'User deleted page Page',
+                                       'api' => array(),
+                               ),
+                       ),
+
+                       // Legacy format
+                       array(
+                               array(
+                                       'type' => 'delete',
+                                       'action' => 'delete',
+                                       'comment' => 'delete comment',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'Page',
+                                       'params' => array(),
+                               ),
+                               array(
+                                       'legacy' => true,
+                                       'text' => 'User deleted page Page',
+                                       'api' => array(),
+                               ),
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideDeleteLogDatabaseRows
+        */
+       public function testDeleteLogDatabaseRows( $row, $extra ) {
+               $this->doTestLogFormatter( $row, $extra );
+       }
+
+       /**
+        * Provide different rows from the logging table to test
+        * for backward compatibility.
+        * Do not change the existing data, just add a new database row
+        */
+       public static function provideRestoreLogDatabaseRows() {
+               return array(
+                       // Current format
+                       array(
+                               array(
+                                       'type' => 'delete',
+                                       'action' => 'restore',
+                                       'comment' => 'delete comment',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'Page',
+                                       'params' => array(),
+                               ),
+                               array(
+                                       'text' => 'User restored page Page',
+                                       'api' => array(),
+                               ),
+                       ),
+
+                       // Legacy format
+                       array(
+                               array(
+                                       'type' => 'delete',
+                                       'action' => 'restore',
+                                       'comment' => 'delete comment',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'Page',
+                                       'params' => array(),
+                               ),
+                               array(
+                                       'legacy' => true,
+                                       'text' => 'User restored page Page',
+                                       'api' => array(),
+                               ),
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideRestoreLogDatabaseRows
+        */
+       public function testRestoreLogDatabaseRows( $row, $extra ) {
+               $this->doTestLogFormatter( $row, $extra );
+       }
+
+       /**
+        * Provide different rows from the logging table to test
+        * for backward compatibility.
+        * Do not change the existing data, just add a new database row
+        */
+       public static function provideRevisionLogDatabaseRows() {
+               return array(
+                       // Current format
+                       array(
+                               array(
+                                       'type' => 'delete',
+                                       'action' => 'revision',
+                                       'comment' => 'delete comment',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'Page',
+                                       'params' => array(
+                                               '4::type' => 'archive',
+                                               '5::ids' => array( '1', '3', '4' ),
+                                               '6::ofield' => '1',
+                                               '7::nfield' => '2',
+                                       ),
+                               ),
+                               array(
+                                       'text' => 'User changed visibility of 3 revisions on page Page: edit summary '
+                                               . 'hidden and content unhidden',
+                                       'api' => array(
+                                               'type' => 'archive',
+                                               'ids' => array( '1', '3', '4' ),
+                                               'old' => array(
+                                                       'bitmask' => 1,
+                                                       'content' => true,
+                                                       'comment' => false,
+                                                       'user' => false,
+                                                       'restricted' => false,
+                                               ),
+                                               'new' => array(
+                                                       'bitmask' => 2,
+                                                       'content' => false,
+                                                       'comment' => true,
+                                                       'user' => false,
+                                                       'restricted' => false,
+                                               ),
+                                       ),
+                               ),
+                       ),
+
+                       // Legacy format
+                       array(
+                               array(
+                                       'type' => 'delete',
+                                       'action' => 'revision',
+                                       'comment' => 'delete comment',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'Page',
+                                       'params' => array(
+                                               'archive',
+                                               '1,3,4',
+                                               'ofield=1',
+                                               'nfield=2',
+                                       ),
+                               ),
+                               array(
+                                       'legacy' => true,
+                                       'text' => 'User changed visibility of 3 revisions on page Page: edit summary '
+                                               . 'hidden and content unhidden',
+                                       'api' => array(
+                                               'type' => 'archive',
+                                               'ids' => array( '1', '3', '4' ),
+                                               'old' => array(
+                                                       'bitmask' => 1,
+                                                       'content' => true,
+                                                       'comment' => false,
+                                                       'user' => false,
+                                                       'restricted' => false,
+                                               ),
+                                               'new' => array(
+                                                       'bitmask' => 2,
+                                                       'content' => false,
+                                                       'comment' => true,
+                                                       'user' => false,
+                                                       'restricted' => false,
+                                               ),
+                                       ),
+                               ),
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideRevisionLogDatabaseRows
+        */
+       public function testRevisionLogDatabaseRows( $row, $extra ) {
+               $this->doTestLogFormatter( $row, $extra );
+       }
+
+       /**
+        * Provide different rows from the logging table to test
+        * for backward compatibility.
+        * Do not change the existing data, just add a new database row
+        */
+       public static function provideEventLogDatabaseRows() {
+               return array(
+                       // Current format
+                       array(
+                               array(
+                                       'type' => 'delete',
+                                       'action' => 'event',
+                                       'comment' => 'delete comment',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'Page',
+                                       'params' => array(
+                                               '4::ids' => array( '1', '3', '4' ),
+                                               '5::ofield' => '1',
+                                               '6::nfield' => '2',
+                                       ),
+                               ),
+                               array(
+                                       'text' => 'User changed visibility of 3 log events on Page: edit summary hidden '
+                                               . 'and content unhidden',
+                                       'api' => array(
+                                               'type' => 'logging',
+                                               'ids' => array( '1', '3', '4' ),
+                                               'old' => array(
+                                                       'bitmask' => 1,
+                                                       'content' => true,
+                                                       'comment' => false,
+                                                       'user' => false,
+                                                       'restricted' => false,
+                                               ),
+                                               'new' => array(
+                                                       'bitmask' => 2,
+                                                       'content' => false,
+                                                       'comment' => true,
+                                                       'user' => false,
+                                                       'restricted' => false,
+                                               ),
+                                       ),
+                               ),
+                       ),
+
+                       // Legacy format
+                       array(
+                               array(
+                                       'type' => 'delete',
+                                       'action' => 'event',
+                                       'comment' => 'delete comment',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'Page',
+                                       'params' => array(
+                                               '1,3,4',
+                                               'ofield=1',
+                                               'nfield=2',
+                                       ),
+                               ),
+                               array(
+                                       'legacy' => true,
+                                       'text' => 'User changed visibility of 3 log events on Page: edit summary hidden '
+                                               . 'and content unhidden',
+                                       'api' => array(
+                                               'type' => 'logging',
+                                               'ids' => array( '1', '3', '4' ),
+                                               'old' => array(
+                                                       'bitmask' => 1,
+                                                       'content' => true,
+                                                       'comment' => false,
+                                                       'user' => false,
+                                                       'restricted' => false,
+                                               ),
+                                               'new' => array(
+                                                       'bitmask' => 2,
+                                                       'content' => false,
+                                                       'comment' => true,
+                                                       'user' => false,
+                                                       'restricted' => false,
+                                               ),
+                                       ),
+                               ),
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideEventLogDatabaseRows
+        */
+       public function testEventLogDatabaseRows( $row, $extra ) {
+               $this->doTestLogFormatter( $row, $extra );
+       }
+
+       /**
+        * Provide different rows from the logging table to test
+        * for backward compatibility.
+        * Do not change the existing data, just add a new database row
+        */
+       public static function provideSuppressRevisionLogDatabaseRows() {
+               return array(
+                       // Current format
+                       array(
+                               array(
+                                       'type' => 'suppress',
+                                       'action' => 'revision',
+                                       'comment' => 'Suppress comment',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'Page',
+                                       'params' => array(
+                                               '4::type' => 'archive',
+                                               '5::ids' => array( '1', '3', '4' ),
+                                               '6::ofield' => '1',
+                                               '7::nfield' => '10',
+                                       ),
+                               ),
+                               array(
+                                       'text' => 'User secretly changed visibility of 3 revisions on page Page: edit '
+                                               . 'summary hidden, content unhidden and applied restrictions to administrators',
+                                       'api' => array(
+                                               'type' => 'archive',
+                                               'ids' => array( '1', '3', '4' ),
+                                               'old' => array(
+                                                       'bitmask' => 1,
+                                                       'content' => true,
+                                                       'comment' => false,
+                                                       'user' => false,
+                                                       'restricted' => false,
+                                               ),
+                                               'new' => array(
+                                                       'bitmask' => 10,
+                                                       'content' => false,
+                                                       'comment' => true,
+                                                       'user' => false,
+                                                       'restricted' => true,
+                                               ),
+                                       ),
+                               ),
+                       ),
+
+                       // Legacy format
+                       array(
+                               array(
+                                       'type' => 'suppress',
+                                       'action' => 'revision',
+                                       'comment' => 'Suppress comment',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'Page',
+                                       'params' => array(
+                                               'archive',
+                                               '1,3,4',
+                                               'ofield=1',
+                                               'nfield=10',
+                                       ),
+                               ),
+                               array(
+                                       'legacy' => true,
+                                       'text' => 'User secretly changed visibility of 3 revisions on page Page: edit '
+                                               . 'summary hidden, content unhidden and applied restrictions to administrators',
+                                       'api' => array(
+                                               'type' => 'archive',
+                                               'ids' => array( '1', '3', '4' ),
+                                               'old' => array(
+                                                       'bitmask' => 1,
+                                                       'content' => true,
+                                                       'comment' => false,
+                                                       'user' => false,
+                                                       'restricted' => false,
+                                               ),
+                                               'new' => array(
+                                                       'bitmask' => 10,
+                                                       'content' => false,
+                                                       'comment' => true,
+                                                       'user' => false,
+                                                       'restricted' => true,
+                                               ),
+                                       ),
+                               ),
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideSuppressRevisionLogDatabaseRows
+        */
+       public function testSuppressRevisionLogDatabaseRows( $row, $extra ) {
+               $this->doTestLogFormatter( $row, $extra );
+       }
+
+       /**
+        * Provide different rows from the logging table to test
+        * for backward compatibility.
+        * Do not change the existing data, just add a new database row
+        */
+       public static function provideSuppressEventLogDatabaseRows() {
+               return array(
+                       // Current format
+                       array(
+                               array(
+                                       'type' => 'suppress',
+                                       'action' => 'event',
+                                       'comment' => 'Suppress comment',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'Page',
+                                       'params' => array(
+                                               '4::ids' => array( '1', '3', '4' ),
+                                               '5::ofield' => '1',
+                                               '6::nfield' => '10',
+                                       ),
+                               ),
+                               array(
+                                       'text' => 'User secretly changed visibility of 3 log events on Page: edit '
+                                               . 'summary hidden, content unhidden and applied restrictions to administrators',
+                                       'api' => array(
+                                               'type' => 'logging',
+                                               'ids' => array( '1', '3', '4' ),
+                                               'old' => array(
+                                                       'bitmask' => 1,
+                                                       'content' => true,
+                                                       'comment' => false,
+                                                       'user' => false,
+                                                       'restricted' => false,
+                                               ),
+                                               'new' => array(
+                                                       'bitmask' => 10,
+                                                       'content' => false,
+                                                       'comment' => true,
+                                                       'user' => false,
+                                                       'restricted' => true,
+                                               ),
+                                       ),
+                               ),
+                       ),
+
+                       // Legacy format
+                       array(
+                               array(
+                                       'type' => 'suppress',
+                                       'action' => 'event',
+                                       'comment' => 'Suppress comment',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'Page',
+                                       'params' => array(
+                                               '1,3,4',
+                                               'ofield=1',
+                                               'nfield=10',
+                                       ),
+                               ),
+                               array(
+                                       'legacy' => true,
+                                       'text' => 'User secretly changed visibility of 3 log events on Page: edit '
+                                               . 'summary hidden, content unhidden and applied restrictions to administrators',
+                                       'api' => array(
+                                               'type' => 'logging',
+                                               'ids' => array( '1', '3', '4' ),
+                                               'old' => array(
+                                                       'bitmask' => 1,
+                                                       'content' => true,
+                                                       'comment' => false,
+                                                       'user' => false,
+                                                       'restricted' => false,
+                                               ),
+                                               'new' => array(
+                                                       'bitmask' => 10,
+                                                       'content' => false,
+                                                       'comment' => true,
+                                                       'user' => false,
+                                                       'restricted' => true,
+                                               ),
+                                       ),
+                               ),
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideSuppressEventLogDatabaseRows
+        */
+       public function testSuppressEventLogDatabaseRows( $row, $extra ) {
+               $this->doTestLogFormatter( $row, $extra );
+       }
+
+       /**
+        * Provide different rows from the logging table to test
+        * for backward compatibility.
+        * Do not change the existing data, just add a new database row
+        */
+       public static function provideSuppressDeleteLogDatabaseRows() {
+               return array(
+                       // Current format
+                       array(
+                               array(
+                                       'type' => 'suppress',
+                                       'action' => 'delete',
+                                       'comment' => 'delete comment',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'Page',
+                                       'params' => array(),
+                               ),
+                               array(
+                                       'text' => 'User suppressed page Page',
+                                       'api' => array(),
+                               ),
+                       ),
+
+                       // Legacy format
+                       array(
+                               array(
+                                       'type' => 'suppress',
+                                       'action' => 'delete',
+                                       'comment' => 'delete comment',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'Page',
+                                       'params' => array(),
+                               ),
+                               array(
+                                       'legacy' => true,
+                                       'text' => 'User suppressed page Page',
+                                       'api' => array(),
+                               ),
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideSuppressDeleteLogDatabaseRows
+        */
+       public function testSuppressDeleteLogDatabaseRows( $row, $extra ) {
+               $this->doTestLogFormatter( $row, $extra );
+       }
+}
diff --git a/tests/phpunit/includes/logging/LogFormatterTestCase.php b/tests/phpunit/includes/logging/LogFormatterTestCase.php
new file mode 100644 (file)
index 0000000..e58711f
--- /dev/null
@@ -0,0 +1,64 @@
+<?php
+
+/**
+ * @since 1.26
+ */
+abstract class LogFormatterTestCase extends MediaWikiLangTestCase {
+
+       public function doTestLogFormatter( $row, $extra ) {
+               RequestContext::resetMain();
+               $row = $this->expandDatabaseRow( $row, $this->isLegacy( $extra ) );
+
+               $formatter = LogFormatter::newFromRow( $row );
+
+               $this->assertEquals(
+                       $extra['text'],
+                       self::removeSomeHtml( $formatter->getActionText() ),
+                       'Action text is equal to expected text'
+               );
+
+               $this->assertEquals(
+                       $extra['api'],
+                       self::removeApiMetaData( $formatter->formatParametersForApi() ),
+                       'Api log params is equal to expected array'
+               );
+       }
+
+       protected function isLegacy( $extra ) {
+               return isset( $extra['legacy'] ) && $extra['legacy'];
+       }
+
+       protected function expandDatabaseRow( $data, $legacy ) {
+               return array(
+                       // no log_id because no insert in database
+                       'log_type' => $data['type'],
+                       'log_action' => $data['action'],
+                       'log_timestamp' => isset( $data['timestamp'] ) ? $data['timestamp'] : wfTimestampNow(),
+                       'log_user' => isset( $data['user'] ) ? $data['user'] : 0,
+                       'log_user_text' => isset( $data['user_text'] ) ? $data['user_text'] : 'User',
+                       'log_namespace' => isset( $data['namespace'] ) ? $data['namespace'] : NS_MAIN,
+                       'log_title' => isset( $data['title'] ) ? $data['title'] : 'Main_Page',
+                       'log_page' => isset( $data['page'] ) ? $data['page'] : 0,
+                       'log_comment' => isset( $data['comment'] ) ? $data['comment'] : '',
+                       'log_params' => $legacy
+                               ? LogPage::makeParamBlob( $data['params'] )
+                               : LogEntryBase::makeParamBlob( $data['params'] ),
+                       'log_deleted' => isset( $data['deleted'] ) ? $data['deleted'] : 0,
+               );
+       }
+
+       private static function removeSomeHtml( $html ) {
+               return trim( preg_replace( '/<(a|span)[^>]*>([^<]*)<\/\1>/', '$2', $html ) );
+       }
+
+       private static function removeApiMetaData( $val ) {
+               if ( is_array( $val ) ) {
+                       unset( $val['_element'] );
+                       unset( $val['_type'] );
+                       foreach ( $val as $key => $value ) {
+                               $val[$key] = self::removeApiMetaData( $value );
+                       }
+               }
+               return $val;
+       }
+}
diff --git a/tests/phpunit/includes/logging/MergeLogFormatterTest.php b/tests/phpunit/includes/logging/MergeLogFormatterTest.php
new file mode 100644 (file)
index 0000000..5a0b906
--- /dev/null
@@ -0,0 +1,67 @@
+<?php
+
+class MergeLogFormatterTest extends LogFormatterTestCase {
+
+       /**
+        * Provide different rows from the logging table to test
+        * for backward compatibility.
+        * Do not change the existing data, just add a new database row
+        */
+       public static function provideMergeLogDatabaseRows() {
+               return array(
+                       // Current format
+                       array(
+                               array(
+                                       'type' => 'merge',
+                                       'action' => 'merge',
+                                       'comment' => 'Merge comment',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'OldPage',
+                                       'params' => array(
+                                               '4::dest' => 'NewPage',
+                                               '5::mergepoint' => '20140804160710',
+                                       ),
+                               ),
+                               array(
+                                       'text' => 'User merged OldPage into NewPage (revisions up to 16:07, 4 August 2014)',
+                                       'api' => array(
+                                               'mergepoint' => '2014-08-04T16:07:10Z',
+                                               'dest_ns' => 0,
+                                               'dest_title' => 'NewPage',
+                                       ),
+                               ),
+                       ),
+
+                       // Legacy format
+                       array(
+                               array(
+                                       'type' => 'merge',
+                                       'action' => 'merge',
+                                       'comment' => 'merge comment',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'OldPage',
+                                       'params' => array(
+                                               'NewPage',
+                                               '20140804160710',
+                                       ),
+                               ),
+                               array(
+                                       'legacy' => true,
+                                       'text' => 'User merged OldPage into NewPage (revisions up to 16:07, 4 August 2014)',
+                                       'api' => array(
+                                               'mergepoint' => '2014-08-04T16:07:10Z',
+                                               'dest_ns' => 0,
+                                               'dest_title' => 'NewPage',
+                                       ),
+                               ),
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideMergeLogDatabaseRows
+        */
+       public function testMergeLogDatabaseRows( $row, $extra ) {
+               $this->doTestLogFormatter( $row, $extra );
+       }
+}
diff --git a/tests/phpunit/includes/logging/MoveLogFormatterTest.php b/tests/phpunit/includes/logging/MoveLogFormatterTest.php
new file mode 100644 (file)
index 0000000..fdc4b7e
--- /dev/null
@@ -0,0 +1,270 @@
+<?php
+
+class MoveLogFormatterTest extends LogFormatterTestCase {
+
+       /**
+        * Provide different rows from the logging table to test
+        * for backward compatibility.
+        * Do not change the existing data, just add a new database row
+        */
+       public static function provideMoveLogDatabaseRows() {
+               return array(
+                       // Current format - with redirect
+                       array(
+                               array(
+                                       'type' => 'move',
+                                       'action' => 'move',
+                                       'comment' => 'move comment with redirect',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'OldPage',
+                                       'params' => array(
+                                               '4::target' => 'NewPage',
+                                               '5::noredir' => '0',
+                                       ),
+                               ),
+                               array(
+                                       'text' => 'User moved page OldPage to NewPage',
+                                       'api' => array(
+                                               'target_ns' => 0,
+                                               'target_title' => 'NewPage',
+                                               'suppressredirect' => false,
+                                       ),
+                               ),
+                       ),
+
+                       // Current format - without redirect
+                       array(
+                               array(
+                                       'type' => 'move',
+                                       'action' => 'move',
+                                       'comment' => 'move comment',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'OldPage',
+                                       'params' => array(
+                                               '4::target' => 'NewPage',
+                                               '5::noredir' => '1',
+                                       ),
+                               ),
+                               array(
+                                       'text' => 'User moved page OldPage to NewPage without leaving a redirect',
+                                       'api' => array(
+                                               'target_ns' => 0,
+                                               'target_title' => 'NewPage',
+                                               'suppressredirect' => true,
+                                       ),
+                               ),
+                       ),
+
+                       // legacy format - with redirect
+                       array(
+                               array(
+                                       'type' => 'move',
+                                       'action' => 'move',
+                                       'comment' => 'move comment',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'OldPage',
+                                       'params' => array(
+                                               'NewPage',
+                                               '',
+                                       ),
+                               ),
+                               array(
+                                       'legacy' => true,
+                                       'text' => 'User moved page OldPage to NewPage',
+                                       'api' => array(
+                                               'target_ns' => 0,
+                                               'target_title' => 'NewPage',
+                                               'suppressredirect' => false,
+                                       ),
+                               ),
+                       ),
+
+                       // legacy format - without redirect
+                       array(
+                               array(
+                                       'type' => 'move',
+                                       'action' => 'move',
+                                       'comment' => 'move comment',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'OldPage',
+                                       'params' => array(
+                                               'NewPage',
+                                               '1',
+                                       ),
+                               ),
+                               array(
+                                       'legacy' => true,
+                                       'text' => 'User moved page OldPage to NewPage without leaving a redirect',
+                                       'api' => array(
+                                               'target_ns' => 0,
+                                               'target_title' => 'NewPage',
+                                               'suppressredirect' => true,
+                                       ),
+                               ),
+                       ),
+
+                       // old format without flag for redirect suppression
+                       array(
+                               array(
+                                       'type' => 'move',
+                                       'action' => 'move',
+                                       'comment' => 'move comment',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'OldPage',
+                                       'params' => array(
+                                               'NewPage',
+                                       ),
+                               ),
+                               array(
+                                       'legacy' => true,
+                                       'text' => 'User moved page OldPage to NewPage',
+                                       'api' => array(
+                                               'target_ns' => 0,
+                                               'target_title' => 'NewPage',
+                                               'suppressredirect' => false,
+                                       ),
+                               ),
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideMoveLogDatabaseRows
+        */
+       public function testMoveLogDatabaseRows( $row, $extra ) {
+               $this->doTestLogFormatter( $row, $extra );
+       }
+
+       /**
+        * Provide different rows from the logging table to test
+        * for backward compatibility.
+        * Do not change the existing data, just add a new database row
+        */
+       public static function provideMoveRedirLogDatabaseRows() {
+               return array(
+                       // Current format - with redirect
+                       array(
+                               array(
+                                       'type' => 'move',
+                                       'action' => 'move_redir',
+                                       'comment' => 'move comment with redirect',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'OldPage',
+                                       'params' => array(
+                                               '4::target' => 'NewPage',
+                                               '5::noredir' => '0',
+                                       ),
+                               ),
+                               array(
+                                       'text' => 'User moved page OldPage to NewPage over redirect',
+                                       'api' => array(
+                                               'target_ns' => 0,
+                                               'target_title' => 'NewPage',
+                                               'suppressredirect' => false,
+                                       ),
+                               ),
+                       ),
+
+                       // Current format - without redirect
+                       array(
+                               array(
+                                       'type' => 'move',
+                                       'action' => 'move_redir',
+                                       'comment' => 'move comment',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'OldPage',
+                                       'params' => array(
+                                               '4::target' => 'NewPage',
+                                               '5::noredir' => '1',
+                                       ),
+                               ),
+                               array(
+                                       'text' => 'User moved page OldPage to NewPage over a redirect without leaving a redirect',
+                                       'api' => array(
+                                               'target_ns' => 0,
+                                               'target_title' => 'NewPage',
+                                               'suppressredirect' => true,
+                                       ),
+                               ),
+                       ),
+
+                       // legacy format - with redirect
+                       array(
+                               array(
+                                       'type' => 'move',
+                                       'action' => 'move_redir',
+                                       'comment' => 'move comment',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'OldPage',
+                                       'params' => array(
+                                               'NewPage',
+                                               '',
+                                       ),
+                               ),
+                               array(
+                                       'legacy' => true,
+                                       'text' => 'User moved page OldPage to NewPage over redirect',
+                                       'api' => array(
+                                               'target_ns' => 0,
+                                               'target_title' => 'NewPage',
+                                               'suppressredirect' => false,
+                                       ),
+                               ),
+                       ),
+
+                       // legacy format - without redirect
+                       array(
+                               array(
+                                       'type' => 'move',
+                                       'action' => 'move_redir',
+                                       'comment' => 'move comment',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'OldPage',
+                                       'params' => array(
+                                               'NewPage',
+                                               '1',
+                                       ),
+                               ),
+                               array(
+                                       'legacy' => true,
+                                       'text' => 'User moved page OldPage to NewPage over a redirect without leaving a redirect',
+                                       'api' => array(
+                                               'target_ns' => 0,
+                                               'target_title' => 'NewPage',
+                                               'suppressredirect' => true,
+                                       ),
+                               ),
+                       ),
+
+                       // old format without flag for redirect suppression
+                       array(
+                               array(
+                                       'type' => 'move',
+                                       'action' => 'move_redir',
+                                       'comment' => 'move comment',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'OldPage',
+                                       'params' => array(
+                                               'NewPage',
+                                       ),
+                               ),
+                               array(
+                                       'legacy' => true,
+                                       'text' => 'User moved page OldPage to NewPage over redirect',
+                                       'api' => array(
+                                               'target_ns' => 0,
+                                               'target_title' => 'NewPage',
+                                               'suppressredirect' => false,
+                                       ),
+                               ),
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideMoveRedirLogDatabaseRows
+        */
+       public function testMoveRedirLogDatabaseRows( $row, $extra ) {
+               $this->doTestLogFormatter( $row, $extra );
+       }
+}
diff --git a/tests/phpunit/includes/logging/NewUsersLogFormatterTest.php b/tests/phpunit/includes/logging/NewUsersLogFormatterTest.php
new file mode 100644 (file)
index 0000000..13dd839
--- /dev/null
@@ -0,0 +1,207 @@
+<?php
+
+/**
+ * @group Database
+ */
+class NewUsersLogFormatterTest extends LogFormatterTestCase {
+
+       protected function setUp() {
+               parent::setUp();
+
+               // Register LogHandler, see $wgNewUserLog in Setup.php
+               $this->mergeMwGlobalArrayValue( 'wgLogActionsHandlers', array(
+                       'newusers/newusers' => 'NewUsersLogFormatter',
+                       'newusers/create' => 'NewUsersLogFormatter',
+                       'newusers/create2' => 'NewUsersLogFormatter',
+                       'newusers/byemail' => 'NewUsersLogFormatter',
+                       'newusers/autocreate' => 'NewUsersLogFormatter',
+               ) );
+       }
+
+       /**
+        * Provide different rows from the logging table to test
+        * for backward compatibility.
+        * Do not change the existing data, just add a new database row
+        */
+       public static function provideNewUsersLogDatabaseRows() {
+               return array(
+                       // Only old logs
+                       array(
+                               array(
+                                       'type' => 'newusers',
+                                       'action' => 'newusers',
+                                       'comment' => 'newusers comment',
+                                       'user' => 0,
+                                       'user_text' => 'New user',
+                                       'namespace' => NS_USER,
+                                       'title' => 'New user',
+                                       'params' => array(),
+                               ),
+                               array(
+                                       'legacy' => true,
+                                       'text' => 'User account New user was created',
+                                       'api' => array(),
+                               ),
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideNewUsersLogDatabaseRows
+        */
+       public function testNewUsersLogDatabaseRows( $row, $extra ) {
+               $this->doTestLogFormatter( $row, $extra );
+       }
+
+       /**
+        * Provide different rows from the logging table to test
+        * for backward compatibility.
+        * Do not change the existing data, just add a new database row
+        */
+       public static function provideCreateLogDatabaseRows() {
+               return array(
+                       // Current format
+                       array(
+                               array(
+                                       'type' => 'newusers',
+                                       'action' => 'create',
+                                       'comment' => 'newusers comment',
+                                       'user' => 0,
+                                       'user_text' => 'New user',
+                                       'namespace' => NS_USER,
+                                       'title' => 'New user',
+                                       'params' => array(
+                                               '4::userid' => '1',
+                                       ),
+                               ),
+                               array(
+                                       'text' => 'User account New user was created',
+                                       'api' => array(
+                                               'userid' => 1,
+                                       ),
+                               ),
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideCreateLogDatabaseRows
+        */
+       public function testCreateLogDatabaseRows( $row, $extra ) {
+               $this->doTestLogFormatter( $row, $extra );
+       }
+
+       /**
+        * Provide different rows from the logging table to test
+        * for backward compatibility.
+        * Do not change the existing data, just add a new database row
+        */
+       public static function provideCreate2LogDatabaseRows() {
+               return array(
+                       // Current format
+                       array(
+                               array(
+                                       'type' => 'newusers',
+                                       'action' => 'create2',
+                                       'comment' => 'newusers comment',
+                                       'user' => 0,
+                                       'user_text' => 'User',
+                                       'namespace' => NS_USER,
+                                       'title' => 'UTSysop',
+                                       'params' => array(
+                                               '4::userid' => '1',
+                                       ),
+                               ),
+                               array(
+                                       'text' => 'User account UTSysop was created by User',
+                                       'api' => array(
+                                               'userid' => 1,
+                                       ),
+                               ),
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideCreate2LogDatabaseRows
+        */
+       public function testCreate2LogDatabaseRows( $row, $extra ) {
+               $this->doTestLogFormatter( $row, $extra );
+       }
+
+       /**
+        * Provide different rows from the logging table to test
+        * for backward compatibility.
+        * Do not change the existing data, just add a new database row
+        */
+       public static function provideByemailLogDatabaseRows() {
+               return array(
+                       // Current format
+                       array(
+                               array(
+                                       'type' => 'newusers',
+                                       'action' => 'byemail',
+                                       'comment' => 'newusers comment',
+                                       'user' => 0,
+                                       'user_text' => 'Sysop',
+                                       'namespace' => NS_USER,
+                                       'title' => 'UTSysop',
+                                       'params' => array(
+                                               '4::userid' => '1',
+                                       ),
+                               ),
+                               array(
+                                       'text' => 'User account UTSysop was created by Sysop and password was sent by email',
+                                       'api' => array(
+                                               'userid' => 1,
+                                       ),
+                               ),
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideByemailLogDatabaseRows
+        */
+       public function testByemailLogDatabaseRows( $row, $extra ) {
+               $this->doTestLogFormatter( $row, $extra );
+       }
+
+       /**
+        * Provide different rows from the logging table to test
+        * for backward compatibility.
+        * Do not change the existing data, just add a new database row
+        */
+       public static function provideAutocreateLogDatabaseRows() {
+               return array(
+                       // Current format
+                       array(
+                               array(
+                                       'type' => 'newusers',
+                                       'action' => 'autocreate',
+                                       'comment' => 'newusers comment',
+                                       'user' => 0,
+                                       'user_text' => 'New user',
+                                       'namespace' => NS_USER,
+                                       'title' => 'New user',
+                                       'params' => array(
+                                               '4::userid' => '1',
+                                       ),
+                               ),
+                               array(
+                                       'text' => 'User account New user was created automatically',
+                                       'api' => array(
+                                               'userid' => 1,
+                                       ),
+                               ),
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideAutocreateLogDatabaseRows
+        */
+       public function testAutocreateLogDatabaseRows( $row, $extra ) {
+               $this->doTestLogFormatter( $row, $extra );
+       }
+}
diff --git a/tests/phpunit/includes/logging/PageLangLogFormatterTest.php b/tests/phpunit/includes/logging/PageLangLogFormatterTest.php
new file mode 100644 (file)
index 0000000..226e492
--- /dev/null
@@ -0,0 +1,53 @@
+<?php
+
+class PageLangLogFormatterTest extends LogFormatterTestCase {
+
+       protected function setUp() {
+               parent::setUp();
+
+               // Disable cldr extension
+               $this->setMwGlobals( 'wgHooks', array() );
+               // Register LogHandler, see $wgPageLanguageUseDB in Setup.php
+               $this->mergeMwGlobalArrayValue( 'wgLogActionsHandlers', array(
+                       'pagelang/pagelang' => 'PageLangLogFormatter',
+               ) );
+       }
+
+       /**
+        * Provide different rows from the logging table to test
+        * for backward compatibility.
+        * Do not change the existing data, just add a new database row
+        */
+       public static function providePageLangLogDatabaseRows() {
+               return array(
+                       // Current format
+                       array(
+                               array(
+                                       'type' => 'pagelang',
+                                       'action' => 'pagelang',
+                                       'comment' => 'page lang comment',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'Page',
+                                       'params' => array(
+                                               '4::oldlanguage' => 'en',
+                                               '5::newlanguage' => 'de[def]',
+                                       ),
+                               ),
+                               array(
+                                       'text' => 'User changed page language for Page from English (en) to Deutsch (de) [default].',
+                                       'api' => array(
+                                               'oldlanguage' => 'en',
+                                               'newlanguage' => 'de[def]'
+                                       ),
+                               ),
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider providePageLangLogDatabaseRows
+        */
+       public function testPageLangLogDatabaseRows( $row, $extra ) {
+               $this->doTestLogFormatter( $row, $extra );
+       }
+}
diff --git a/tests/phpunit/includes/logging/PatrolLogFormatterTest.php b/tests/phpunit/includes/logging/PatrolLogFormatterTest.php
new file mode 100644 (file)
index 0000000..6e1c5ef
--- /dev/null
@@ -0,0 +1,118 @@
+<?php
+
+class PatrolLogFormatterTest extends LogFormatterTestCase {
+
+       /**
+        * Provide different rows from the logging table to test
+        * for backward compatibility.
+        * Do not change the existing data, just add a new database row
+        */
+       public static function providePatrolLogDatabaseRows() {
+               return array(
+                       // Current format
+                       array(
+                               array(
+                                       'type' => 'patrol',
+                                       'action' => 'patrol',
+                                       'comment' => 'patrol comment',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'Page',
+                                       'params' => array(
+                                               '4::curid' => 2,
+                                               '5::previd' => 1,
+                                               '6::auto' => 0,
+                                       ),
+                               ),
+                               array(
+                                       'text' => 'User marked revision 2 of page Page patrolled',
+                                       'api' => array(
+                                               'curid' => 2,
+                                               'previd' => 1,
+                                               'auto' => false,
+                                       ),
+                               ),
+                       ),
+
+                       // Current format - autopatrol
+                       array(
+                               array(
+                                       'type' => 'patrol',
+                                       'action' => 'patrol',
+                                       'comment' => 'patrol comment',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'Page',
+                                       'params' => array(
+                                               '4::curid' => 2,
+                                               '5::previd' => 1,
+                                               '6::auto' => 1,
+                                       ),
+                               ),
+                               array(
+                                       'text' => 'User automatically marked revision 2 of page Page patrolled',
+                                       'api' => array(
+                                               'curid' => 2,
+                                               'previd' => 1,
+                                               'auto' => true,
+                                       ),
+                               ),
+                       ),
+
+                       // Legacy format
+                       array(
+                               array(
+                                       'type' => 'patrol',
+                                       'action' => 'patrol',
+                                       'comment' => 'patrol comment',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'Page',
+                                       'params' => array(
+                                               '2',
+                                               '1',
+                                               '0',
+                                       ),
+                               ),
+                               array(
+                                       'legacy' => true,
+                                       'text' => 'User marked revision 2 of page Page patrolled',
+                                       'api' => array(
+                                               'curid' => 2,
+                                               'previd' => 1,
+                                               'auto' => false,
+                                       ),
+                               ),
+                       ),
+
+                       // Legacy format - autopatrol
+                       array(
+                               array(
+                                       'type' => 'patrol',
+                                       'action' => 'patrol',
+                                       'comment' => 'patrol comment',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'Page',
+                                       'params' => array(
+                                               '2',
+                                               '1',
+                                               '1',
+                                       ),
+                               ),
+                               array(
+                                       'legacy' => true,
+                                       'text' => 'User automatically marked revision 2 of page Page patrolled',
+                                       'api' => array(
+                                               'curid' => 2,
+                                               'previd' => 1,
+                                               'auto' => true,
+                                       ),
+                               ),
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider providePatrolLogDatabaseRows
+        */
+       public function testPatrolLogDatabaseRows( $row, $extra ) {
+               $this->doTestLogFormatter( $row, $extra );
+       }
+}
diff --git a/tests/phpunit/includes/logging/RightsLogFormatterTest.php b/tests/phpunit/includes/logging/RightsLogFormatterTest.php
new file mode 100644 (file)
index 0000000..e9577f1
--- /dev/null
@@ -0,0 +1,157 @@
+<?php
+
+class RightsLogFormatterTest extends LogFormatterTestCase {
+
+       /**
+        * Provide different rows from the logging table to test
+        * for backward compatibility.
+        * Do not change the existing data, just add a new database row
+        */
+       public static function provideRightsLogDatabaseRows() {
+               return array(
+                       // Current format
+                       array(
+                               array(
+                                       'type' => 'rights',
+                                       'action' => 'rights',
+                                       'comment' => 'rights comment',
+                                       'user' => 0,
+                                       'user_text' => 'Sysop',
+                                       'namespace' => NS_USER,
+                                       'title' => 'User',
+                                       'params' => array(
+                                               '4::oldgroups' => array(),
+                                               '5::newgroups' => array( 'sysop', 'bureaucrat' ),
+                                       ),
+                               ),
+                               array(
+                                       'text' => 'Sysop changed group membership for User:User from (none) to '
+                                               . 'administrator and bureaucrat',
+                                       'api' => array(
+                                               'oldgroups' => array(),
+                                               'newgroups' => array( 'sysop', 'bureaucrat' ),
+                                       ),
+                               ),
+                       ),
+
+                       // Legacy format
+                       array(
+                               array(
+                                       'type' => 'rights',
+                                       'action' => 'rights',
+                                       'comment' => 'rights comment',
+                                       'user' => 0,
+                                       'user_text' => 'Sysop',
+                                       'namespace' => NS_USER,
+                                       'title' => 'User',
+                                       'params' => array(
+                                               '',
+                                               'sysop, bureaucrat',
+                                       ),
+                               ),
+                               array(
+                                       'legacy' => true,
+                                       'text' => 'Sysop changed group membership for User:User from (none) to '
+                                               . 'administrator and bureaucrat',
+                                       'api' => array(
+                                               'oldgroups' => array(),
+                                               'newgroups' => array( 'sysop', 'bureaucrat' ),
+                                       ),
+                               ),
+                       ),
+
+                       // Really old entry
+                       array(
+                               array(
+                                       'type' => 'rights',
+                                       'action' => 'rights',
+                                       'comment' => 'rights comment',
+                                       'user' => 0,
+                                       'user_text' => 'Sysop',
+                                       'namespace' => NS_USER,
+                                       'title' => 'User',
+                                       'params' => array(),
+                               ),
+                               array(
+                                       'legacy' => true,
+                                       'text' => 'Sysop changed group membership for User:User',
+                                       'api' => array(),
+                               ),
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideRightsLogDatabaseRows
+        */
+       public function testRightsLogDatabaseRows( $row, $extra ) {
+               $this->doTestLogFormatter( $row, $extra );
+       }
+
+       /**
+        * Provide different rows from the logging table to test
+        * for backward compatibility.
+        * Do not change the existing data, just add a new database row
+        */
+       public static function provideAutopromoteLogDatabaseRows() {
+               return array(
+                       // Current format
+                       array(
+                               array(
+                                       'type' => 'rights',
+                                       'action' => 'autopromote',
+                                       'comment' => 'rights comment',
+                                       'user' => 0,
+                                       'user_text' => 'Sysop',
+                                       'namespace' => NS_USER,
+                                       'title' => 'Sysop',
+                                       'params' => array(
+                                               '4::oldgroups' => array( 'sysop' ),
+                                               '5::newgroups' => array( 'sysop', 'bureaucrat' ),
+                                       ),
+                               ),
+                               array(
+                                       'text' => 'Sysop was automatically promoted from administrator to '
+                                               . 'administrator and bureaucrat',
+                                       'api' => array(
+                                               'oldgroups' => array( 'sysop' ),
+                                               'newgroups' => array( 'sysop', 'bureaucrat' ),
+                                       ),
+                               ),
+                       ),
+
+                       // Legacy format
+                       array(
+                               array(
+                                       'type' => 'rights',
+                                       'action' => 'autopromote',
+                                       'comment' => 'rights comment',
+                                       'user' => 0,
+                                       'user_text' => 'Sysop',
+                                       'namespace' => NS_USER,
+                                       'title' => 'Sysop',
+                                       'params' => array(
+                                               'sysop',
+                                               'sysop, bureaucrat',
+                                       ),
+                               ),
+                               array(
+                                       'legacy' => true,
+                                       'text' => 'Sysop was automatically promoted from administrator to '
+                                               . 'administrator and bureaucrat',
+                                       'api' => array(
+                                               'oldgroups' => array( 'sysop' ),
+                                               'newgroups' => array( 'sysop', 'bureaucrat' ),
+                                       ),
+                               ),
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideAutopromoteLogDatabaseRows
+        */
+       public function testAutopromoteLogDatabaseRows( $row, $extra ) {
+               $this->doTestLogFormatter( $row, $extra );
+       }
+}
diff --git a/tests/phpunit/includes/logging/UploadLogFormatterTest.php b/tests/phpunit/includes/logging/UploadLogFormatterTest.php
new file mode 100644 (file)
index 0000000..12f5161
--- /dev/null
@@ -0,0 +1,166 @@
+<?php
+
+class UploadLogFormatterTest extends LogFormatterTestCase {
+
+       /**
+        * Provide different rows from the logging table to test
+        * for backward compatibility.
+        * Do not change the existing data, just add a new database row
+        */
+       public static function provideUploadLogDatabaseRows() {
+               return array(
+                       // Current format
+                       array(
+                               array(
+                                       'type' => 'upload',
+                                       'action' => 'upload',
+                                       'comment' => 'upload comment',
+                                       'namespace' => NS_FILE,
+                                       'title' => 'File.png',
+                                       'params' => array(
+                                               'img_sha1' => 'hash',
+                                               'img_timestamp' => '20150101000000',
+                                       ),
+                               ),
+                               array(
+                                       'text' => 'User uploaded File:File.png',
+                                       'api' => array(
+                                               'img_sha1' => 'hash',
+                                               'img_timestamp' => '2015-01-01T00:00:00Z',
+                                       ),
+                               ),
+                       ),
+
+                       // Old format without params
+                       array(
+                               array(
+                                       'type' => 'upload',
+                                       'action' => 'upload',
+                                       'comment' => 'upload comment',
+                                       'namespace' => NS_FILE,
+                                       'title' => 'File.png',
+                                       'params' => array(),
+                               ),
+                               array(
+                                       'text' => 'User uploaded File:File.png',
+                                       'api' => array(),
+                               ),
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideUploadLogDatabaseRows
+        */
+       public function testUploadLogDatabaseRows( $row, $extra ) {
+               $this->doTestLogFormatter( $row, $extra );
+       }
+
+       /**
+        * Provide different rows from the logging table to test
+        * for backward compatibility.
+        * Do not change the existing data, just add a new database row
+        */
+       public static function provideOverwriteLogDatabaseRows() {
+               return array(
+                       // Current format
+                       array(
+                               array(
+                                       'type' => 'upload',
+                                       'action' => 'overwrite',
+                                       'comment' => 'upload comment',
+                                       'namespace' => NS_FILE,
+                                       'title' => 'File.png',
+                                       'params' => array(
+                                               'img_sha1' => 'hash',
+                                               'img_timestamp' => '20150101000000',
+                                       ),
+                               ),
+                               array(
+                                       'text' => 'User uploaded a new version of File:File.png',
+                                       'api' => array(
+                                               'img_sha1' => 'hash',
+                                               'img_timestamp' => '2015-01-01T00:00:00Z',
+                                       ),
+                               ),
+                       ),
+
+                       // Old format without params
+                       array(
+                               array(
+                                       'type' => 'upload',
+                                       'action' => 'overwrite',
+                                       'comment' => 'upload comment',
+                                       'namespace' => NS_FILE,
+                                       'title' => 'File.png',
+                                       'params' => array(),
+                               ),
+                               array(
+                                       'text' => 'User uploaded a new version of File:File.png',
+                                       'api' => array(),
+                               ),
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideOverwriteLogDatabaseRows
+        */
+       public function testOverwriteLogDatabaseRows( $row, $extra ) {
+               $this->doTestLogFormatter( $row, $extra );
+       }
+
+       /**
+        * Provide different rows from the logging table to test
+        * for backward compatibility.
+        * Do not change the existing data, just add a new database row
+        */
+       public static function provideRevertLogDatabaseRows() {
+               return array(
+                       // Current format
+                       array(
+                               array(
+                                       'type' => 'upload',
+                                       'action' => 'revert',
+                                       'comment' => 'upload comment',
+                                       'namespace' => NS_FILE,
+                                       'title' => 'File.png',
+                                       'params' => array(
+                                               'img_sha1' => 'hash',
+                                               'img_timestamp' => '20150101000000',
+                                       ),
+                               ),
+                               array(
+                                       'text' => 'User uploaded File:File.png',
+                                       'api' => array(
+                                               'img_sha1' => 'hash',
+                                               'img_timestamp' => '2015-01-01T00:00:00Z',
+                                       ),
+                               ),
+                       ),
+
+                       // Old format without params
+                       array(
+                               array(
+                                       'type' => 'upload',
+                                       'action' => 'revert',
+                                       'comment' => 'upload comment',
+                                       'namespace' => NS_FILE,
+                                       'title' => 'File.png',
+                                       'params' => array(),
+                               ),
+                               array(
+                                       'text' => 'User uploaded File:File.png',
+                                       'api' => array(),
+                               ),
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideRevertLogDatabaseRows
+        */
+       public function testRevertLogDatabaseRows( $row, $extra ) {
+               $this->doTestLogFormatter( $row, $extra );
+       }
+}
index 54758f9..b666c83 100644 (file)
@@ -36,39 +36,6 @@ class FormatMetadataTest extends MediaWikiMediaTestCase {
                        'File with invalid date metadata (bug 29471)' );
        }
 
-       /**
-        * @param string $filename
-        * @param int $expected Total image area
-        * @dataProvider provideFlattenArray
-        * @covers FormatMetadata::flattenArray
-        */
-       public function testFlattenArray( $vals, $type, $noHtml, $ctx, $expected ) {
-               $actual = FormatMetadata::flattenArray( $vals, $type, $noHtml, $ctx );
-               $this->assertEquals( $expected, $actual );
-       }
-
-       public static function provideFlattenArray() {
-               return array(
-                       array(
-                               array( 1, 2, 3 ), 'ul', false, false,
-                               "<ul><li>1</li>\n<li>2</li>\n<li>3</li></ul>",
-                       ),
-                       array(
-                               array( 1, 2, 3 ), 'ol', false, false,
-                               "<ol><li>1</li>\n<li>2</li>\n<li>3</li></ol>",
-                       ),
-                       array(
-                               array( 1, 2, 3 ), 'ul', true, false,
-                               "\n*1\n*2\n*3",
-                       ),
-                       array(
-                               array( 1, 2, 3 ), 'ol', true, false,
-                               "\n#1\n#2\n#3",
-                       ),
-                       // TODO: more test cases
-               );
-       }
-
        /**
         * @param mixed $input
         * @param mixed $output
diff --git a/tests/phpunit/includes/objectcache/WANObjectCacheTest.php b/tests/phpunit/includes/objectcache/WANObjectCacheTest.php
new file mode 100644 (file)
index 0000000..3e284c8
--- /dev/null
@@ -0,0 +1,252 @@
+<?php
+
+class WANObjectCacheTest extends MediaWikiTestCase {
+       /** @var WANObjectCache */
+       private $cache;
+
+       protected function setUp() {
+               parent::setUp();
+
+               if ( $this->getCliArg( 'use-wanobjectcache' ) ) {
+                       $name = $this->getCliArg( 'use-wanobjectcache' );
+
+                       $this->cache = ObjectCache::getWANInstance( $name );
+               } else {
+                       $this->cache = new WANObjectCache( array(
+                               'cache'   => new HashBagOStuff(),
+                               'pool'    => 'testcache-hash',
+                               'relayer' => new EventRelayerNull( array() )
+                       ) );
+               }
+       }
+
+       /**
+        * @dataProvider provider_testSetAndGet
+        * @covers WANObjectCache::set()
+        * @covers WANObjectCache::get()
+        * @param mixed $value
+        * @param integer $ttl
+        */
+       public function testSetAndGet( $value, $ttl ) {
+               $key = wfRandomString();
+               $this->cache->set( $key, $value, $ttl );
+
+               $curTTL = null;
+               $this->assertEquals( $value, $this->cache->get( $key, $curTTL ) );
+               if ( is_infinite( $ttl ) || $ttl == 0 ) {
+                       $this->assertTrue( is_infinite( $curTTL ), "Current TTL is infinite" );
+               } else {
+                       $this->assertGreaterThan( 0, $curTTL, "Current TTL > 0" );
+                       $this->assertLessThanOrEqual( $ttl, $curTTL, "Current TTL < nominal TTL" );
+               }
+       }
+
+       public static function provider_testSetAndGet() {
+               return array(
+                       array( 14141, 3 ),
+                       array( 3535.666, 3 ),
+                       array( array(), 3 ),
+                       array( null, 3 ),
+                       array( '0', 3 ),
+                       array( (object)array( 'meow' ), 3 ),
+                       array( INF, 3 ),
+                       array( '', 3 ),
+                       array( 'pizzacat', INF ),
+               );
+       }
+
+       public function testGetNotExists() {
+               $key = wfRandomString();
+               $curTTL = null;
+               $value = $this->cache->get( $key, $curTTL );
+
+               $this->assertFalse( $value, "Non-existing key has false value" );
+               $this->assertNull( $curTTL, "Non-existing key has null current TTL" );
+       }
+
+       public function testSetOver() {
+               $key = wfRandomString();
+               for ( $i=0; $i<3; ++$i ) {
+                       $value = wfRandomString();
+                       $this->cache->set($key, $value, 3);
+
+                       $this->assertEquals( $this->cache->get( $key ), $value );
+               }
+       }
+
+       /**
+        * @covers WANObjectCache::getWithSetCallback()
+        */
+       public function testGetWithSetCallback() {
+               $cache = $this->cache;
+
+               $key = wfRandomString();
+               $value = wfRandomString();
+               $cKey1 = wfRandomString();
+               $cKey2 = wfRandomString();
+
+               $wasSet = 0;
+               $func = function( $old, &$ttl ) use ( &$wasSet, $value ) {
+                       ++$wasSet;
+                       $ttl = 20; // override with another value
+                       return $value;
+               };
+
+               $wasSet = 0;
+               $v = $cache->getWithSetCallback( $key, $func, 30, array(), array( 'lockTSE' => 5 ) );
+               $this->assertEquals( $v, $value );
+               $this->assertEquals( 1, $wasSet, "Value regenerated" );
+
+               $curTTL = null;
+               $v = $cache->get( $key, $curTTL );
+               $this->assertLessThanOrEqual( 20, $curTTL, 'Current TTL between 19-20 (overriden)' );
+               $this->assertGreaterThanOrEqual( 19, $curTTL, 'Current TTL between 19-20 (overriden)' );
+
+               $wasSet = 0;
+               $v = $cache->getWithSetCallback( $key, $func, 30, array(), array( 'lockTSE' => 5 ) );
+               $this->assertEquals( $v, $value );
+               $this->assertEquals( 0, $wasSet, "Value not regenerated" );
+
+               $priorTime = microtime( true );
+               usleep( 1 );
+               $wasSet = 0;
+               $v = $cache->getWithSetCallback( $key, $func, 30, array( $cKey1, $cKey2 ) );
+               $this->assertEquals( $v, $value );
+               $this->assertEquals( 1, $wasSet, "Value regenerated due to check keys" );
+               $t1 = $cache->getCheckKeyTime( $cKey1 );
+               $this->assertGreaterThanOrEqual( $priorTime, $t1, 'Check keys generated on miss' );
+               $t2 = $cache->getCheckKeyTime( $cKey2 );
+               $this->assertGreaterThanOrEqual( $priorTime, $t2, 'Check keys generated on miss' );
+
+               $priorTime = microtime( true );
+               $wasSet = 0;
+               $v = $cache->getWithSetCallback( $key, $func, 30, array( $cKey1, $cKey2 ) );
+               $this->assertEquals( $v, $value );
+               $this->assertEquals( 1, $wasSet, "Value regenerated due to still-recent check keys" );
+               $t1 = $cache->getCheckKeyTime( $cKey1 );
+               $this->assertLessThanOrEqual( $priorTime, $t1, 'Check keys did not change again' );
+               $t2 = $cache->getCheckKeyTime( $cKey2 );
+               $this->assertLessThanOrEqual( $priorTime, $t2, 'Check keys did not change again' );
+
+               $curTTL = null;
+               $v = $cache->get( $key, $curTTL, array( $cKey1, $cKey2 ) );
+               $this->assertEquals( $v, $value );
+               $this->assertLessThanOrEqual( 0, $curTTL, "Value has current TTL < 0 due to check keys" );
+       }
+
+       /**
+        * @covers WANObjectCache::getMulti()
+        */
+       public function testGetMulti() {
+               $cache = $this->cache;
+
+               $value1 = array( 'this' => 'is', 'a' => 'test' );
+               $value2 = array( 'this' => 'is', 'another' => 'test' );
+
+               $key1 = wfRandomString();
+               $key2 = wfRandomString();
+               $key3 = wfRandomString();
+
+               $cache->set( $key1, $value1, 5 );
+               $cache->set( $key2, $value2, 10 );
+
+               $curTTLs = array();
+               $this->assertEquals(
+                       array( $key1 => $value1, $key2 => $value2 ),
+                       $cache->getMulti( array( $key1, $key2, $key3 ), $curTTLs )
+               );
+
+               $this->assertEquals( 2, count( $curTTLs ), "Two current TTLs in array" );
+               $this->assertGreaterThan( 0, $curTTLs[$key1], "Key 1 has current TTL > 0" );
+               $this->assertGreaterThan( 0, $curTTLs[$key2], "Key 2 has current TTL > 0" );
+
+               $cKey1 = wfRandomString();
+               $cKey2 = wfRandomString();
+               $curTTLs = array();
+               $this->assertEquals(
+                       array( $key1 => $value1, $key2 => $value2 ),
+                       $cache->getMulti( array( $key1, $key2, $key3 ), $curTTLs ),
+                       'Result array populated'
+               );
+
+               $priorTime = microtime( true );
+               usleep( 1 );
+               $curTTLs = array();
+               $this->assertEquals(
+                       array( $key1 => $value1, $key2 => $value2 ),
+                       $cache->getMulti( array( $key1, $key2, $key3 ), $curTTLs, array( $cKey1, $cKey2 ) ),
+                       "Result array populated even with new check keys"
+               );
+               $t1 = $cache->getCheckKeyTime( $cKey1 );
+               $this->assertGreaterThanOrEqual( $priorTime, $t1, 'Check key 1 generated on miss' );
+               $t2 = $cache->getCheckKeyTime( $cKey2 );
+               $this->assertGreaterThanOrEqual( $priorTime, $t2, 'Check key 2 generated on miss' );
+               $this->assertEquals( 2, count( $curTTLs ), "Current TTLs array set" );
+               $this->assertLessThanOrEqual( 0, $curTTLs[$key1], 'Key 1 has current TTL <= 0' );
+               $this->assertLessThanOrEqual( 0, $curTTLs[$key2], 'Key 2 has current TTL <= 0' );
+
+               usleep( 1 );
+               $curTTLs = array();
+               $this->assertEquals(
+                       array( $key1 => $value1, $key2 => $value2 ),
+                       $cache->getMulti( array( $key1, $key2, $key3 ), $curTTLs, array( $cKey1, $cKey2 ) ),
+                       "Result array still populated even with new check keys"
+               );
+               $this->assertEquals( 2, count( $curTTLs ), "Current TTLs still array set" );
+               $this->assertLessThan( 0, $curTTLs[$key1], 'Key 1 has negative current TTL' );
+               $this->assertLessThan( 0, $curTTLs[$key2], 'Key 2 has negative current TTL' );
+       }
+
+       /**
+        * @covers WANObjectCache::delete()
+        */
+       public function testDelete() {
+               $key = wfRandomString();
+               $value = wfRandomString();
+               $this->cache->set( $key, $value );
+
+               $curTTL = null;
+               $v = $this->cache->get( $key, $curTTL );
+               $this->assertEquals( $value, $v, "Key was created with value" );
+               $this->assertGreaterThan( 0, $curTTL, "Existing key has current TTL > 0" );
+
+               $this->cache->delete( $key );
+
+               $curTTL = null;
+               $v = $this->cache->get( $key, $curTTL );
+               $this->assertFalse( $v, "Deleted key has false value" );
+               $this->assertLessThan( 0, $curTTL, "Deleted key has current TTL < 0" );
+
+               $this->cache->set( $key, $value . 'more' );
+               $this->assertFalse( $v, "Deleted key is tombstoned and has false value" );
+               $this->assertLessThan( 0, $curTTL, "Deleted key is tombstoned and has current TTL < 0" );
+       }
+
+       /**
+        * @covers WANObjectCache::touchCheckKey()
+        * @covers WANObjectCache::getCheckKeyTime()
+        */
+       public function testTouchKeys() {
+               $key = wfRandomString();
+
+               $t0 = $this->cache->getCheckKeyTime( $key );
+               $this->assertFalse( $t0, 'Check key time is false' );
+
+               $priorTime = microtime( true );
+               usleep( 1 );
+               $this->cache->touchCheckKey( $key );
+               $t1 = $this->cache->getCheckKeyTime( $key );
+               $this->assertGreaterThanOrEqual( $priorTime, $t1, 'Check key created' );
+
+               $t2 = $this->cache->getCheckKeyTime( $key );
+               $this->assertEquals( $t1, $t2, 'Check key time did not change' );
+
+               usleep( 1 );
+               $this->cache->touchCheckKey( $key );
+               $t3 = $this->cache->getCheckKeyTime( $key );
+               $this->assertGreaterThan( $t2, $t3, 'Check key time increased' );
+
+               $t4 = $this->cache->getCheckKeyTime( $key );
+               $this->assertEquals( $t3, $t4, 'Check key time did not change' );
+       }
+}
\ No newline at end of file
index b95316c..d47ffa9 100644 (file)
@@ -36,6 +36,10 @@ class ExtensionProcessorTest extends MediaWikiTestCase {
        }
 
        public static function provideRegisterHooks() {
+               // Format:
+               // Current $wgHooks
+               // Content in extension.json
+               // Expected value of $wgHooks
                return array(
                        // No hooks
                        array(
@@ -64,6 +68,22 @@ class ExtensionProcessorTest extends MediaWikiTestCase {
                                        'FooBaz' => array( 'FooBazCallback' ),
                                ),
                        ),
+                       // Callbacks for FooBaz wrapped in an array
+                       array(
+                               array(),
+                               array( 'Hooks' => array( 'FooBaz' => array( 'Callback1' ) ) ) + self::$default,
+                               array(
+                                       'FooBaz' => array( 'Callback1' ),
+                               ),
+                       ),
+                       // Multiple callbacks for FooBaz hook
+                       array(
+                               array(),
+                               array( 'Hooks' => array( 'FooBaz' => array( 'Callback1', 'Callback2' ) ) ) + self::$default,
+                               array(
+                                       'FooBaz' => array( 'Callback1', 'Callback2' ),
+                               ),
+                       ),
                );
        }
 
index d0a7980..4305ceb 100644 (file)
@@ -96,17 +96,17 @@ class CachingSiteStoreTest extends MediaWikiTestCase {
                        ->getMock();
 
                // php 5.3 compatibility!
-               $self = $this;
+               $that = $this;
 
                $dbSiteStore->expects( $this->any() )
                        ->method( 'getSite' )
-                       ->will( $this->returnValue( $self->getTestSite() ) );
+                       ->will( $this->returnValue( $that->getTestSite() ) );
 
                $dbSiteStore->expects( $this->any() )
                        ->method( 'getSites' )
-                       ->will( $this->returnCallback( function() use( $self ) {
+                       ->will( $this->returnCallback( function() use ( $that ) {
                                $siteList = new SiteList();
-                               $siteList->setSite( $self->getTestSite() );
+                               $siteList->setSite( $that->getTestSite() );
 
                                return $siteList;
                        } ) );
index cb0316a..64b195d 100644 (file)
@@ -34,11 +34,11 @@ class SiteImporterTest extends PHPUnit_Framework_TestCase {
        private function newSiteImporter( array $expectedSites, $errorCount ) {
                $store = $this->getMock( 'SiteStore' );
 
-               $self = $this;
+               $that = $this;
                $store->expects( $this->once() )
                        ->method( 'saveSites' )
-                       ->will( $this->returnCallback( function ( $sites ) use ( $expectedSites, $self ) {
-                               $self->assertSitesEqual( $expectedSites, $sites );
+                       ->will( $this->returnCallback( function ( $sites ) use ( $expectedSites, $that ) {
+                               $that->assertSitesEqual( $expectedSites, $sites );
                        } ) );
 
                $store->expects( $this->any() )
diff --git a/tests/phpunit/install-phpunit.sh b/tests/phpunit/install-phpunit.sh
deleted file mode 100755 (executable)
index 022f998..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/bin/sh
-
-has_binary () {
-    if [ -z `which $1` ]; then
-        return 1
-    fi
-    return 0
-}
-
-if [ `id -u` -ne 0 ]; then
-    echo '*** ERROR: Must be root to run'
-    exit 1
-fi
-
-if ( has_binary phpunit ); then
-    echo PHPUnit already installed
-else if ( has_binary pear ); then
-    echo Installing phpunit with pear
-    pear channel-discover pear.phpunit.de
-    pear channel-discover components.ez.no
-    pear channel-discover pear.symfony.com
-    pear update-channels
-    #Temporary fix for 64597
-    pear install --alldeps phpunit/PHPUnit-3.7.35
-else if ( has_binary apt-get ); then
-    echo Installing phpunit with apt-get
-    apt-get install phpunit
-else if ( has_binary yum ); then
-    echo Installing phpunit with yum
-    yum install phpunit
-else if ( has_binary port ); then
-    echo Installing phpunit with macports
-    port install php5-unit
-fi
-fi
-fi
-fi
-fi
index 3c44b55..7c3d699 100644 (file)
                mwTester = new CompletenessTest( mw, mwTestIgnore );
        }
 
-       /**
-        * Test environment recommended for all QUnit test modules
-        *
-        * Whether to log environment changes to the console
-        */
-       QUnit.config.urlConfig.push( 'mwlogenv' );
-
        /**
         * Reset mw.config and others to a fresh copy of the live config for each test(),
         * and restore it back to the live one afterwards.
         * </code>
         */
        QUnit.newMwEnvironment = ( function () {
-               var warn, log, liveConfig, liveMessages,
+               var warn, error, liveConfig, liveMessages,
                        ajaxRequests = [];
 
                liveConfig = mw.config.values;
 
                function suppressWarnings() {
                        warn = mw.log.warn;
-                       mw.log.warn = $.noop;
+                       error = mw.log.error;
+                       mw.log.warn = mw.log.error = $.noop;
                }
 
                function restoreWarnings() {
+                       // Guard against calls not balanced with suppressWarnings()
                        if ( warn !== undefined ) {
                                mw.log.warn = warn;
-                               warn = undefined;
+                               mw.log.error = error;
+                               warn = error = undefined;
                        }
                }
 
                        ajaxRequests.push( { xhr: jqXHR, options: ajaxOptions } );
                }
 
-               log = QUnit.urlParams.mwlogenv ? mw.log : function () {};
-
                return function ( localEnv ) {
                        localEnv = $.extend( {
                                // QUnit
 
                        return {
                                setup: function () {
-                                       log( 'MwEnvironment> SETUP    for "' + QUnit.config.current.module
-                                               + ': ' + QUnit.config.current.testName + '"' );
 
                                        // Greetings, mock environment!
                                        mw.config.values = freshConfigCopy( localEnv.config );
 
                                teardown: function () {
                                        var timers, active;
-                                       log( 'MwEnvironment> TEARDOWN for "' + QUnit.config.current.module
-                                               + ': ' + QUnit.config.current.testName + '"' );
 
                                        localEnv.teardown.call( this );
 
index 56b0fa9..4bf44b0 100644 (file)
 
        caretSample = 'Some big text that we like to work with. Nothing fancy... you know what I mean?';
 
-/*
-       // @broken: Disabled per bug 34820
+       /* @broken: Disabled per bug 34820
        caretTest({
-       description: 'getCaretPosition with original/empty selection - bug 31847 with IE 6/7/8',
-       text: caretSample,
-       start: [0, caretSample.length], // Opera and Firefox (prior to FF 6.0) default caret to the end of the box (caretSample.length)
-       end: [0, caretSample.length], // Other browsers default it to the beginning (0), so check both.
-       mode: 'get'
+               description: 'getCaretPosition with original/empty selection - bug 31847 with IE 6/7/8',
+               text: caretSample,
+               start: [0, caretSample.length], // Opera and Firefox (prior to FF 6.0) default caret to the end of the box (caretSample.length)
+               end: [0, caretSample.length], // Other browsers default it to the beginning (0), so check both.
+               mode: 'get'
        });
-*/
+       */
 
        caretTest( {
                description: 'set/getCaretPosition with forced empty selection',
index b89526f..4f199bd 100644 (file)
@@ -80,6 +80,7 @@
 
                // Get editToken for local wiki, this should not make
                // a request as it should be retrieved from user.tokens.
+               // This means that this test must run before the #badToken test below.
                api.getToken( 'edit' )
                        .done( function ( token ) {
                                assert.ok( token.length, 'Got a token' );
                assert.equal( this.server.requests.length, 0, 'Requests made' );
        } );
 
+       QUnit.test( 'badToken()', function ( assert ) {
+               QUnit.expect( 2 );
+
+               var api = new mw.Api();
+
+               // Clear the default cached token
+               api.badToken( 'edit' );
+
+               api.getToken( 'edit' )
+                       .done( function ( token ) {
+                               assert.equal( token, '0123abc', 'Got a non-cached token' );
+                       } )
+                       .fail( function ( err ) {
+                               assert.equal( '', err, 'API error' );
+                       } );
+
+               this.server.requests[0].respond( 200, { 'Content-Type': 'application/json' },
+                       '{ "tokens": { "edittoken": "0123abc" } }'
+               );
+
+               assert.equal( this.server.requests.length, 1, 'Requests made' );
+       } );
+
        QUnit.test( 'getToken()', function ( assert ) {
                QUnit.expect( 5 );
 
index 5dcd941..d9fd6a7 100644 (file)
                );
        } );
 
-// Tests that {{-transformation vs. general parsing are done as requested
+       // Tests that {{-transformation vs. general parsing are done as requested
        QUnit.test( 'Curly brace transformation', 16, function ( assert ) {
                var oldUserLang = mw.config.get( 'wgUserLanguage' );
 
index cdb2624..5329be6 100644 (file)
                        assert.assertTrue( this.timeStamp >= now, 'thisValue has sane timestamp' );
                } );
        } );
+
+       QUnit.test( 'trackUnsubscribe', 1, function ( assert ) {
+               var sequence = [];
+               function unsubber( topic, data ) {
+                       sequence.push( [ topic, data ] );
+               }
+
+               mw.track( 'unsub', { key: 1 } );
+               mw.trackSubscribe( 'unsub', unsubber );
+               mw.track( 'unsub', { key: 2 } );
+               mw.trackUnsubscribe( unsubber );
+               mw.track( 'unsub', { key: 3 } );
+
+               assert.deepEqual( sequence, [
+                       [ 'unsub', { key: 1 } ],
+                       [ 'unsub', { key: 2 } ]
+               ], 'Stop when unsubscribing' );
+       } );
 }( mediaWiki ) );
index 6011961..5ea7a81 100644 (file)
@@ -86,7 +86,9 @@
                        'Mozilla/5.0 (Series40; NokiaX3-02/05.60; Profile/MIDP-2.1 Configuration/CLDC-1.1) Gecko/20100401 S40OviBrowser/3.2.0.0.6',
                        'Mozilla/5.0 (Series40; Nokia305/05.92; Profile/MIDP-2.1 Configuration/CLDC-1.1) Gecko/20100401 S40OviBrowser/3.7.0.0.11',
                        // Google Glass
-                       'Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; Glass 1 Build/IMM76L; XE11) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30'
+                       'Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; Glass 1 Build/IMM76L; XE11) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30',
+                       // MeeGo
+                       'Mozilla/5.0 (MeeGo; NokiaN9) AppleWebKit/534.13 (KHTML, like Gecko) NokiaBrowser/8.5.0 Mobile Safari/534.13'
                ],
                // No explicit support for or against these browsers, they're given a shot at Grade A.
                gradeX: [
index 2ea3f07..2079a64 100644 (file)
--- a/thumb.php
+++ b/thumb.php
@@ -502,7 +502,7 @@ function wfExtractThumbParams( $file, $params ) {
        unset( $params['thumbName'] );
 
        // Do the hook first for older extensions that rely on it.
-       if ( !wfRunHooks( 'ExtractThumbParameters', array( $thumbname, &$params ) ) ) {
+       if ( !Hooks::run( 'ExtractThumbParameters', array( $thumbname, &$params ) ) ) {
                // Check hooks if parameters can be extracted
                // Hooks return false if they manage to *resolve* the parameters
                // This hook should be considered deprecated
index d07b86f..5bfe328 100644 (file)
@@ -22,4 +22,6 @@
  * @ingroup Media
  */
 
+define( 'MW_ENTRY_PHP5', true );
+
 require './thumb.php';
index 0e0c3c0..c9e10cd 100644 (file)
@@ -22,4 +22,6 @@
  * @ingroup Media
  */
 
+define( 'MW_ENTRY_PHP5', true );
+
 require './thumb_handler.php';